情况:
我想直接从web gui执行shell脚本。shell脚本属于用户"tux"。由于我的Web服务器是以apache运行的,所以我无法执行tux的shell脚本。OS:centros
我尝试过的:
su -c "/opt/tomcat/bin/shutdown.sh" -s /bin/sh tux
我尝试了不同的方法,提到的是当我以root用户身份登录时它是如何工作的。
问题:
有没有一种方法可以在不root的情况下做同样的事情?类似于一个命令,我可以将其密码传递给用户AND以执行脚本。
我不能仅仅更改脚本的所有权,因为它取决于tux的配置文件(其他文件、目录)。
提前非常感谢您的帮助!
您可以使用NOPASSWD
将用户tux
添加到/etc/sudoers
,以允许其在没有密码提示的情况下运行sudo
。
例如,将其添加到/etc/sudoers
的末尾,以允许在没有密码的情况下提升任何命令的执行(注意,有一个专门的工具-visudo
):
tux ALL=(ALL) NOPASSWD: ALL
或者,一种更受限制的方式-只允许您的脚本使用:
tux ALL = NOPASSWD: /opt/tomcat/bin/shutdown.sh
之后,通过从终端运行任何命令来检查更改是否有效,例如:
sudo id
并且它不应该提示输入root密码。
更新:
要使Apache运行属于另一个用户(例如tux
)的脚本,请将此行添加到sudoers
:
www-data ALL=(ALL) NOPASSWD: /bin/bash /opt/tomcat/bin/shutdown.sh
然后你应该能够在没有密码的情况下运行它,就像这样:
sudo -u tux /opt/tomcat/bin/shutdown.sh
此外,请检查以下内容:
- 如何从php调用需要SUDO的shell脚本
- php-exec()中的sudo
- https://serverfault.com/questions/157272/allow-apache-to-run-a-command-as-a-different-user
试试这个:
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
到脚本的父目录