Shell sudoers的权限级联是如何工作的?

Shell sudoers的权限级联是如何工作的?,shell,permissions,root,sudoers,Shell,Permissions,Root,Sudoers,对于unix的人来说,这可能是一个不需要动脑筋的问题。我只是想问一个简单的问题。 我已经创建了3个脚本: wrapper.sh inside1.sh和 inside2.sh 在wrapper.sh中,我正在调用inside1.sh和inside2.sh。现在,我已经以用户身份登录了bob,并且在sudoers文件中,我授予了bob以root用户身份运行wrapper.sh的权限。 我故意不为userbob的所有3个脚本提供读取或执行访问权限。因此“bob”无法看到现有的脚本。 现在,由于我在su

对于unix的人来说,这可能是一个不需要动脑筋的问题。我只是想问一个简单的问题。 我已经创建了3个脚本:

  • wrapper.sh
  • inside1.sh
  • inside2.sh
  • 在wrapper.sh中,我正在调用
    inside1.sh
    inside2.sh
    。现在,我已经以用户身份登录了
    bob
    ,并且在sudoers文件中,我授予了bob以root用户身份运行
    wrapper.sh
    的权限。 我故意不为user
    bob
    的所有3个脚本提供读取或执行访问权限。因此“bob”无法看到现有的脚本。 现在,由于我在sudoers中添加了
    wrapper.sh
    ,我可以以root用户身份运行
    wrapper.sh
    文件。
    wrapper.sh中的id命令打印
    id=0

    但是,当调用
    inside1.sh
    inside2.sh
    的行开始执行时,会出现一个错误,说明
    inside1.sh
    -未找到

    现在我来提问:

    如果一个shell脚本被设置为在sudoers文件中以root用户身份运行,并且如果该shell脚本调用多个其他shell脚本,那么其他脚本是否会以root用户身份执行?权限会层叠吗


    有人能澄清一下吗?感谢您的耐心。

    指向
    inside1.sh
    的整个路径必须对root用户开放,否则他将无法查看该文件。要检查这一点,请运行类似这样的操作

    U_PATH= < path to inside1.sh > 
    LIST=` echo ${U_PATH} | sed  "s/\// /g" `
    T_PATH=""
    
    for x in $LIST
    do
       echo ${x}
       T_PATH=${T_PATH}/${x}
       ls -lsd ${T_PATH}
    done
    
    U_PATH=
    LIST=`echo${U\U PATH}sed“s/\///g”`
    T_PATH=“”
    对于$LIST中的x
    做
    echo${x}
    T_PATH=${T_PATH}/${x}
    ls-lsd${T_PATH}
    完成
    

    并检查所有内容是否由root所有或作为特权>555。

    未找到表示路径问题,而不是权限问题。打算以root用户身份运行的Shell脚本必须始终将清理其环境作为其第一个操作;这也是将$PATH设置为在*.sh中查找所需的正确时间。谢谢zwol。我查过了。这不是路径问题。进程继承其父进程的凭据,除非显式调用了
    setuid
    函数族之一(或者调用了设置了
    setuid
    /
    setgid
    位的函数)。这与
    sudo
    无关。基于错误,这更可能是一个路径问题,但如果您不发布代码,则很难判断。