用户将可远程访问***尼克斯的机器通过SSH我需要确定 最快的 的方式来检查如果用户名,他们目前正在使用有NOPASSWD access/etc/sudoers文件。

可能的选择:

  • 查询的用户名/etc/sudoers,分析命令提出以确定它是否有NOPASSWD,如果不删除线然后追加新的权限
  • 只是添加一个允许串的文件无论(糟糕的想法)。
  • 试图sudo成一个受保护的文件,看看它提示我一个密码。

我是希望的东西更容易,但我谷歌-fu还没有拿出任何答复。

有帮助吗?

解决方案

如果 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 改变用户的权限,喜欢 叉子+setreuid.

其他提示

如果你确实需要"的 最快的 方式",我猜你就是建立一个网络服务器,将处理的许多并发请求。

这提出了另一个问题,并发问题。一般来说,许多过程中的阅读和写作同样重要的文件是一场灾难。

建立一个小型的独立的进程来处理的任务。它应该有一个最小的接口,这将会收到要求从该客户,并更新对的 /etc/sudoer 文件。喜欢的东西 has_NOPASSWD_access()set_NOPASSWD_access().它应该阅读的文件只在需要时会写,这样你会大大减少I/O时需要服务的请求。

优点-

  • 速度快:没有I/O需要只需阅读该文件,因为它是存在的缓冲器由于初始读
  • 线的安全:只有一个写入服务器和读取sudoer文件
  • 单一选择的原则 -只是这一进程处理的sudoer文件
  • 优雅(希望):-)

Cons- -列表他们的意见,我将增加。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top