确定在/ etc / sudoer用户权限最快的方法(Fastest Way to Determin

2019-09-19 02:20发布

用户将可以远程访问*** nix中基于通过SSH机,我需要确定是否他们正在使用的用户名在在/ etc / sudoers文件NOPASSWD访问的最快方式。

可能的选项:

  • grep的用于在用户名的/ etc / sudoers中,解析如果不是,命令提示输出,以确定它是否有NOPASSWD,删除行再附加新的权限
  • 您只需将一个权限字符串的文件,而不管(坏主意)。
  • 尝试须藤到受保护的文件,看看它提示我输入密码。

我希望的东西更容易,但我的谷歌福没有拿出任何答案。

Answer 1:

如果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会尽量要求输入密码交互即使标准输入/输出/标准错误都被重定向。 如果你没有控制终端,这是没有必要的,但你可能会需要比其他一些su来修改用户权限,如叉 + setreuid 。



Answer 2:

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

这就提出了另一个问题 - 并发问题。 一般来说,许多过程读取和写入到同一个重要的文件是一个灾难的配方。

建立一个小的独立进程来处理任务。 它应该有一个最小的接口将接收来自客户端的请求,并且更新/etc/sudoer文件。 喜欢的东西has_NOPASSWD_access()set_NOPASSWD_access() 它应该阅读的文件需要被写入只有当它,所以你会大大减少服务请求所需的I / O时间。

优点 -

  • 快捷:无需I / O需要的只是读取文件,因为它是从最初读取存储在缓冲区
  • 线程安全:只有一个服务器的写入和读取sudoer文件
  • 单选择原则 -只有这个过程处置sudoer文件
  • 优雅的(我希望):-)

缺点 - - 列出他们的意见,我会补充。



文章来源: Fastest Way to Determine User Permissions in /etc/sudoer