不使用sudo密码执行Shell脚本

不使用sudo密码执行Shell脚本,shell,sudo,Shell,Sudo,我有一个shell脚本,如下所示 #!/bin/bash sudo -u testuser -H sh -c " mkdir /usr/local/testdir; if [ $? -eq 0 ];then echo "Successfull"; else echo "Unsuccessfull"; fi " 我已授予用户testuser使用sudo执行shell脚本的权限,但不询问密码 我可以用sudo运行命令,但不需要询问密码。但是上面的shell脚本总是给出put-ass

我有一个shell脚本,如下所示

#!/bin/bash
sudo -u testuser -H sh -c "
mkdir /usr/local/testdir;
if [ $? -eq 0 ];then
    echo "Successfull";
else
    echo "Unsuccessfull";
fi
"
我已授予用户testuser使用sudo执行shell脚本的权限,但不询问密码

我可以用sudo运行命令,但不需要询问密码。但是上面的shell脚本总是给出put-ass如下所示

mkdir: cannot create directory `/usr/local/testdir': Permission denied
Successfull
并且它没有在/usr/local内创建目录testdir。请告诉我需要做什么修改才能使这个脚本工作良好

谢谢。

有两个问题:

一,。你说过:

sudo -u testuser -H ...
这意味着:以testuser的身份运行命令,他没有写入/usr/local的权限,因此您的权限被拒绝

删除-u testuser时,该命令将以root用户身份运行,默认情况下不使用testuser的密码,并将创建目录

看起来,您只是误解了sudo和/etc/sudoers的工作原理。u用户平均数

-u user的-u user选项使sudo以用户身份运行指定的命令 除了根。要指定uid而不是用户名,请使用uid。 当以uid形式运行命令时,许多shell要求使用 反斜杠“\”。安全策略可能会限制UID 密码数据库中列出的密码。sudoers政策允许 不在密码数据库中的UID,只要targetpw 未设置选项。其他安全策略可能不支持此操作

二,。第二个问题是成功消息

你对sh-c使用了双引号。变量扩展是在sh-c启动之前完成的。因此,使用单引号,将获得正确的未成功消息:

并使用下一个解决方案:

sudo -H sh -c '
mkdir /usr/local/testdir
if [ $? -eq 0 ];then
    echo "Successfull";
else
    echo "Unsuccessfull";
fi
'
两个问题:

一,。你说过:

sudo -u testuser -H ...
这意味着:以testuser的身份运行命令,他没有写入/usr/local的权限,因此您的权限被拒绝

删除-u testuser时,该命令将以root用户身份运行,默认情况下不使用testuser的密码,并将创建目录

看起来,您只是误解了sudo和/etc/sudoers的工作原理。u用户平均数

-u user的-u user选项使sudo以用户身份运行指定的命令 除了根。要指定uid而不是用户名,请使用uid。 当以uid形式运行命令时,许多shell要求使用 反斜杠“\”。安全策略可能会限制UID 密码数据库中列出的密码。sudoers政策允许 不在密码数据库中的UID,只要targetpw 未设置选项。其他安全策略可能不支持此操作

二,。第二个问题是成功消息

你对sh-c使用了双引号。变量扩展是在sh-c启动之前完成的。因此,使用单引号,将获得正确的未成功消息:

并使用下一个解决方案:

sudo -H sh -c '
mkdir /usr/local/testdir
if [ $? -eq 0 ];then
    echo "Successfull";
else
    echo "Unsuccessfull";
fi
'

好的,据我所知,这与sudo无关。只是用户没有创建目录的权利。您熟悉unix文件权限吗?但是,我可以使用sudo mkdir/usr/local/testdir命令在该位置创建目录,而无需提示密码!请注意,您应该将NOPASSWD sudo访问权限限制为仅对单个脚本的访问,否则任何访问该用户帐户的人基本上都会成为root用户……这个问题说明了sudo make-me-a-sandwich与sudo-u honey make-me-a-sandwich之间的区别;前者永远会成功;后者可能是,也可能不是。好吧,就我所知,这与sudo无关。只是用户没有创建目录的权利。您熟悉unix文件权限吗?但是,我可以使用sudo mkdir/usr/local/testdir命令在该位置创建目录,而无需提示密码!请注意,您应该将NOPASSWD sudo访问权限限制为仅对单个脚本的访问,否则任何访问该用户帐户的人基本上都会成为root用户……这个问题说明了sudo make-me-a-sandwich与sudo-u honey make-me-a-sandwich之间的区别;前者永远会成功;后者可能会也可能不会。非常感谢。这对我有用。我是shell脚本的初学者。需要学习很多。再次感谢。非常感谢。这对我有用。我是shell脚本的初学者。需要学习很多。再次感谢。