我在我的 Linux 工作站上使用 sudo,并且它配置为每次都要求输入密码。
但是每次都输入密码很麻烦,如果我没有将焦点放在正确的窗口上,也会有点危险。
我想配置 sudo 具有以下行为:
- 如果无头(无 X11),则请求完整密码
- 如果 X11 可以提示确认,则确认应该是一个带有允许和拒绝按钮以及一些简单输入的 GUI 窗口(例如,键入 yes 进行确认,以防止意外按下 Enter 键)
答案1
从技术上讲,这是可行的sudo -A
。来自man 8 sudo
:
-A
通常,如果sudo
需要密码,它会从用户终端读取密码。如果-A
指定了 (askpass) 选项,则会执行(可能是图形化的)辅助程序来读取用户密码并将密码输出到标准输出。如果SUDO_ASKPASS
设置了环境变量,它会指定辅助程序的路径。[…]
您的解决方案可能如下所示:
编写一个辅助脚本。该脚本应检查 X11 是否可用。
- 如果是,脚本应该会显示您想要的窗口。如果您允许,脚本将从文件中读取您的密码并打印到标准输出(
cat file
可能就足够了)。 - 如果 X11 不可用,脚本应该使用 stdin(例如
read -rs
在 Bash 中)从您那里获取密码;然后将其打印到标准输出。
您现在要关心的是保护文件(以便其他人无法读取它)和脚本(以便其他人无法更改它)。
- 如果是,脚本应该会显示您想要的窗口。如果您允许,脚本将从文件中读取您的密码并打印到标准输出(
设置
SUDO_ASKPASS="/path/to/your/helper/script"
并导出。- 定义别名
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