Sudo 确认提示

Sudo 确认提示

我在我的 Linux 工作站上使用 sudo,并且它配置为每次都要求输入密码。

但是每次都输入密码很麻烦,如果我没有将焦点放在正确的窗口上,也会有点危险。

我想配置 sudo 具有以下行为:

  • 如果无头(无 X11),则请求完整密码
  • 如果 X11 可以提示确认,则确认应该是一个带有允许和拒绝按钮以及一些简单输入的 GUI 窗口(例如,键入 yes 进行确认,以防止意外按下 Enter 键)

答案1

从技术上讲,这是可行的sudo -A。来自man 8 sudo

-A
通常,如果sudo需要密码,它会从用户终端读取密码。如果-A指定了 (askpass) 选项,则会执行(可能是图形化的)辅助程序来读取用户密码并将密码输出到标准输出。如果SUDO_ASKPASS设置了环境变量,它会指定辅助程序的路径。[…]

您的解决方案可能如下所示:

  1. 编写一个辅助脚本。该脚本应检查 X11 是否可用。

    • 如果是,脚本应该会显示您想要的窗口。如果您允许,脚本将从文件中读取您的密码并打印到标准输出(cat file可能就足够了)。
    • 如果 X11 不可用,脚本应该使用 stdin(例如read -rs在 Bash 中)从您那里获取密码;然后将其打印到标准输出。

    您现在要关心的是保护文件(以便其他人无法读取它)和脚本(以便其他人无法更改它)。

  2. 设置SUDO_ASKPASS="/path/to/your/helper/script"并导出。

  3. 定义别名alias sudo='sudo -A'

请注意,答案只是说这在技术上是可行的。它并没有说这是安全的或值得推荐的。

答案2

这通常更危险,因为这使得本地特权升级非常容易。也许您可以通过编译 polkit 并设置适合您需求的超时时间来实现接近预期的结果?https://unix.stackexchange.com/questions/409636/pkexec-how-do-i-set-a-custom-timeout-for-auth-admin-keep-when-writting-a-pkexe

相关内容