与su相反:运行没有root权限的命令

我正在编写一个shell脚本,其中大多数命令不需要root权限。 该脚本应该由pipe理员运行。 但我想能够“su”到正常的用户帐户的部分脚本,不需要root权限。 这将最大限度地减less使用root权限完成的操作次数,并可以提高安全性。

有没有一个Linux命令来做到这一点?

我知道有可能su到任何用户帐户,但我不想依赖于一个特定的用户名在机器上存在的假设。

我想为脚本创build一个临时帐户,并在脚本结尾删除它。 但是如果我没有在这个帐户上设置密码,攻击者是否可以在帐户的短期内使用它? 我无法将用户shell设置为/ sbin / nologin,因为显然这会阻止在shell脚本中对该帐户执行命令

谢谢你的帮助。

我个人反对你的策略,并以非特权用户的身份运行脚本,sudo用于运行需要root权限的命令。 是否有任何特定的原因需要以root身份运行脚本?

但是,要回答您的问题,可以使用-c标志以用户身份运行特定的命令:

 su someuser -c "touch /tmp/file" 

参考: http : //linux.die.net/man/1/su

我不想依赖于机器上存在特定用户名的假设。

超级用户有好处::-)

 scriptuser_created=no scriptuser=myuser if ! id "$scriptuser" &>/dev/null adduser --system "$scriptuser" scriptuser_created=yes fi sudo -u "$scriptuser" command1 sudo -u "$scriptuser" command2 sudo -u "$scriptuser" command3 if [ yes = "$scriptuser_created" ]; then userdel "$scriptuser" fi 

像这样的问题的传统解决scheme是永久性的用户帐户存在精确的程序所需的访问级别和权限。 networking服务(如apache)通常以自己的用户身份运行,其权限与普通交互式用户的权限不同,且显着小于root用户。

如果root首先运行脚本,那么即使该用户有密码,也不需要为其他用户提供密码。

苏代表替代用户。 您可以使用su更改为其他用户。 所以,如果你是超级用户,并且想以另一个用户的身份运行某些东西,只需input用户名并运行命令。

把它插入你的shell脚本的开头。

 # please run as foo user if [[ $EUID -ne 1234 ]]; then echo "This script must be run as foo" exit 1 fi 

可以将shell设置为nologin。

只有通过精心devise的sudoerconfiguration,才能为用户foo添加sudo权限,以执行剩余的根目录操作。