问题描述
我知道我可以通过su
命令成为root(超级用户),但我必须在输入命令后对其进行授权。有没有办法让我成为root并在一行中授权(使用密码)
最佳解决办法
嗯,我唯一能想到的是
echo 'password' | sudo -S command
-S
标志使sudo
从标准输入读取密码。如man sudo
中所述:
-S, –stdin
Write the prompt to the standard error and read the password from the standard input instead of using the terminal device. The password must be followed by a newline character.
那么,要使用sudo
权限运行ls
,你会这样做
echo 'password' | sudo -S ls
请注意,如果您的sudo
访问令牌处于活动状态,如果您不需要输入密码,则会产生错误,因为您最近已经这样做了。要解决此问题,您可以使用-k
重置访问令牌:
echo 'password' | sudo -kS ls
我不知道有什么办法让你进入一个真正的root shell(如su
或sudo -i
)。这可能足以满足您的需求。
次佳解决办法
在终端运行visudo
命令来编辑sudoers文件:
sudo visudo
并将以下行添加到sudoers列表中
username ALL = NOPASSWD : ALL
注意:将用户名替换为上一行中的真实用户名。
第三种解决办法
echo 'password' | sudo -kS ls
解决方案有效,但它有一些安全方面的缺点,其中大部分已在terdon的回答评论中提到过。因此,我想提出一个不同的方法:
如果它只是您经常需要执行的一个命令,例如apt-get upgrade
,您可以配置您的系统,使sudo someCommand
不需要密码。
为此,请运行visudo
并输入类似于以下内容的内容:
myusername ALL=(ALL) NOPASSWD: /usr/bin/apt-get upgrade
请注意,如果输入不带参数的命令(例如,在此示例中没有upgrade
),则允许用户使用任何参数运行它,因此请小心使用。
第四种办法
你也可以这样做:
sudo -S <<< "password" command
第五种办法
您可以增加超时,而不是完全删除密码,因此您只需每天输入几次;在终端中,运行:
sudo visudo
在文件末尾,添加以下行以设置超时30分钟(用您的用户名替换jsmith
)。
Defaults:jsmith timestamp_timeout=30
你可以使用你想要的任何数字; -1
表示没有超时(仅在第一次提示时),而0
表示即时超时(每次sudo
时都会提示)。默认超时为5分钟。