我正在尝试运行一个脚本,该脚本获取 Linux 系统上每个锁定帐户的用户名。该服务器是带有 SELinux 的 Gentoo Hardened Server。我尝试编写一些 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 混合了许多锁定用户帐户的结果,我找不到检查帐户是否被锁定的命令。
我尝试使用“audit2allow”来允许 sysadm_r Python 脚本读取 /etc/shadow,但在semodule
插入规则时收到“neverallow”错误。这实际上相当困难,而且相当危险。
我想要做的是users
自动禁止 sshd_config 中组中所有无密码帐户。存在一个问题,即已使用“passwd -l user”停用帐户的用户仍可以使用 SSH 公钥身份验证登录。我想将此应用于许多用户的服务器,所以我写了一个脚本。
剧本:https://pastebin.com/Z5T7GS4J
我认为应该有一些涉及 filecaps 的实用程序可以告诉我用户密码是否已从系统中锁定/删除。我在 Google 上找不到它。对于我的解决方案,将 SELinux 置于宽容模式不是一个选择,因为自动化以及缺乏集群。
答案1
有点像黑客手段,但它可能对你有用……
#!/bin/bash
unset VISUAL
export EDITOR=cat
vipw -s >mybackupshadow.out
然后针对 mybackupshadow.out 运行脚本,完成后当然将其删除。
这假设您具有 root 访问权限。我还没有尝试过使用 SELinux,因为我们不使用它,所以不确定 SELinux 对 vipw 有什么影响。
答案2
你可以在 Python 中使用这一行代码:
>>> blacklist = [ x.split(":")[0] for x in open("/tmp/shadow", "r") if x.split(":")[1] == '!']
>>> print blacklist
['lxd', 'monitoring-agent']
>>>