繁体   English   中英

Shell脚本和sudo

[英]Shell script and sudo

在我的shell脚本中,我有以下内容:

export PATH=$PATH:/home/$USER/somedir

假设我以Mike用户身份登录。 我需要以root用户身份执行shell脚本,因此我以sudo filename.sh身份运行它,因此$ USER在这种情况下成为我的路径中的root用户。

我希望它是运行脚本的用户的名称,即mike而不是root。 有没有办法做到这一点?

谢谢

必须使用/home/$USER ,还是$HOME可以解决问题? IIRC, sudo不会覆盖$HOME的值。

使用$SUDO_USER (如果您坚持直接使用$USER ,请如下所示设置其值):

$ cat script.sh
#!/bin/bash

if [ "$SUDO_USER" != "" ]; then
  USER=$SUDO_USER;
fi

export PATH=$PATH:/home/$USER/somedir

或使用$USER作为脚本的第一个参数作弊(错误检查是读者的一项练习):

$ cat script.sh
#!/bin/bash
USER=$1

export PATH=$PATH:/home/$USER/somedir

然后:

$ sudo ./script.sh $USER

或使用Chris Jester-Young建议的$HOME 您可以使用bash删除“ / home /”前缀,但这将是一个丑陋的破解。

如果您愿意使用su而不是sudo ,则可以

su -cp filename.sh

在保留环境的同时执行命令。

您可以尝试使用$ UID,该$ UID仍应设置为用户的真实ID号,并以此为基础从密码数据库中检索其名称。

如果需要保护环境,可以使用sudo的-E选项。 但是它需要一些配置和安全策略...如果Chris JY提出的$ HOME解决方案因为更简单而不适用,则适用。

我的2美分

sudo是不同形式的“ root”用户。 如果任何用户具有sudo特权,则意味着他具有用户“ root”可用的管理员权限。 也就是说,使用sudo不会将用户更改为root。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM