Linux 以另一个用户身份执行脚本,而不是root用户

Linux 以另一个用户身份执行脚本,而不是root用户,linux,bash,shell,authentication,Linux,Bash,Shell,Authentication,情况: su -c "/opt/tomcat/bin/shutdown.sh" -s /bin/sh tux 我想直接从web gui执行shellscript。shellscript属于用户“tux”。 因为我的Web服务器是以apache运行的,所以我无法执行tux的shellscript。 OS:CENTOS 我所尝试的: su -c "/opt/tomcat/bin/shutdown.sh" -s /bin/sh tux 我尝试了不同的方法,提到的一个是当我以root用户身份登录时它

情况:

su -c "/opt/tomcat/bin/shutdown.sh" -s /bin/sh tux
我想直接从web gui执行shellscript。shellscript属于用户“tux”。 因为我的Web服务器是以apache运行的,所以我无法执行tux的shellscript。 OS:CENTOS

我所尝试的:

su -c "/opt/tomcat/bin/shutdown.sh" -s /bin/sh tux
我尝试了不同的方法,提到的一个是当我以root用户身份登录时它是如何工作的

问题:

su -c "/opt/tomcat/bin/shutdown.sh" -s /bin/sh tux
有没有一种方法可以在不使用root的情况下执行相同的操作?类似于一个命令,我可以在其中传递用户及其密码以执行脚本

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

非常感谢您的帮助

试试这个:

echo "$pass" | sudo -S -u $user script
$pass
是您的密码,
$user
是希望运行脚本的用户。(此用户必须具有运行脚本的权限。)

如果您的
用户
没有权限,请尝试以组身份运行:

echo "$pass" | sudo -S -g $group script
此组必须具有运行脚本的权限

注意:像这样传递密码不是一个好主意

如果您的用户无法使用sudo:

如果您的用户不能使用sudo,则无法通过使用sudo切换用户来运行脚本。应该考虑使用这个非SUDO用户帐户执行脚本。为此,该用户必须具有执行脚本的权限

一种方法是将脚本的权限更改为
755
(来自sudo用户):

su -c "/opt/tomcat/bin/shutdown.sh" -s /bin/sh tux
然后,您可以通过在终端中输入路径来执行脚本。(如果脚本依赖于相对路径,请确保在运行脚本之前将其
cd
发送到脚本的父目录)

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

另一种方法是将非sudo用户添加到有权执行脚本的组中:

su -c "/opt/tomcat/bin/shutdown.sh" -s /bin/sh tux
在这种情况下,权限如下所示:

chmod ug+rwx,o-x+r script
#read write xecute permission to user and group and readonly to others

依此类推,在有权执行文件的组中,将执行此操作。它比使用
755
权限更安全

完成此过程的步骤:

su -c "/opt/tomcat/bin/shutdown.sh" -s /bin/sh tux
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
添加到脚本的父目录。

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

例如,将此项添加到
/etc/sudoers
的末尾,以允许在不使用密码的情况下提升执行任何命令(注意,有一个专用工具-
visudo
):

或者,一种更严格的方式-仅允许对脚本执行此操作:

tux    ALL = NOPASSWD: /opt/tomcat/bin/shutdown.sh
之后,通过从终端运行任何命令,检查更改是否有效,例如:

sudo id
而且它不应该提示输入root密码

更新:

su -c "/opt/tomcat/bin/shutdown.sh" -s /bin/sh tux
要使Apache运行属于另一个用户的脚本(例如
tux
),请将此行添加到
sudoers

www-data ALL=(ALL) NOPASSWD: /bin/bash /opt/tomcat/bin/shutdown.sh
然后,您应该能够在没有密码的情况下运行它,如下所示:

sudo -u tux /opt/tomcat/bin/shutdown.sh
此外,请检查以下各项:


非常感谢您的回答。不幸的是,它不起作用。你是通过tux作为用户还是其他?如果其他组不起作用。如果您有一个组有权运行tux的脚本,您可以使用该组运行脚本。再次感谢您,但它仍然没有像我希望的那样工作。当我以具有root权限的用户身份登录时,它会工作。我希望通过传递密码,在不使用sudo的情况下执行其他用户脚本。如果这是可能的。如果您的用户不能使用sudo,那么我认为您无法提供密码并执行该脚本。我知道的唯一方法是授予显式执行脚本的权限。您可以简单地将sudo用户作为一个组添加到非sudo用户。这样你就可以不用sudo和密码来执行脚本。这个主意很好,我没有,谢谢。但它仍然存在一些问题:如果我允许执行所有操作,这将导致安全问题。如果我只允许执行脚本,我会遇到依赖项问题。我不确定依赖项是什么,我最好只允许
shutdown.sh
运行一个实验,看看是否有依赖项继承了它的特权。不幸的是,目前我手头没有一个具有root访问权限的shell来测试这一点。问题是,关闭Web服务器的关闭脚本需要访问日志文件。它们以前是由脚本所有者用户创建的。我试图允许访问这些文件,可惜没有成功。最好是通过传递密码以tux的形式执行脚本!使用sudo运行命令而不指定用户时,将以root用户身份运行该命令。因此,你应该能接触到一切
NOPASSWD
只是简单地禁用在这种情况下通常会出现的密码提示。我想你在这一点上误解了我。我希望能够以非root用户的身份执行脚本!其他的事情会很清楚:)