From e01f81c8cd2ca4f0cd489f0931491a0c2fc3bae0 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Mon, 07 Nov 2011 05:50:54 -0500
Subject: [PATCH] Removed 2 items from todo which have been implemented.
---
server/plugins-available/shelluser_base_plugin.inc.php | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 106 insertions(+), 11 deletions(-)
diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php
index d279678..946aaaa 100755
--- a/server/plugins-available/shelluser_base_plugin.inc.php
+++ b/server/plugins-available/shelluser_base_plugin.inc.php
@@ -88,11 +88,18 @@
exec($command);
$app->log("Executed command: ".$command,LOGLEVEL_DEBUG);
$app->log("Added shelluser: ".$data['new']['username'],LOGLEVEL_DEBUG);
+
+ // call the ssh-rsa update function
+ $app->uses("getconf");
+ $this->data = $data;
+ $this->app = $app;
+ $this->_setup_ssh_rsa();
//* 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');
+ touch(escapeshellcmd($data['new']['dir']).'/.bash_history');
+ chmod(escapeshellcmd($data['new']['dir']).'/.bash_history', 0755);
+ chown(escapeshellcmd($data['new']['dir']).'/.bash_history', escapeshellcmd($data['new']['username']));
+ chgrp(escapeshellcmd($data['new']['dir']).'/.bash_history', escapeshellcmd($data['new']['pgroup']));
//* Disable shell user temporarily if we use jailkit
if($data['new']['chroot'] == 'jailkit') {
@@ -105,7 +112,7 @@
$app->log("UID = $uid for shelluser:".$data['new']['username']." not allowed.",LOGLEVEL_ERROR);
}
} else {
- $app->log("Skippung insert of user:".$data['new']['username'].", parent user ".$data['new']['puser']." does not exist.",LOGLEVEL_WARN);
+ $app->log("Skipping insertion of user:".$data['new']['username'].", parent user ".$data['new']['puser']." does not exist.",LOGLEVEL_WARN);
}
}
@@ -133,13 +140,19 @@
exec($command);
$app->log("Executed command: $command ",LOGLEVEL_DEBUG);
$app->log("Updated shelluser: ".$data['old']['username'],LOGLEVEL_DEBUG);
-
+
+ // call the ssh-rsa update function
+ $app->uses("getconf");
+ $this->data = $data;
+ $this->app = $app;
+ $this->_setup_ssh_rsa();
//* 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');
+ touch(escapeshellcmd($data['new']['dir']).'/.bash_history');
+ chmod(escapeshellcmd($data['new']['dir']).'/.bash_history', 0755);
+ chown(escapeshellcmd($data['new']['dir']).'/.bash_history',escapeshellcmd($data['new']['username']));
+ chgrp(escapeshellcmd($data['new']['dir']).'/.bash_history',escapeshellcmd($data['new']['pgroup']));
}
} else {
@@ -150,7 +163,7 @@
$app->log("UID = $uid for shelluser:".$data['new']['username']." not allowed.",LOGLEVEL_ERROR);
}
} else {
- $app->log("Skippung update for user:".$data['new']['username'].", parent user ".$data['new']['puser']." does not exist.",LOGLEVEL_WARN);
+ $app->log("Skipping update for user:".$data['new']['username'].", parent user ".$data['new']['puser']." does not exist.",LOGLEVEL_WARN);
}
}
@@ -181,9 +194,91 @@
}
-
+ private function _setup_ssh_rsa() {
+ global $app;
+ $this->app->log("ssh-rsa setup shelluser_base",LOGLEVEL_DEBUG);
+ // Get the client ID, username, and the key
+ $domain_data = $this->app->db->queryOneRecord('SELECT sys_groupid FROM web_domain WHERE web_domain.domain_id = '.intval($this->data['new']['parent_domain_id']));
+ $sys_group_data = $this->app->db->queryOneRecord('SELECT * FROM sys_group WHERE sys_group.groupid = '.intval($domain_data['sys_groupid']));
+ $id = intval($sys_group_data['client_id']);
+ $username= $sys_group_data['name'];
+ $client_data = $this->app->db->queryOneRecord('SELECT * FROM client WHERE client.client_id = '.$id);
+ $userkey = $client_data['ssh_rsa'];
+ unset($domain_data);
+ unset($client_data);
+
+ // ssh-rsa authentication variables
+ $sshrsa = $this->data['new']['ssh_rsa'];
+ $usrdir = escapeshellcmd($this->data['new']['dir']);
+ $sshdir = $usrdir.'/.ssh';
+ $sshkeys= $usrdir.'/.ssh/authorized_keys';
+
+ $app->uses('file');
+ $sshrsa = $app->file->unix_nl($sshrsa);
+ $sshrsa = $app->file->remove_blank_lines($sshrsa,0);
+
+ // If this user has no key yet, generate a pair
+ if ($userkey == '' && $id > 0){
+ //Generate ssh-rsa-keys
+ exec('ssh-keygen -t rsa -C '.$username.'-rsa-key-'.time().' -f /tmp/id_rsa -N ""');
+
+ // use the public key that has been generated
+ $userkey = file_get_contents('/tmp/id_rsa.pub');
+
+ // save keypair in client table
+ $this->app->db->query("UPDATE client SET created_at = ".time().", id_rsa = '".file_get_contents('/tmp/id_rsa')."', ssh_rsa = '".$userkey."' WHERE client_id = ".$id);
+
+ exec('rm -f /tmp/id_rsa /tmp/id_rsa.pub');
+ $this->app->log("ssh-rsa keypair generated for ".$username,LOGLEVEL_DEBUG);
+ };
+
+ if (!file_exists($sshkeys)){
+ // add root's key
+ $app->file->mkdirs($sshdir, '0755');
+ file_put_contents($sshkeys, file_get_contents('/root/.ssh/authorized_keys'));
+
+ // Remove duplicate keys
+ $existing_keys = file($sshkeys);
+ $new_keys = explode("\n", $userkey);
+ $final_keys_arr = array_merge($existing_keys, $new_keys);
+ $new_final_keys_arr = array();
+ if(is_array($final_keys_arr) && !empty($final_keys_arr)){
+ foreach($final_keys_arr as $key => $val){
+ $new_final_keys_arr[$key] = trim($val);
+ }
+ }
+ $final_keys = implode("\n", array_flip(array_flip($new_final_keys_arr)));
+
+ // add the user's key
+ file_put_contents($sshkeys, $final_keys);
+ $app->file->remove_blank_lines($sshkeys);
+ $this->app->log("ssh-rsa authorisation keyfile created in ".$sshkeys,LOGLEVEL_DEBUG);
+ }
+ if ($sshrsa != ''){
+ // Remove duplicate keys
+ $existing_keys = file($sshkeys);
+ $new_keys = explode("\n", $sshrsa);
+ $final_keys_arr = array_merge($existing_keys, $new_keys);
+ $new_final_keys_arr = array();
+ if(is_array($final_keys_arr) && !empty($final_keys_arr)){
+ foreach($final_keys_arr as $key => $val){
+ $new_final_keys_arr[$key] = trim($val);
+ }
+ }
+ $final_keys = implode("\n", array_flip(array_flip($new_final_keys_arr)));
+
+ // add the custom key
+ file_put_contents($sshkeys, $final_keys);
+ $app->file->remove_blank_lines($sshkeys);
+ $this->app->log("ssh-rsa key updated in ".$sshkeys,LOGLEVEL_DEBUG);
+ }
+ // set proper file permissions
+ exec("chown -R ".escapeshellcmd($this->data['new']['puser']).":".escapeshellcmd($this->data['new']['pgroup'])." ".$usrdir);
+ exec("chmod 600 '$sshkeys'");
+
+ }
} // end class
-?>
\ No newline at end of file
+?>
--
Gitblit v1.9.1