试试这个:
echo "$pass" | sudo -S -u $user script
$pass
是您的密码,$user
是想要运行脚本的用户。(该用户必须有运行脚本的权限。)
如果您的 user
没有权限,则尝试以组身份运行:
echo "$pass" | sudo -S -g $group script
这个组必须有运行脚本的权限。
注意:像这样传递密码并不是一个好主意。
如果您的用户不能使用sudo:
如果您的用户不能使用sudo,则无法通过使用sudo切换用户来运行脚本。您应该考虑使用此非sudo用户帐户执行脚本。为此,此用户必须具有执行脚本的权限。
其中一种方法是更改脚本的权限为755
(从sudo用户):
然后,您可以通过在终端中输入路径来执行脚本。(如果您的脚本依赖于相对路径,请确保在运行之前cd
到脚本的父目录)
注意:这将允许任何用户执行脚本(无需进行任何身份验证)
另一种方法是将非sudo用户添加到具有执行脚本权限的组中:
在这种情况下,权限如下:
chmod ug+rwx,o-x+r script
#read write xecute permission to user and group and readonly to others
并且
chmod u+rwx,g+rx,o-x+r
#read write xecute to user and rx to group and readonly to others
等等,在组拥有执行文件的权限时,可以使用该技巧。这比使用 755
权限更安全。
执行此过程的步骤:
1.登录具有sudo特权的用户帐户。
2.更改脚本的权限,只允许用户和组执行该脚本。
例如:
chmod u+rwx,g+rx,o-x path/to/the/script
3. 将非sudo用户添加到当前用户组:
sudo usermod -g $USER non_sudo_user_name
#you don't need to edit $USER, only non_sudo_user_name
4. 在非sudo用户账户中进行新的登录。
现在,您可以通过运行以下命令来执行脚本:
/path/to/the/script
注意:如果您的脚本依赖于相对路径,则在运行之前可能需要
cd
到脚本的父目录。
shutdown.sh
的实验一下,看看是否有任何依赖项会继承它的权限。不幸的是,我暂时没有一个具有根访问权限的 shell 可供测试。 - dekkardNOPASSWD
只是简单地禁用了通常在这种情况下会出现的密码提示。 - dekkard