Skip to content

Commit 1ed92e1

Browse files
author
Till Brehm
committed
- Added security check script.
- Create md5 sums of all files at install and update.
1 parent 9edea99 commit 1ed92e1

File tree

6 files changed

+126
-9
lines changed

6 files changed

+126
-9
lines changed

install/install.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -679,6 +679,11 @@
679679

680680
} //* << $install_mode / 'Standard' or Genius
681681

682+
//* Create md5 filelist
683+
$md5_filename = '/usr/local/ispconfig/security/data/file_checksums_'.date('Y-m-d_h-i').'.md5';
684+
exec('find /usr/local/ispconfig -type f -print0 | xargs -0 md5sum > '.$md5_filename);
685+
chmod($md5_filename,0700);
686+
682687

683688
echo "Installation completed.\n";
684689

install/update.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,11 @@
497497
}
498498
}
499499

500+
//* Create md5 filelist
501+
$md5_filename = '/usr/local/ispconfig/security/data/file_checksums_'.date('Y-m-d_h-i').'.md5';
502+
exec('find /usr/local/ispconfig -type f -print0 | xargs -0 md5sum > '.$md5_filename);
503+
chmod($md5_filename,0700);
504+
500505
echo "Update finished.\n";
501506

502507
?>

interface/web/admin/users_edit.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ function onBeforeUpdate() {
7070
global $app, $conf;
7171

7272
if($conf['demo_mode'] == true && $_REQUEST['id'] <= 3) $app->error('This function is disabled in demo mode.');
73-
73+
7474
//* Security settings check
7575
if(isset($this->dataRecord['typ']) && $this->dataRecord['typ'][0] == 'admin') {
7676
$app->auth->check_security_permissions('admin_allow_new_admin');

security/check.php

Lines changed: 110 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,8 @@
2828
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2929
*/
3030

31-
define('SCRIPT_PATH', dirname($_SERVER["SCRIPT_FILENAME"]));
32-
require SCRIPT_PATH."/lib/config.inc.php";
33-
require SCRIPT_PATH."/lib/app.inc.php";
31+
require "/usr/local/ispconfig/server/lib/config.inc.php";
32+
require "/usr/local/ispconfig/server/lib/app.inc.php";
3433

3534
set_time_limit(0);
3635
ini_set('error_reporting', E_ALL & ~E_NOTICE);
@@ -41,6 +40,114 @@
4140

4241
// Load required base-classes
4342
$app->uses('ini_parser,file,services,getconf,system');
43+
44+
// get security config
45+
$security_config = $app->getconf->get_security_config('systemcheck');
46+
47+
$alert = '';
48+
$data_dir = '/usr/local/ispconfig/security/data';
49+
50+
51+
// Check if a new ispconfig user has been added
52+
if($security_config['warn_new_admin'] == 'yes') {
53+
$data_file = $data_dir.'/admincount';
54+
//get number of admins
55+
$tmp = $app->db->queryOneRecord("SELECT count(userid) AS number FROM sys_user WHERE typ = 'admin'");
56+
$admin_user_count_new = intval($tmp['number']);
57+
58+
if(is_file($data_file)) {
59+
$admin_user_count_old = intval(file_get_contents($data_file));
60+
if($admin_user_count_new != $admin_user_count_old) {
61+
$alert .= "The number of ISPConfig administrator users has changed. Old: $admin_user_count_old New: $admin_user_count_new \n";
62+
file_put_contents($data_file,$admin_user_count_new);
63+
}
64+
} else {
65+
// first run, so we save the current count
66+
file_put_contents($data_file,$admin_user_count_new);
67+
chmod($data_file,0700);
68+
}
69+
}
70+
71+
// Check if /etc/passwd file has been changed
72+
if($security_config['warn_passwd_change'] == 'yes') {
73+
$data_file = $data_dir.'/passwd.md5';
74+
$md5sum_new = md5_file('/etc/passwd');
75+
76+
if(is_file($data_file)) {
77+
$md5sum_old = trim(file_get_contents($data_file));
78+
if($md5sum_new != $md5sum_old) {
79+
$alert .= "The file /etc/passwd has been changed.\n";
80+
file_put_contents($data_file,$md5sum_new);
81+
}
82+
} else {
83+
file_put_contents($data_file,$md5sum_new);
84+
chmod($data_file,0700);
85+
}
86+
}
87+
88+
// Check if /etc/shadow file has been changed
89+
if($security_config['warn_shadow_change'] == 'yes') {
90+
$data_file = $data_dir.'/shadow.md5';
91+
$md5sum_new = md5_file('/etc/shadow');
92+
93+
if(is_file($data_file)) {
94+
$md5sum_old = trim(file_get_contents($data_file));
95+
if($md5sum_new != $md5sum_old) {
96+
$alert .= "The file /etc/shadow has been changed.\n";
97+
file_put_contents($data_file,$md5sum_new);
98+
}
99+
} else {
100+
file_put_contents($data_file,$md5sum_new);
101+
chmod($data_file,0700);
102+
}
103+
}
104+
105+
// Check if /etc/group file has been changed
106+
if($security_config['warn_group_change'] == 'yes') {
107+
$data_file = $data_dir.'/group.md5';
108+
$md5sum_new = md5_file('/etc/group');
109+
110+
if(is_file($data_file)) {
111+
$md5sum_old = trim(file_get_contents($data_file));
112+
if($md5sum_new != $md5sum_old) {
113+
$alert .= "The file /etc/group has been changed.\n";
114+
file_put_contents($data_file,$md5sum_new);
115+
}
116+
} else {
117+
file_put_contents($data_file,$md5sum_new);
118+
chmod($data_file,0700);
119+
}
120+
}
121+
122+
123+
if($alert != '') {
124+
$admin_email = $security_config['security_admin_email'];
125+
$admin_email_subject = $security_config['security_admin_email_subject'];
126+
mail($admin_email, $admin_email_subject, $alert);
127+
//$app->log(str_replace("\n"," -- ",$alert),1);
128+
echo str_replace("\n"," -- ",$alert)."\n";
129+
}
130+
131+
132+
133+
134+
135+
136+
137+
138+
139+
140+
141+
142+
143+
144+
145+
146+
147+
148+
149+
150+
44151

45152

46153

security/security_settings.ini

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ remote_api_allowed=yes
1818

1919
[systemcheck]
2020
security_admin_email=root@localhost
21+
security_admin_email_subject=Security alert from server
2122
warn_new_admin=yes
2223
warn_passwd_change=no
2324
warn_shadow_change=no
24-
check_groups_in_passwd=yes
25-
check_ispconfig_md5=yes
25+
warn_group_change=no

server/server.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ if [ -f /usr/local/ispconfig/server/lib/php.ini ]; then
1313
fi
1414
fi
1515

16-
cd /usr/local/ispconfig/security
17-
/usr/bin/php -q /usr/local/ispconfig/security/check.php
18-
1916
cd /usr/local/ispconfig/server
2017
/usr/bin/php -q /usr/local/ispconfig/server/server.php
18+
19+
cd /usr/local/ispconfig/security
20+
/usr/bin/php -q /usr/local/ispconfig/security/check.php

0 commit comments

Comments
 (0)