Bash 向不同的用户发送sudo,并在发布sudo后立即以被动(非交互)方式运行命令
考虑这个sudo-我以jonhnd的身份登录,并通过一个包含以下命令的脚本run1st.ksh运行它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 -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