最近一臺服務器被***了,***者在服務器上替換了一個系統命令,如ps,ss,netstat,lsof等文件。怎麼排查的就不說了。本文的主要目的是寫一個檢查系統用戶的一個腳本,檢查哪些系統用戶有家目錄,哪些用戶沒有家目錄,以及哪些用戶可以登錄系統。
我們這裏的環境有點亂,有的服務器上的web用戶可以登錄系統,有的系統上卻不能登錄系統,很是不規範,因此寫了這麼一個腳本來做檢查。接下來,就直接上代碼了,主要用到了pwd及spwd模塊,比起使用讀入/etc/passwd及/etc/shadow文件,然後對其進行處理要方便的多。
# 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
執行結果爲:
# 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用戶可以登錄系統。