sudo到不同的用户并立即运行命令sudo,被动地(非交互式)

时间:2014-02-28 23:00:55

标签: bash shell path ksh sudo

考虑这个sudo - 我以jonhnd身份登录并通过脚本run1st.ksh运行,该脚本具有以下命令

sudo -iu bigadmin 

这会将我的凭据提升为bigadmin一般用户,但该用户是“共享”用户的意思 - 我真的没有任何余地来定制他的个人资料 登录后,我看到他的PATH变量非常瘦,只添加了几条路径

echo $PATH 
/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/opt/dell/srvadmin/bin

所以pwd不在路径中,也不可执行。 $ PATH中的那些目录中没有一个是可写的,就像我说修改bigadmin的任何个人文件都不是一种选择。我有一个启动脚本,我作为该用户执行我的会话,我必须强制执行它

. ./myscript 

将起作用

myscript 
. myscript 
由于上面提到的路径限制,

给myscript找不到错误是可以理解的。 我想要做的是在run1st.ksh中运行sudo和myscript,这样当我输入bigadmin提示时,myscript已经运行了 @barmar 谢谢你的帮助。 这是运行的o / p(在set -x上放置详细信息)

++ sudo -iu bigadmin ksh -c '. ./run1st.ksh'
Usage: . [ options ] name [arg ...]

@Barmar

sudo -iu bigadmin ksh -c '/home/bigadmin/run1st.ksh'
ksh: line 1: /home/bigadmin/run1st.ksh: not found

sudo -iu bigadmin ksh -c '. /home/biadmin/run1st.ksh'


age: . [ options ] name [arg ...]


$ sudo -iu bigadmin  ksh -c '. /home/bigadmin; run1st.ksh'
+ sudo -iu bigadmin ksh -c '. /home/bigadmin; run1st.ksh'
Usage: . [ options ] name [arg ...]

$ sudo -iu bigadmin  ksh -c '. /home/bigadmin/run1st.ksh ; run1st.ksh'
+ sudo -iu bigadmin ksh -c '. /home/bigadmin/run1st.ksh ; run1st.ksh'
Usage: . [ options ] name [arg ...]

不起作用

$ sudo -iu bigadmin  /home/bigadmin/run1st.ksh
+ sudo -iu bigadmin /home/bigadmin/run1st.ksh
-nologin: line 1: /home/bigadmin/run1st.ksh: not found

它实际上在johnd的目录中查找run1st.ksh

$ sudo -iu bigadmin  echo `pwd`
++ pwd
+ sudo -iu bigadmin echo /home/johnd

甚至在将它复制到johnd的家后 - 我得到了SAME File not found命令。所以它在特定的PATH中寻找文件,而不是在你提出的目录中。也许在那个sudo命令中调整PATH?

文件名xxx. ksh中有一个我没注意到的空格。修复了现在它没有给文件找不到错误但它执行它并返回到johnd提示符。

$ sudo -iu bigadmin /home/bigadmin/run1st.ksh
+ sudo -iu bigadmin /home/bigadmin/run1st.ksh
++ printf '\033]0;%s@%s:%s\007' johnd server400 '~'
$

1 个答案:

答案 0 :(得分:1)

你可以这样做:

sudo -iu bigadmin /path/to/myscript