情况:
我想直接从web-gui执行一个shellcript。 shellscript属于用户" tux"。 由于我的web服务器以apache身份运行,因此我无法执行tux的shellcript。 操作系统:CENTOS
我尝试过的事情:
su -c "/opt/tomcat/bin/shutdown.sh" -s /bin/sh tux
我尝试了不同的方法,提到的是当我以root用户身份登录时它是如何工作的。
问题:
有没有办法在不成为root的情况下做同样的事情?类似命令,我可以传递用户及其密码来执行脚本。
我无法更改脚本的所有权,因为它取决于tux的配置文件(其他文件,目录)。
非常感谢您的帮助!
答案 0 :(得分:1)
试试这个:
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 privillege的用户帐户。
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
到脚本的父目录。
答案 1 :(得分:1)
您可以将用户tux
添加到/etc/sudoers
NOPASSWD
,以允许其在没有密码提示的情况下运行sudo
。
E.g。将其添加到/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
另外,请检查以下内容: