Ssh

SELinux保護影子時判斷Linux賬戶是否被鎖定

  • May 12, 2020

我正在嘗試執行一個腳本來獲取 Linux 系統上每個鎖定帳戶的使用者名。該伺服器是帶有 SELinux 的 Gentoo Hardened 伺服器。我嘗試編寫一些 Python,它在 /shadow/passwd 中查找強制性的“!” 而不是密碼雜湊。

我本來打算用這個…

def get_users_blacklist(users):
   f = open('shadow.example', 'r')         #f is for file

   blacklist = []                          #obvious
   for l in f:                             #l is for line
       s = l.split(':')                    #s is for shadower
       for u in users:                     #u is for user
           if (u == s[0]):
               if (s[1] == "!"):
                   blacklist.append(u)

   return blacklist

它需要一個使用者列表來檢查陰影中的密碼欄位是否為“!” (帳戶已禁用)然後它將它們添加到列表中。

但是,在我的伺服器上,由於 SELinux,腳本無法讀取/etc/shadow,並且使用它時出現“權限被拒絕”錯誤。我需要一些其他方法來確定有關使用者的這些資訊。Google混合了許多結果來鎖定使用者帳戶,我找不到檢查帳戶是否被鎖定的命令。

semodule我嘗試使用“audit2allow”來允許 sysadm_r Python 腳本讀取 /etc/shadow,但在插入規則時出現“neverallow”錯誤。這實際上是相當困難和相當冒險的。

我要做的是users自動禁止 sshd_config 組中的所有無密碼帳戶。使用“passwd -l user”停用帳戶的使用者仍然可以使用 SSH pubkey auth 登錄。我想把它應用到很多使用者的伺服器上,所以我寫了一個腳本。

腳本:https ://pastebin.com/Z5T7GS4J

我認為應該有一些涉及 filecaps 的實用程序可以告訴我使用者密碼是否已被鎖定/從系統中刪除。我在Google上找不到它。對於我的解決方案,將 SELinux 置於許可模式不是一種選擇,因為自動化和缺乏集群。

有點像黑客,但它可能對你有用……

#!/bin/bash
unset VISUAL
export EDITOR=cat
vipw -s >mybackupshadow.out

然後針對 mybackupshadow.out 執行您的腳本,完成後將其刪除,當然。

這假定您具有 root 訪問權限。我沒有在 SELinux 上嘗試過,因為我們不使用它,所以不確定 SELinux 對 vipw 有什麼影響。

您可以在 python 中使用這一行程式碼:

>>> blacklist = [ x.split(":")[0] for x in open("/tmp/shadow", "r") if x.split(":")[1] == '!']
>>> print blacklist
['lxd', 'monitoring-agent']
>>> 

引用自:https://serverfault.com/questions/1016329