Bash 向不同的用户发送sudo,并在发布sudo后立即以被动(非交互)方式运行命令

Bash 向不同的用户发送sudo,并在发布sudo后立即以被动(非交互)方式运行命令,bash,shell,path,ksh,sudo,Bash,Shell,Path,Ksh,Sudo,考虑这个sudo-我以jonhnd的身份登录,并通过一个包含以下命令的脚本run1st.ksh运行它 sudo -iu bigadmin 这将我的凭证提升为bigadmin普通用户,但该用户是“共享”用户,这意味着我真的没有任何余地来定制他的个人资料 在他登录之后,我看到他的路径变量非常瘦,只添加了很少的路径 echo $PATH /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/opt/dell/srvadmin/bin 因此,pwd不在路径

考虑这个sudo-我以jonhnd的身份登录,并通过一个包含以下命令的脚本run1st.ksh运行它

sudo -iu bigadmin 
这将我的凭证提升为bigadmin普通用户,但该用户是“共享”用户,这意味着我真的没有任何余地来定制他的个人资料 在他登录之后,我看到他的路径变量非常瘦,只添加了很少的路径

echo $PATH 
/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/opt/dell/srvadmin/bin
因此,pwd不在路径中,也不可执行。$PATH中的dir是不可写的,就像我说的,修改bigadmin的任何个人文件都不是一个选项。我有一个启动脚本,我作为该用户只为我的会话执行,我必须强制执行它

. ./myscript 
行得通

myscript 
. myscript 
由于上面提到的路径限制,因此给出myscript not found错误是可以理解的。 我想做的是在run1st.ksh中运行sudo和myscript,这样当我输入bigadmin提示符时,myscript已经运行了 @巴尔马 谢谢你的帮助。 下面是运行该命令的o/p(将verbose放在set-x上)

@巴尔马

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
甚至在把它复制到约翰的家中之后,我也得到了相同的文件未找到命令。因此,它是在特定路径中查找文件,而不是在您提出的目录中。也许在sudo命令中调整路径

文件名
xxx中有一个空格。ksh
我没有注意到。修复了这个问题,现在它不会给出file not found错误,但会执行它并返回johnd提示符

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

sudo -iu bigadmin /path/to/myscript

那会让我在bash shell的权利。我如何做同样的事情,像bigadmin一样潜入ksh(bourne)shell使用
ksh
而不是
bash
。与ksh不太兼容。我将在迷你版中更新问题中的o/p,我不确定为什么它不起作用
ksh
与其他shell一样,采用
-c
选项。
-i
选项将当前目录设置为
bigadmin
的主目录。因此,如果脚本不在他的homedir中,则需要将其完整路径放到脚本中。
sudo -iu bigadmin /path/to/myscript