2015-04-30 59 views
3

现状:执行脚本作为另一个用户,而不是根

我想直接从Web的GUI执行shell脚本。 shellcript属于用户“tux”。 由于我的web服务器以apache身份运行,因此无法执行tux的shellscript。 OS:CENTOS

我已经试过:

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

我尝试不同的方法,所提到的一个是它是如何工作时,我被登录为root用户。

问:

有没有办法做同样的,而不是根?就像我可以传递用户及其密码来执行脚本的命令。

我不能只是改变脚本的所有权,因为它取决于tux的配置文件(其他文件,目录)。

非常感谢您的帮助!

编辑:我不得不编辑示例,因为它是错误的。

回答

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到脚本的父目录运行它之前)

注:这将允许任何用户执行脚本(无需任何身份验证)

另一种方法是将非须藤用户添加到一具有的权限来执行脚本的基团:

在这种情况下,权限等:

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.登录到具有须藤privillege的用户帐户。

2.修改脚本的权限,因为只允许用户和组执行脚本。

实施例:

chmod u+rwx,g+rx,o-x path/to/the/script 

3.添加非须藤用户添加到当前用户组:

sudo usermod -g $USER non_sudo_user_name 
#you don't need to edit $USER, only non_sudo_user_name 

4.Do在非须藤用户帐户一个新的登录。

现在,您可以通过运行执行脚本:

/path/to/the/script 

注意:如果你的脚本取决于相对路径,那么你可能需要cd到脚本的父目录运行它之前。

+0

非常感谢您的回答。不幸的是它没有奏效。 – Yanik

+0

你是否以用户或其他方式传递礼服?如果其他它不会工作。 – Jahid

+0

如果您有一个有权运行tux脚本的组,可以使用该组运行该脚本。 – Jahid

1

您可以将您的用户tux添加到/etc/sudoersNOPASSWD以允许它在没有密码提示的情况下运行sudo

E.g.这个增加的/etc/sudoers年底允许提升执行任何命令的无密码(注意,这里是为一个特殊的工具 - visudo):

tux ALL=(ALL) NOPASSWD: ALL 

或者,更严格的方式 - 只允许这对你的脚本:

tux ALL = NOPASSWD: /opt/tomcat/bin/shutdown.sh 

该检查后,该变化是由影响从终端运行的任何命令,例如:

sudo id 

和它不应该提示输入root密码。

UPDATE:

为了让Apache运行属于其他用户的脚本(如tux)这行添加到sudoers

www-data ALL=(ALL) NOPASSWD: /bin/bash /opt/tomcat/bin/shutdown.sh 

那么你应该能够没有密码运行像这样:

sudo -u tux /opt/tomcat/bin/shutdown.sh 

此外,检查这些:

+0

这个想法很好,我没有,谢谢。但是仍然存在一些问题: 如果我允许执行所有操作,则会导致安全问题。如果我只允许执行该脚本,则会出现依赖关系问题。 – Yanik

+0

我不确定这些依赖关系,我最好只是允许'''shutdown.sh''运行一个实验,看看是否有依赖关系继承它的特权。不幸的是,我目前没有在我手中拥有root权限的shell来测试它。 – dekkard

+0

问题是,关闭Web服务器的shutdown-script需要访问日志文件。它们是以前由脚本的所有者创建的。 我试图允许访问这些文件,可悲的是没有成功。 最好的是通过传递密码来真正执行脚本作为tux! – Yanik

相关问题