作为另一个用户执行脚本而不是root用户

时间:2015-04-30 13:49:59

标签: linux bash shell authentication

情况:

我想直接从web-gui执行一个shellcript。 shellscript属于用户" tux"。 由于我的web服务器以apache身份运行,因此我无法执行tux的shellcript。 操作系统:CENTOS

我尝试过的事情:

su -c "/opt/tomcat/bin/shutdown.sh" -s /bin/sh tux

我尝试了不同的方法,提到的是当我以root用户身份登录时它是如何工作的。

问题:

有没有办法在不成为root的情况下做同样的事情?类似命令,我可以传递用户及其密码来执行脚本。

我无法更改脚本的所有权,因为它取决于tux的配置文件(其他文件,目录)。

非常感谢您的帮助!

2 个答案:

答案 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

另外,请检查以下内容: