我正在为 L0 团队添加 sudo 规则,其中他们将能够更改操作系统用户的密码。
但我不希望 L0 团队使用 sudo 更改 root 密码 如何操作
PS - !/usr/bin/passwd root - 不起作用
答案1
如果您的用户身份验证是使用经典的 /etc/shadow 密码完成的,我认为唯一的方法是:
编写您自己的passwd
类似程序,该程序仅允许更改非 root 用户的密码,并且仅允许这样做(例如通过sudo yourprogram
)。 /etc/shadow 确实不难解析或编写。
更明智的是,如果您有“团队”,您可能有某种形式的集中式登录机制(LDAP/Kerberos?),然后 LO 团队(无论“L0”是什么)passwd
根本不应该使用,而是直接与该系统可能提供更精细的访问控制。
答案2
与通常有关 的问题一样sudo
,答案是“编写一个包装脚本,只允许使用 sudo 运行该脚本”。
也就是说,编写一个脚本来检查其参数,以确保提供了用户名并且该用户名不是 root(和/或其他系统帐户)。或者也许检查与该用户名对应的 UID 是否在分配给的范围内普通用户...通常为 500+ 或 1000+,具体取决于发行版)。
如果它通过了您需要的任何验证检查,请passwd
使用适当的参数运行。如果没有,则中止并显示错误消息,并可能记录失败的尝试。
然后,配置sudo
允许用户以 root 身份运行脚本,但是不是 passwd
本身。
由于脚本是以 root 身份运行的,因此脚本中运行的所有程序(包括 passwd)也将以 root 身份运行。
而且,由于脚本以 root 身份运行,因此您需要特别小心脚本中运行的内容以及运行方式。引用您的变量,不要信任用户提供的数据(即,不要在未验证参数的情况下将参数直接传递给其他程序 - 通常最好拒绝任何未明确允许的内容,而不是接受未明确禁止的所有内容这样漏洞就会少一些)。保持脚本简短、易于理解和调试,它应该做最少的必要工作来验证其输入并完成工作。