确定 SELinux 保护影子时 Linux 帐户是否被锁定

确定 SELinux 保护影子时 Linux 帐户是否被锁定

我正在尝试运行一个脚本,该脚本获取 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']
>>> 

相关内容