我知道我可以通过命令成为 root(超级用户),su
但我必须在输入命令后授权。有没有办法让我在一行中成为 root 并授权(使用密码)
答案1
在终端运行visudo
命令来编辑sudoers文件:
sudo visudo
并将以下行添加到sudoers 列表
username ALL = NOPASSWD : ALL
注意:替换用户名和你的真实用户名在上面那一行。
答案2
嗯,我唯一能想到的是
echo 'password' | sudo -S command
该-S
标志使您可以sudo
从标准输入读取密码。如以下说明man sudo
:
-S,--标准输入
将提示写入标准错误并从标准输入读取密码,而不是使用终端设备。密码后面必须跟换行符。
因此,要ls
使用sudo
特权运行,你可以这样做
echo 'password' | sudo -S ls
sudo
请注意,如果您的访问令牌处于活动状态,并且您不需要输入密码(因为您最近已经输入过密码),则会产生错误。要解决这个问题,您可以使用-k
重置访问令牌:
echo 'password' | sudo -kS ls
我不知道有什么方法可以让你进入真正的 root shell(例如su
或sudo -i
)。不过这可能足以满足您的需要。
答案3
该echo 'password' | sudo -kS ls
解决方案有效,但它有一些安全缺陷,其中大部分已在 terdon 的答案的评论中提到。因此,我想建议一种不同的方法:
如果你经常需要执行的命令只有一个,例如apt-get upgrade
,你可以配置你的系统,sudo someCommand
使其不是需要密码。
为此,运行visudo
并输入类似以下内容:
myusername ALL=(ALL) NOPASSWD: /usr/bin/apt-get upgrade
请注意,如果您输入命令没有一个参数(例如upgrade
在这个例子中没有),用户将被允许使用任何参数,所以请谨慎使用。
答案4
您不必完全删除密码,而是可以增加超时时间,以便每天只需输入几次密码;在终端中运行:
sudo visudo
在文件末尾,添加以下行以设置 30 分钟的超时时间(替换jsmith
为您的用户名)。
Defaults:jsmith timestamp_timeout=30
您可以使用任意数字;-1
表示无超时(仅在第一次时提示),0
表示立即超时(每次都提示sudo
)。默认超时为 5 分钟。