最近一台服务器被攻击了,攻击者在服务器上替换了一个系统命令,如ps,ss,netstat,lsof等文件。怎么排查的就不说了。本文的主要目的是写一个检查系统用户的一个脚本,检查哪些系统用户有家目录,哪些用户没有家目录,以及哪些用户可以登录系统。


我们这里的环境有点乱,有的服务器上的web用户可以登录系统,有的系统上却不能登录系统,很是不规范,因此写了这么一个脚本来做检查。接下来,就直接上代码了,主要用到了pwd及spwd模块,比起使用读入/etc/passwd及/etc/shadow文件,然后对其进行处理要方便的多。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# encoding: utf8
# written by lavenliu at 20170211
 
import  pwd
import  spwd
 
sys_users  =  {}
usr_no_passwd  =  []
usr_has_passd  =  []
 
users_entry  =  pwd.getpwall()
for  entry  in  users_entry:
     sys_users[entry.pw_name]  =  entry.pw_shell
 
for  username  in  sys_users.keys():
     pass_entry  =  spwd.getspnam(username)
     if  pass_entry.sp_pwd  = =  '!!'  or  pass_entry.sp_pwd  = =  '*' :
         usr_no_passwd.append(pass_entry.sp_nam)
     else :
         usr_has_passd.append(pass_entry.sp_nam)
 
print  "These users have home directory:"
for  user, home  in  sys_users.items():
     if  home  = =  '/sbin/nologin' :
         continue
     else :
         print  "%15s: %s"  %  (user, home)
 
print
print  "These users can login system:"
for  user  in  usr_has_passd:
     print  user


执行结果为:

1
2
3
4
5
6
7
8
9
# python chkuser.py 
These  users  have home directory:
            sync /bin/sync
        shutdown /sbin/shutdown
            halt:  /sbin/halt
            root:  /bin/bash
 
These  users  can login system:
root


从执行结果看,目前只有root用户可以登录系统。