在/ etc / sudoer中确定用户权限的最快方法

时间:2009-07-15 19:14:05

标签: linux permissions ssh sudoers

用户将通过SSH远程访问基于*** nix的计算机,我需要确定最快的方式,以检查他们当前使用的用户名是否在/ etc / sudoers中具有NOPASSWD访问权限文件。

可能的选择:

  • grep for / etc / sudoers中的用户名,解析命令提示符输出以确定它是否有NOPASSWD,如果没有,则删除该行然后追加新权限
  • 只需将权限字符串附加到文件中(不明白)。
  • 尝试sudo进入受保护的文件,看看它是否提示我输入密码。

我希望能有更轻松的事情,但我的google-fu还没有提出任何答案。

2 个答案:

答案 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

如果没有setsidsudo将尝试以交互方式请求密码,即使stdin / stdout / stderr已被重定向。如果您没有控制终端,则不需要这样做,但您可能需要su之外的其他内容来更改用户权限,例如fork + setreuid

答案 1 :(得分:1)

如果你确实需要“最快的方式”,我猜你正在构建一个可以处理许多并发请求的网络服务器。

这引发了另一个问题 - 并发问题。通常,许多过程读取和写入同一个重要文件是一个灾难的处方。

构建一个小型独立进程来处理任务。它应该有一个最小的接口,它将接收来自客户端的请求,以及/etc/sudoer文件的更新。像has_NOPASSWD_access()set_NOPASSWD_access()之类的东西。它应该只在需要写入时才读取文件,因此您将大大减少提供请求所需的I / O时间。

优点 -

  • 快速:只读取文件所需的I / O,因为它自初始读取后存储在缓冲区中
  • 线程安全:只有一台服务器写入和读取sudoer文件
  • Single choice principle - 只有此进程处理sudoer文件
  • 优雅(我希望): - )

缺点 -   - 在评论中列出它们,我会添加。