我运行一个服务器,供一群人使用,用于电子邮件、邮件列表、个人网站等。
我考虑了为其他成员提供 root 访问权限的方法,以允许他们处理服务器上的问题。但我不喜欢给每个人完全的 root 权限。
怎么样的想法二用户必须输入密码sudo
才能打开 root shell?这将防止单个用户劫持整个服务器。为了提高安全性,可以使用 1 个以上任意数量的所需用户密码。正如我现在所看到的,这可能是在一群彼此非常了解并且住在附近的人中提供 root 访问权限的好方法。
- 你知道这样的程序吗?
- 您对这个概念总体有何看法?
答案1
某些安全策略要求对某些操作进行双重批准;例如:
你会注意到这不是关于验证(例如输入密码以表明您是您假装的人),但大约授权,即决定是否允许某个动作。
对于背景阅读,我推荐安全工程罗斯·安德森。如果可以的话请购买最新版本,否则第一版可在线获取。最相关的章节是“访问控制”;关于银行业和核指挥的章节中有一些例子。
Unix 提供了一个简单的安全模型,只有两个级别:用户和超级用户。这既是优点(简单意味着系统本身和安全策略的设计和实现中出错的空间较小),也是缺点(复杂的安全策略无法本地表达)。如果您担心恶意用户获得 root 权限,请不要授予他 root 权限。对 root 所做的事情很少进行检查;唯一的限制是获得 root 的操作可以远程记录,某些外部操作(网络流量)也可以。恶意用户可能会假装想要获得 root 权限来执行某项操作,但实际上却执行另一项操作,同时向其他用户隐藏其操作。因此,要求其他用户审查 root 访问权限不会获得太多安全性。相反,如果减少了安全性,您就会失去安全性可用性root 访问权限(我猜你想为不太受信任的用户提供 root 访问权限,以便在出现问题时作为备份;双重批准会增加很多负担)。
双重批准对于特定操作很有用:Alice 说“请授权我做 X”,Bob 说“我授权 Alice 做 X”,系统执行 X(X 可以是例如将 1,000,000,000 美元从一个银行账户转移到另一个银行账户,或者轰炸莫斯科,或拒绝编辑)。如果爱丽丝说“请授权我做任何我想做的事”并且鲍勃同意,那么鲍勃所做的一切都是在呼应你(政策制定者)已经说过的,即爱丽丝可以被授权做任何事情。你不妨让 Alice 成为 sudoer。
我不知道 Unix 上有任何现有系统可以让多个用户在类似 sudo 的框架中批准特定命令。
答案2
这可能就是您正在寻找的:
https://github.com/square/sudo_pair
sudo_pair 是 sudo 的插件,需要另一个人批准和监视特权 sudo 会话。
答案3
/etc/passwd
我能想到做这样的事情的唯一方法是在( 和)中创建一个/etc/shadow
uid 为 0 (用于完全访问)的帐户,或者属于提供正确访问权限的组。
然后,设置密码,告诉第一个人前五个字符,告诉第二个人后五个字符。由于密码不再有八个字符的限制(像以前一样),因此您可以为任意数量的人执行此操作(例如,为五个人每人分配四个字符的 20 个字符)。
当然,一旦进入帐户,他们就可以将密码重置为任何人都可以使用的密码(在 uid = 0 的情况下)。因此,如果您确实存在这样的信任问题,那么您面临的问题比这更大。
答案4
您可以有一个进程以 root 身份在后台运行,检查两个用户都必须满足的某些条件,然后复制到 /etc/sudoers 并在几分钟后再次将其删除。例如,两个用户可能都必须在其主目录中触摸以今天的日期作为文件名的文件。后台进程可能会删除该文件或在使用该文件一次后忽略它。
我还认为 PAM 支持外来类型的身份验证(例如指纹和卡),因此 PAM 可能值得研究。