用户将通过SSH远程访问基于*** nix的计算机,我需要确定最快的方式,以检查他们当前使用的用户名是否在/ etc / sudoers中具有NOPASSWD访问权限文件。
可能的选择:
我希望能有更轻松的事情,但我的google-fu还没有提出任何答案。
答案 0 :(得分:4)
如果sudo -v
成功,则授权用户使用sudo
;如果失败,则用户尚未被授权使用sudo
。
# su user -c 'setsid sudo -v </dev/null'; echo $? [sudo] password for user: 1 # su root -c 'setsid sudo -v </dev/null'; echo $? 0
如果没有setsid,sudo
将尝试以交互方式请求密码,即使stdin / stdout / stderr已被重定向。如果您没有控制终端,则不需要这样做,但您可能需要su
之外的其他内容来更改用户权限,例如fork + setreuid。
答案 1 :(得分:1)
如果你确实需要“最快的方式”,我猜你正在构建一个可以处理许多并发请求的网络服务器。
这引发了另一个问题 - 并发问题。通常,许多过程读取和写入同一个重要文件是一个灾难的处方。
构建一个小型独立进程来处理任务。它应该有一个最小的接口,它将接收来自客户端的请求,以及/etc/sudoer
文件的更新。像has_NOPASSWD_access()
和set_NOPASSWD_access()
之类的东西。它应该只在需要写入时才读取文件,因此您将大大减少提供请求所需的I / O时间。
优点 -
缺点 - - 在评论中列出它们,我会添加。