nul*_*nce -1 permissions sudo shell-script
我被告知以下两个关于以 sudo 身份运行脚本的声明:
我没有理由怀疑我被告知的内容,但是我有以下设置有效,我想知道为什么,如果上述两个陈述是正确的。
我有以下脚本:
/var/www/bash_scripts/test/set_permissions.sh
该脚本包含以下内容:
chown -R jason:www-data /var/www/test.site.com
find /var/www/test.site.com -type f -exec chmod 664 {} \;
find /var/www/test.site.com -type d -exec chmod 775 {} \;
Run Code Online (Sandbox Code Playgroud)
这个脚本的权限是:
-rwxrwxr-- 1 root root 200 Nov 21 22:49 set_permissions.sh
我的/etc/sudoers文件包含附加到底部的以下行:
www-data ALL=(ALL) NOPASSWD: /var/www/bash_scripts/test/set_permissions.sh
当脚本通过以 user 身份运行的 php 进程执行时www-data,脚本按预期执行并执行其中的所有命令。
如果上面的语句 1. 是正确的,则脚本不应执行,因为它只能通过 root 用户执行。如果上面的语句 2. 是正确的,脚本中的命令将无法执行。
我只是想澄清一下这两个陈述是否正确,如果正确,我做了什么允许我上面描述的行为?
编辑
www-data 拥有 /var/www/test.site.com
php 代码通过以下方式运行命令:
exec('sudo /var/www/bash_scripts/site/test/set_permissions.sh 2>&1')
- 执行 sudo 命令的用户还必须对该文件具有执行权限
陈述 1 不准确。执行 sudo 的用户不需要对脚本具有执行权限。
- 只有文件将以 root 身份执行,而不是其中的命令
陈述2也不准确。sudo 用户调用的脚本中的所有命令都将以 sudo 用户身份运行。
这是我运行的一个简单测试脚本,用于显示运行脚本/命令的用户的 ID。
/tmp $ id
uid=1000(danesh) gid=1000(danesh)
/tmp $ ls -l test.sh
-rwxr-xr-x 1 danesh danesh 24 Nov 22 10:48 test.sh*
/tmp $ ./test.sh
uid=1000(danesh) gid=1000(danesh)
/tmp $ sudo ./test.sh
[sudo] password for danesh:
uid=0(root) gid=0(root) groups=0(root)
/tmp $ sudo chown root:root test.sh
/tmp $ sudo chmod 770 test.sh
/tmp $ ls -l test.sh
-rwxrwx--- 1 root root 24 Nov 22 10:48 test.sh*
/tmp $ ./test.sh
fish: The file “./test.sh” is not executable by this user
/tmp [126] $ sudo ./test.sh
uid=0(root) gid=0(root) groups=0(root)
/tmp $ cat test.sh
#!/usr/bin/env bash
# show the user executing this script
id
Run Code Online (Sandbox Code Playgroud)
希望有帮助。
| 归档时间: |
|
| 查看次数: |
483 次 |
| 最近记录: |