是否有可能在使用sudo命令时应首先获取文件?

时间:2015-05-07 09:55:02

标签: linux bash ansible sudo

我需要运行一堆脚本(使用sudo),它们使用单​​个file.sh作为所有的配置文件。最初我将file.sh放在/etc/profile.d中,当我以root身份运行脚本时一切正常(因为当我连接到机器时,它首先获取file.sh和该文件中的所有vars可用)但是现在,出于安全原因,我需要与另一个具有sudo权限的用户运行它们。

使用sudo运行"配置文件"在/etc/profile.d中,即使我是root用户并且做了sudo,它也不会获得来源 - 它是相同的。

使用" sudo -E"不是一种选择,也是这种解决方案"默认值env_keep + =" ftp_proxy http_proxy https_proxy no_proxy""对我来说不起作用,因为文件中的变量发生了很大变化,并且在一个位置(例如/etc/profile.d/)中将所有变量抛出一个文件更容易 - 而不是向/添加选项等/ sudoers中。

稍后编辑(工作):

将原始sudo命令移至sudo.orig。创建了一个新的sudo bash脚本

[root@NS1 bin]# cat sudo
#!/bin/bash
source /etc/profile.d/set_env_vmdeploy.sh
sh /usr/bin/sudo.orig "$@"

并赋予其权限

[root@NS1 bin]# chmod 4111 sudo
[root@NS1 bin]# ll sudo*
---s--x--x 1 root root     78 May  7 13:42 sudo
---s--x--x 1 root root 123832 Jul 31  2014 sudo.orig

1 个答案:

答案 0 :(得分:2)

如果希望sudo执行子shell中的所有配置文件脚本,可以告诉它将shell作为登录shell调用:sudo -i /usr/local/bin/my_script.sh。 (请注意,子shell将以工作目录设置为/root开头,并且这可能会产生其他意外的副作用。)

或者,使用命令参数显式调用bash:sudo /bin/bash -c "source ./config.sh; ./real_script.sh"