用户将通过 SSH 远程访问基于 ***nix 的机器,我需要确定检查他们当前使用的用户名是否在 /etc/sudoers 文件中具有 NOPASSWD 访问权限的最快方法。
可能的选项:
- grep /etc/sudoers 中的用户名,解析命令提示符输出以确定它是否有 NOPASSWD,如果没有,删除该行然后附加新权限
- 只需将权限字符串附加到文件即可(坏主意)。
- 尝试 sudo 进入受保护的文件,看看它是否提示我输入密码。
我希望更容易一些,但我的 google-fu 没有提出任何答案。
用户将通过 SSH 远程访问基于 ***nix 的机器,我需要确定检查他们当前使用的用户名是否在 /etc/sudoers 文件中具有 NOPASSWD 访问权限的最快方法。
可能的选项:
我希望更容易一些,但我的 google-fu 没有提出任何答案。
如果sudo -v
成功,则用户已被授权使用sudo
;如果失败,则用户没有被授权使用sudo
.
# su user -c 'setsid sudo -v </dev/null'; 回声$? [sudo] 用户密码: 1 # su root -c 'setsid sudo -v </dev/null'; 回声$? 0
如果没有setsid,sudo
即使 stdin/stdout/stderr 已全部重定向,也会尝试以交互方式询问密码。如果您没有控制终端,则不需要,但您可能需要su
更改用户权限以外的其他内容,例如fork + setreuid。
如果您确实需要“最快的方式”,我猜您正在构建一个可以处理许多并发请求的网络服务器。
这引发了另一个问题——并发问题。通常,许多进程读取和写入同一个重要文件是灾难的根源。
建立一个小的独立进程来处理任务。它应该有一个最小的接口来接收来自客户端的请求,以及/etc/sudoer
文件的更新。has_NOPASSWD_access()
类似于和的东西set_NOPASSWD_access()
。它应该只在需要写入文件时才读取文件,因此您将大大减少处理请求所需的 I/O 时间。
优点 -
缺点 - - 在评论中列出它们,我会添加。