| | |
| | | $app->uses("getconf"); |
| | | $web_config = $app->getconf->get_server_config($conf["server_id"], 'web'); |
| | | |
| | | //* Check if this is a chrooted setup |
| | | if($web_config['website_basedir'] != '' && @is_file($web_config['/var/www'].'/etc/passwd')) { |
| | | $apache_chrooted = true; |
| | | } else { |
| | | $apache_chrooted = false; |
| | | } |
| | | |
| | | if($data["new"]["document_root"] == '') { |
| | | $app->log("document_root not set",LOGLEVEL_WARN); |
| | | return 0; |
| | |
| | | // Remove trailing slash |
| | | if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1); |
| | | // create the symlinks, if not exist |
| | | if(!is_link($tmp_symlink)) { |
| | | if(is_link($tmp_symlink)) { |
| | | exec("rm -f ".escapeshellcmd($tmp_symlink)); |
| | | $app->log("Removed Symlink: rm -f ".$tmp_symlink,LOGLEVEL_DEBUG); |
| | | } |
| | |
| | | $command .= ' '.escapeshellcmd($data["new"]["system_user"]); |
| | | exec($command); |
| | | |
| | | |
| | | if($apache_chrooted) exec("chroot ".escapeshellcmd($web_config['website_basedir'])." ".$command); |
| | | |
| | | |
| | | } |
| | |
| | | $groupname = escapeshellcmd($data["new"]["system_group"]); |
| | | if($data["new"]["system_group"] != '' && !$app->system->is_group($data["new"]["system_group"])) { |
| | | exec("groupadd $groupname"); |
| | | if($apache_chrooted) exec("chroot ".escapeshellcmd($web_config['website_basedir'])." groupadd $groupname"); |
| | | $app->log("Adding the group: $groupname",LOGLEVEL_DEBUG); |
| | | } |
| | | |
| | | $username = escapeshellcmd($data["new"]["system_user"]); |
| | | if($data["new"]["system_user"] != '' && !$app->system->is_user($data["new"]["system_user"])) { |
| | | exec("useradd -d ".escapeshellcmd($data["new"]["document_root"])." -g $groupname -G sshusers $username -s /bin/false"); |
| | | if($apache_chrooted) exec("chroot ".escapeshellcmd($web_config['website_basedir'])." "."useradd -d ".escapeshellcmd($data["new"]["document_root"])." -g $groupname -G sshusers $username -s /bin/false"); |
| | | $app->log("Adding the user: $username",LOGLEVEL_DEBUG); |
| | | } |
| | | |
| | |
| | | |
| | | if($this->action == 'insert') { |
| | | // Chown and chmod the directories below the document root |
| | | exec("chown -R $username:$groupname ".escapeshellcmd($data["new"]["document_root"])); |
| | | |
| | | // The document root itself has to be owned by root |
| | | exec("chown root:root ".escapeshellcmd($data["new"]["document_root"])); |
| | | $this->_exec("chown -R $username:$groupname ".escapeshellcmd($data["new"]["document_root"])); |
| | | // The document root itself has to be owned by root in normal level and by the web owner in security level 20 |
| | | if($web_config['security_level'] == 20) { |
| | | $this->_exec("chown $username:$groupname ".escapeshellcmd($data["new"]["document_root"])); |
| | | } else { |
| | | $this->_exec("chown root:root ".escapeshellcmd($data["new"]["document_root"])); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | // If the security level is set to high |
| | | //* If the security level is set to high |
| | | if($web_config['security_level'] == 20) { |
| | | |
| | | exec("chmod 711 ".escapeshellcmd($data["new"]["document_root"]."/")); |
| | | exec("chmod 711 ".escapeshellcmd($data["new"]["document_root"]."/*")); |
| | | exec("chmod 710 ".escapeshellcmd($data["new"]["document_root"]."/web")); |
| | | $this->_exec("chmod 751 ".escapeshellcmd($data["new"]["document_root"]."/")); |
| | | $this->_exec("chmod 751 ".escapeshellcmd($data["new"]["document_root"])."/*"); |
| | | $this->_exec("chmod 710 ".escapeshellcmd($data["new"]["document_root"]."/web")); |
| | | |
| | | // make temp direcory writable for the apache user and the website user |
| | | $this->_exec("chmod 777 ".escapeshellcmd($data["new"]["document_root"]."/tmp")); |
| | | |
| | | $command = 'usermod'; |
| | | $command .= ' --groups sshusers'; |
| | | $command .= ' '.escapeshellcmd($data["new"]["system_user"]); |
| | | $this->_exec($command); |
| | | |
| | | //* if we have a chrooted apache enviroment |
| | | if($apache_chrooted) { |
| | | exec("chroot ".escapeshellcmd($web_config['website_basedir'])." ".$command); |
| | | |
| | | //* add the apache user to the client group in the chroot enviroment |
| | | $tmp_groupfile = $app->system->server_conf["group_datei"]; |
| | | $app->system->server_conf["group_datei"] = $web_config['website_basedir'].'/etc/group'; |
| | | $app->system->add_user_to_group($groupname, escapeshellcmd($web_config['user'])); |
| | | $app->system->server_conf["group_datei"] = $tmp_groupfile; |
| | | unset($tmp_groupfile); |
| | | } |
| | | |
| | | //* add the apache user to the client group |
| | | $app->system->add_user_to_group($groupname, escapeshellcmd($web_config['user'])); |
| | | |
| | | $this->_exec("chown $username:$groupname ".escapeshellcmd($data["new"]["document_root"])); |
| | | |
| | | /* |
| | | * Workaround for jailkit: If jailkit is enabled for the site, the |
| | | * website root has to be owned by the root user and we have to chmod it to 755 then |
| | | */ |
| | | |
| | | //* Check if there is a jailkit user for this site |
| | | $tmp = $app->db->queryOneRecord("SELECT count(shell_user_id) as number FROM shell_user WHERE parent_domain_id = ".$data["new"]["domain_id"]." AND chroot = 'jailkit'"); |
| | | if($tmp['number'] > 0) { |
| | | $this->_exec("chmod 755 ".escapeshellcmd($data["new"]["document_root"]."/")); |
| | | $this->_exec("chown root:root ".escapeshellcmd($data["new"]["document_root"]."/")); |
| | | } |
| | | unset($tmp); |
| | | |
| | | // If the security Level is set to medium |
| | | } else { |
| | | |
| | | exec("chmod 755 ".escapeshellcmd($data["new"]["document_root"]."/")); |
| | | exec("chmod 755 ".escapeshellcmd($data["new"]["document_root"]."/*")); |
| | | $this->_exec("chmod 755 ".escapeshellcmd($data["new"]["document_root"]."/")); |
| | | $this->_exec("chmod 755 ".escapeshellcmd($data["new"]["document_root"]."/*")); |
| | | $this->_exec("chown root:root ".escapeshellcmd($data["new"]["document_root"]."/")); |
| | | |
| | | // make temp direcory writable for the apache user and the website user |
| | | exec("chmod 777 ".escapeshellcmd($data["new"]["document_root"]."/tmp")); |
| | | $this->_exec("chmod 777 ".escapeshellcmd($data["new"]["document_root"]."/tmp")); |
| | | } |
| | | |
| | | |
| | |
| | | $fcgi_tpl->setVar('php_fcgi_children',$fastcgi_config["fastcgi_children"]); |
| | | $fcgi_tpl->setVar('php_fcgi_max_requests',$fastcgi_config["fastcgi_max_requests"]); |
| | | $fcgi_tpl->setVar('php_fcgi_bin',$fastcgi_config["fastcgi_bin"]); |
| | | $fcgi_tpl->setVar('security_level',$web_config["security_level"]); |
| | | |
| | | $fcgi_starter_script = escapeshellcmd($fastcgi_starter_path.$fastcgi_config["fastcgi_starter_script"]); |
| | | file_put_contents($fcgi_starter_script,$fcgi_tpl->grab()); |
| | |
| | | // This will NOT work! |
| | | //$cgi_tpl->setVar('open_basedir', "/var/www/" . $data["new"]["domain"]); |
| | | $cgi_tpl->setVar('php_cgi_bin',$cgi_config["cgi_bin"]); |
| | | $cgi_tpl->setVar('security_level',$web_config["security_level"]); |
| | | |
| | | $cgi_starter_script = escapeshellcmd($cgi_starter_path.$cgi_config["cgi_starter_script"]); |
| | | file_put_contents($cgi_starter_script,$cgi_tpl->grab()); |
| | |
| | | } |
| | | |
| | | //* Create .htaccess and .htpasswd file for website statistics |
| | | if(!is_file($data["new"]["document_root"].'/web/stats/.htaccess')) { |
| | | if(!is_file($data["new"]["document_root"].'/web/stats/.htaccess') or $data["old"]["document_root"] != $data["new"]["document_root"]) { |
| | | if(!is_dir($data["new"]["document_root"].'/web/stats')) mkdir($data["new"]["document_root"].'/web/stats'); |
| | | $ht_file = "AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$data["new"]["document_root"]."/.htpasswd_stats\n<limit GET PUT POST>\nrequire valid-user\n</limit>"; |
| | | file_put_contents($data["new"]["document_root"].'/web/stats/.htaccess',$ht_file); |
| | |
| | | $app->uses("getconf"); |
| | | $web_config = $app->getconf->get_server_config($conf["server_id"], 'web'); |
| | | |
| | | //* Check if this is a chrooted setup |
| | | if($web_config['website_basedir'] != '' && @is_file($web_config['/var/www'].'/etc/passwd')) { |
| | | $apache_chrooted = true; |
| | | } else { |
| | | $apache_chrooted = false; |
| | | } |
| | | |
| | | if($data["old"]["type"] != "vhost" && $data["old"]["parent_domain_id"] > 0) { |
| | | //* This is a alias domain or subdomain, so we have to update the website instead |
| | |
| | | $command = 'userdel'; |
| | | $command .= ' '.$data["old"]["system_user"]; |
| | | exec($command); |
| | | if($apache_chrooted) exec("chroot ".escapeshellcmd($web_config['website_basedir'])." ".$command); |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | } |
| | | |
| | | //* Wrapper for exec function for easier debugging |
| | | private function _exec($command) { |
| | | global $app; |
| | | $app->log("exec: ".$command,LOGLEVEL_DEBUG); |
| | | exec($command); |
| | | } |
| | | |
| | | |
| | | } // end class |
| | | |