以没有密码的特定用户身份运行sudo

时间:2015-06-09 12:14:57

标签: bash unix sudo

我在脚本中使用了以下命令

sudo su - user -c bash <<EOF
cp /home/test.txt /opt/

EOF

如果我在终端上使用sudo su - user,Unix不会问我密码,但是如果我尝试运行脚本,终端会问我密码,如果我删除了EOF部分,其余的代码运行时我退出了会议。 我想在用户模式sudo中运行该命令,但终端不需要问我密码。

如果我使用

sudo su - user <<EOF

code

EOF

我在.bash_profile中出错:参数太多

3 个答案:

答案 0 :(得分:1)

  

我想在用户模式sudo中运行命令,但终端不要   需要问密码。

您遇到的情况是由sudo的用户缓存凭据引起的,这允许sudo维护会话,而任何进一步的sudo命令都不会提示输入密码。

检查一下:

打开一个新终端并运行sudo whatever,然后关闭它并打开另一个新终端并运行sudo whatever,您会看到sudo每次都要求输入密码......

  

如果您仍然需要这样做,那么您有以下选择:

阻止sudo永久性地要求输入密码

运行sudo visudo并查找行root ALL=(ALL) ALL,然后添加一行

username ALL=(ALL) NOPASSWD: ALL 

然后保存并退出。

注意:这是一个安全风险

或阻止sudo仅针对特定脚本永久性地要求输入密码

运行sudo visudo并查找行root ALL=(ALL) ALL,然后添加一行

username ALL=NOPASSWD: path_to_the_script

然后保存并退出

在脚本中提供密码,方法是运行sudo命令:

sudo -S <<< "password" command

注意:这也是一种安全风险。

答案 1 :(得分:0)

我猜你需要以不同的用户身份执行命令。这可能是您的答案:Run a shell script as another user that has no password

sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"' 

这是该链接的引用。可能以下情况对你更好:

sudo -H -u otheruser bash <<EOF
cp /home/test.txt /opt/
EOF

更新:您可能希望创建一个特定的sudo规则来运行没有密码的特定命令(在/ etc / sudoers文件中 - 使用visudo来编辑它 - ):

otheruser ALL=NOPASSWD: /full/path/to/your_command.sh

(当然你需要root权限来编辑sudoers,我希望你能做到)。 并创建包含您的逻辑的名为your_command.sh的脚本。然后,您将被允许在没有密码的情况下运行它:

sudo -H -u otheruser your_command.sh

我知道,它不是&#34;单行命令&#34;但它是安全的,因为它只允许一个没有密码的特定命令。当然,它并不需要密码!

答案 2 :(得分:-3)

然后不要使用sudo,那么它不会要求输入密码,但你将以root身份登录!