From 2bbc4c7761a6d0e97cc8f22bccbea94835fcbc7d Mon Sep 17 00:00:00 2001 From: tbrehm <t.brehm@ispconfig.org> Date: Fri, 28 Aug 2009 06:55:06 -0400 Subject: [PATCH] Add the website user and group also to the passwd and group files in chroot enviroment. --- server/plugins-available/shelluser_base_plugin.inc.php | 47 ++++++++++++++++++++++++++++++++++++----------- 1 files changed, 36 insertions(+), 11 deletions(-) diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php index bf834c7..3f86b42 100755 --- a/server/plugins-available/shelluser_base_plugin.inc.php +++ b/server/plugins-available/shelluser_base_plugin.inc.php @@ -77,16 +77,29 @@ $uid = intval($app->system->getuid($data['new']['puser'])); if($uid > $this->min_uid) { $command = 'useradd'; - $command .= ' --home '.escapeshellcmd($data['new']['dir']); - $command .= ' --gid '.escapeshellcmd($data['new']['pgroup']); - $command .= ' --non-unique '; - $command .= ' --password '.escapeshellcmd($data['new']['password']); - $command .= ' --shell '.escapeshellcmd($data['new']['shell']); - $command .= ' --uid '.escapeshellcmd($uid); + $command .= ' -d '.escapeshellcmd($data['new']['dir']); + $command .= ' -g '.escapeshellcmd($data['new']['pgroup']); + $command .= ' -o '; // non unique + if($data['new']['password'] != '') $command .= ' -p '.escapeshellcmd($data['new']['password']); + $command .= ' -s '.escapeshellcmd($data['new']['shell']); + $command .= ' -u '.escapeshellcmd($uid); $command .= ' '.escapeshellcmd($data['new']['username']); exec($command); + $app->log("Executed command: ".$command,LOGLEVEL_DEBUG); $app->log("Added shelluser: ".$data['new']['username'],LOGLEVEL_DEBUG); + + //* Create .bash_history file + exec('touch '.escapeshellcmd($data['new']['dir']).'/.bash_history'); + exec('chmod 755 '.escapeshellcmd($data['new']['dir']).'/.bash_history'); + exec('chown '.escapeshellcmd($data['new']['username']).':'.escapeshellcmd($data['new']['pgroup']).' '.escapeshellcmd($data['new']['dir']).'/.bash_history'); + + //* Disable shell user temporarily if we use jailkit + if($data['new']['chroot'] == 'jailkit') { + $command = 'usermod -L '.escapeshellcmd($data['new']['username']); + exec($command); + $app->log("Disabling shelluser temporarily: ".$command,LOGLEVEL_DEBUG); + } } else { $app->log("UID = $uid for shelluser:".$data['new']['username']." not allowed.",LOGLEVEL_ERROR); @@ -118,8 +131,17 @@ $command .= ' '.escapeshellcmd($data['old']['username']); exec($command); - // $app->log("Updated shelluser: $command ",LOGLEVEL_DEBUG); + $app->log("Executed command: $command ",LOGLEVEL_DEBUG); $app->log("Updated shelluser: ".$data['old']['username'],LOGLEVEL_DEBUG); + + + //* Create .bash_history file + if(!is_file($data['new']['dir']).'/.bash_history') { + exec('touch '.escapeshellcmd($data['new']['dir']).'/.bash_history'); + exec('chmod 755 '.escapeshellcmd($data['new']['dir']).'/.bash_history'); + exec('chown '.escapeshellcmd($data['new']['username']).':'.escapeshellcmd($data['new']['pgroup']).' '.escapeshellcmd($data['new']['dir']).'/.bash_history'); + } + } else { // The user does not exist, so we insert it now $this->insert($event_name,$data); @@ -141,11 +163,14 @@ // Get the UID of the user $userid = intval($app->system->getuid($data['old']['username'])); if($userid > $this->min_uid) { - $command = 'userdel'; - $command .= ' '.escapeshellcmd($data['old']['username']); + // We delete only non jailkit users, jailkit users will be deleted by the jailkit plugin. + if ($data['old']['chroot'] != "jailkit") { + $command = 'userdel -f'; + $command .= ' '.escapeshellcmd($data['old']['username']); - exec($command); - $app->log("Deleted shelluser: ".$data['old']['username'],LOGLEVEL_DEBUG); + exec($command); + $app->log("Deleted shelluser: ".$data['old']['username'],LOGLEVEL_DEBUG); + } } else { $app->log("UID = $userid for shelluser:".$data['old']['username']." not allowed.",LOGLEVEL_ERROR); -- Gitblit v1.9.1