public static void LoadWpaSupplicant() { var file = $"{Parameter.RepoDirs}/{"FILE_etc_wpa_supplicant_wpa_suplicant.conf"}"; File.Copy($"{Parameter.Resources}/FILE_etc_wpa_supplicant_wpa_suplicant.conf", file); var realFileName = Mount.GetFilesPath("FILE_etc_wpa_supplicant_wpa__suplicant.conf"); if (Mount.IsAlreadyMounted(file, realFileName) == false) { Mount.File(realFileName); } Terminal.Execute("systemctl restart wpa_supplicant.service"); }
public static void SetReady() { if (!System.IO.File.Exists(MntFile) && System.IO.File.Exists(File)) { System.IO.File.Copy(File, MntFile, true); } else if (System.IO.File.Exists(MntFile) && FileSystem.IsNewerThan(File, MntFile)) { System.IO.File.Delete(MntFile); System.IO.File.Copy(File, MntFile, true); } Mount.File(File); }
public static void SetSystemdJournald() { if (!Parameter.IsUnix) { return; } var file = $"{Parameter.RepoDirs}/{"FILE_etc_systemd_journald.conf"}"; if (File.Exists(file)) { return; } File.Copy($"{Parameter.Resources}/FILE_etc_systemd_journald.conf", file); var realFileName = Mount.GetFilesPath("FILE_etc_systemd_journald.conf"); if (Mount.IsAlreadyMounted(file, realFileName) == false) { Mount.File(realFileName); } Terminal.Execute("systemctl restart systemd-journald.service"); ConsoleLogger.Log("journald config ready"); }
public DomainControllerModule() { this.RequiresAuthentication(); Post["/dc/setup"] = x => { foreach (var dir in _directories) { var mntDir = Mount.GetDirsPath(dir); Terminal.Execute($"mkdir -p {mntDir}"); Terminal.Execute($"cp /mnt/livecd{dir} {mntDir}"); Mount.Dir(dir); } var domainName = (string)Request.Form.DomainName; var domainRealmname = (string)Request.Form.DomainRealmname; var domainHostname = (string)Request.Form.DomainHostname; var domainHostip = (string)Request.Form.DomainHostip; var domainAdminPassword = (string)Request.Form.DomainAdminPassword; if (string.IsNullOrEmpty(domainName) || string.IsNullOrEmpty(domainRealmname) || string.IsNullOrEmpty(domainHostname) || string.IsNullOrEmpty(domainHostip) || string.IsNullOrEmpty(domainAdminPassword)) { return(Response.AsText("error: a value is missing. go back.")); } Terminal.Execute($"samba-tool domain provision --option=\"interfaces = lo br0\" --option=\"bind interfaces only = yes\" --use-rfc2307 --domain={domainName} --realm={domainRealmname} --host-name={domainHostname} --host-ip={domainHostip} --adminpass={domainAdminPassword} --dns-backend=SAMBA_INTERNAL --server-role=dc"); ConsoleLogger.Log($"domain {domainName} created"); if (!Mount.IsAlreadyMounted("/etc/hosts")) { Mount.File("/etc/hosts"); } Terminal.Execute("echo 127.0.0.1 localhost.localdomain localhost > /etc/hosts"); Terminal.Execute($"echo {domainHostip} {domainHostname}.{domainRealmname} {domainHostname} >> /etc/hosts"); if (!Mount.IsAlreadyMounted("/etc/resolv.conf")) { Mount.File("/etc/resolv.conf"); } Terminal.Execute(!File.Exists("/etc/resolv.conf") ? $"echo nameserver {domainHostip} > /etc/resolv.conf" : $"echo nameserver {domainHostip} >> /etc/resolv.conf"); Terminal.Execute($"echo search {domainRealmname} >> /etc/resolv.conf"); Terminal.Execute($"echo domain {domainRealmname} >> /etc/resolv.conf"); const string sambaRealConf = "/etc/samba/smb.conf"; var sambaConf = $"{Parameter.Resources}/smb.conf.template"; const string workgroup = "$workgroup$"; const string realm = "$realm$"; const string netbiosName = "$netbiosName$"; const string netlogonPath = "$netlogonPath$"; var lowerRealm = domainRealmname.ToLower(); var sambaCnfText = File.ReadAllText(sambaConf) .Replace(workgroup, domainName.ToUpper()) .Replace(realm, domainRealmname.ToUpper()) .Replace(netbiosName, domainHostname.ToUpper()) .Replace(netlogonPath, $"/var/lib/samba/sysvol/{lowerRealm}/scripts"); if (File.Exists(sambaRealConf)) { File.Delete(sambaRealConf); } File.WriteAllText(sambaRealConf, sambaCnfText); Terminal.Execute("systemctl restart samba"); Terminal.Execute("mkdir -p /var/lib/samba/private"); var krbConf = $"{Parameter.Resources}/krb5.conf.template"; const string realmAlt = "$realmalt$"; var krbCnfText = File.ReadAllText(krbConf) .Replace(realmAlt, lowerRealm) .Replace(realm, domainRealmname.ToUpper()); const string krbRealConf = "/etc/krb5.conf"; if (File.Exists(krbRealConf)) { File.Delete(krbRealConf); } File.WriteAllText(krbRealConf, krbCnfText); const string krbRealConfSamba = "/var/lib/samba/private/krb5.conf"; if (File.Exists(krbRealConfSamba)) { File.Delete(krbRealConfSamba); } File.WriteAllText(krbRealConfSamba, krbCnfText); ConsoleLogger.Log($"{domainName} references updated"); return(Response.AsRedirect("/")); }; Post["/dc/adduser"] = x => { var domainName = (string)Request.Form.DomainName; var username = (string)Request.Form.Username; var userPassword = (string)Request.Form.UserPassword; if (string.IsNullOrEmpty(domainName) || string.IsNullOrEmpty(userPassword) || string.IsNullOrEmpty(username)) { return(Response.AsText("error: a value is missing. go back.")); } Terminal.Execute($"samba-tool user create {username} --password={userPassword} --username={username} --mail-address={username}@{domainName} --given-name={username}"); return(Response.AsRedirect("/")); }; Post["/dc/cert"] = x => { var domControllerGuid = (string)Request.Form.DomainControllerGuid; var domDnsName = (string)Request.Form.DomainDnsName; var domCrlDistributionPoint = (string)Request.Form.DomainCrlDistributionPoint; var domCaCountry = (string)Request.Form.DomainCaCountry; var domCaProvince = (string)Request.Form.DomainCaProvince; var domCaLocality = (string)Request.Form.DomainCaLocality; var domCaOrganization = (string)Request.Form.DomainCaOrganization; var domCaOrganizationalUnit = (string)Request.Form.DomainCaOrganizationalUnit; var domCaCommonName = (string)Request.Form.DomainCaCommonName; var domCaEmail = (string)Request.Form.DomainCaEmail; var domCaPassphrase = (string)Request.Form.DomainCaPassphrase; CertificateAuthority.DomainControllerCertificate.Create(domCrlDistributionPoint, domControllerGuid, domDnsName, domCaCountry, domCaProvince, domCaLocality, domCaOrganization, domCaOrganizationalUnit, domCaCommonName, domCaEmail, domCaPassphrase); return(Response.AsRedirect("/")); }; Post["/sc/cert"] = x => { var userPrincipalName = (string)Request.Form.UserPrincipalName; var domainCrlDistributionPoint = (string)Request.Form.DomainCrlDistributionPoint; var smartCardCaCountry = (string)Request.Form.SmartCardCaCountry; var smartCardCaProvince = (string)Request.Form.SmartCardCaProvince; var smartCardCaLocality = (string)Request.Form.SmartCardCaLocality; var smartCardCaOrganization = (string)Request.Form.SmartCardCaOrganization; var smartCardCaOrganizationalUnit = (string)Request.Form.SmartCardCaOrganizationalUnit; var smartCardCaPassphrase = (string)Request.Form.SmartCardCaPassphrase; CertificateAuthority.SmartCardCertificate.Create(domainCrlDistributionPoint, userPrincipalName, smartCardCaCountry, smartCardCaProvince, smartCardCaLocality, smartCardCaOrganization, smartCardCaOrganizationalUnit, smartCardCaPassphrase); return(Response.AsRedirect("/")); }; Post["/ca/cert"] = x => { var certAssignment = (string)Request.Form.CertAssignment.Value; var certCountry = (string)Request.Form.CertCountry; var certProvince = (string)Request.Form.CertProvince; var certLocality = (string)Request.Form.CertLocality; var certOrganization = (string)Request.Form.CertOrganization; var certOrganizationalUnit = (string)Request.Form.CertOrganizationalUnit; var certCommonName = (string)Request.Form.CertCommonName; var certEmailAddress = (string)Request.Form.CertEmailAddress; var certPassphrase = (string)Request.Form.CertPassphrase; var certKeyLength = (string)Request.Form.CertKeyLength; var certUserAssignedGuid = (string)Request.Form.CertUserAssignedGuid; var certServiceAssignedGuid = (string)Request.Form.CertServiceAssignedGuid; var certServiceAssignedName = (string)Request.Form.CertServiceAssignedName; CertificateAuthority.Certificate.Create(certCountry, certProvince, certLocality, certOrganization, certOrganizationalUnit, certCommonName, certEmailAddress, certPassphrase, CertificateAssignmentType.Detect(certAssignment), certKeyLength, certUserAssignedGuid, certServiceAssignedGuid, certServiceAssignedName); return(Response.AsRedirect("/")); }; }