我想编写一个shell脚本来设置一个mercurial存储库,并允许该组中的所有用户 “开发人员”执行此脚本。
该脚本由用户“hg”拥有,运行时运行正常。当我尝试运行它时会出现问题 与另一个用户一起使用sudo,当它尝试获取另一个文件时,执行暂停并显示“权限被拒绝”错误。
有问题的脚本文件:
create_repo.sh
#!/bin/bash
source colors.sh
REPOROOT="/srv/repository/mercurial/"
... rest of the script ....
create_repo.sh和colors.sh的权限:
-rwxr--r-- 1 hg hg 551 2011-01-07 10:20 colors.sh
-rwxr--r-- 1 hg hg 1137 2011-01-07 11:08 create_repo.sh
Sudoers设置:
%developer ALL = (hg) NOPASSWD: /home/hg/scripts/create_repo.sh
我正在尝试运行:
user@nebu:~$ id
uid=1000(user) gid=1000(user) groups=4(adm),20(dialout),24(cdrom),46(plugdev),105(lpadmin),113(sambashare),116(admin),1000(user),1001(developer)
user@nebu:~$ sudo -l
Matching Defaults entries for user on this host:
env_reset
User user may run the following commands on this host:
(ALL) ALL
(hg) NOPASSWD: /home/hg/scripts/create_repo.sh
user@nebu:~$ sudo -u hg /home/hg/scripts/create_repo.sh
/home/hg/scripts/create_repo.sh: line 3: colors.sh: Permission denied
因此脚本被执行,但在尝试包含其他脚本时停止。
我也尝试过使用:
user @ nebu:〜$ sudo -u hg / bin / bash /home/hg/scripts/create_repo.sh
这给出了相同的结果。
如果脚本可以通过sudo与其他用户一起运行,那么包含另一个shell脚本的正确方法是什么?
答案 0 :(得分:1)
可能发生的情况是脚本尝试source
当前目录中的文件colors.sh
并失败,因为由于sudo
它没有读取当前目录的权限
尝试使用source /home/hg/scripts/colors.sh
。