笔记: 请随意编辑问题——我很难表达它!
问题:
如何模拟普通用户——同时仍然保留管理员/根权限来代表该目标用户执行任何命令?
机制如下:
- 允许完整的 root/admin 访问来执行任何命令;
- 允许您指定一些“目标群体”;
- 允许您指定一些“目标用户”;
- 并确保所有命令、脚本等都代表该用户/组执行 - 将“目标用户”和“目标组”设置为所有者...
这些示例显示了如何为每个命令指定pkexec
和/或——这正是我试图避免做的事情:sudo
pkexec:
失败:要求管理员在前面加上sudo
和pkexec
。
sudo pkexec -u TestUser mkdir /home/TestUser/NewFolder
- 成功:创建文件夹并分配正确的权限
sudo pkexec -u btsync mkdir /opt/btsync
- 失败:不适用于没有主文件夹的服务帐户:
Error changing to home directory /home/btsync: No such file or directory
- 失败:不适用于没有主文件夹的服务帐户:
sudo:
失败:需要管理员加上前缀sudo
。
1sudo pkexec -u btsync mkdir /opt/btsync
- 失败:创建文件夹-但指定根所有者。
- 失败:之后需要修复权限,有时会增加 x3 输入的命令。
以 BTSync 为例,所需功能如下:
root@localhost > enterElevatedShell -u btsync
btsync@localhost > nano /etc/asound.conf
- 许多命令是手动输入的。
btsync@localhost > exit
root@localhost >
或者:
root@localhost > stopauthorizationModules
root@localhost > sudo -i btsync
btsync@localhost > nano /etc/asound.conf
- 许多命令是手动输入的。
btsync@localhost > exit
root@localhost >
或者:
root@localhost > sudo --setUmask=0222 --setTargetUser=btsync
root@localhost > sudo -E mkdir /opt/btsync
常见场景:
笔记:这是在手动的系統管理。
具有 Root 访问权限:
- 创建 /home/[用户名]/子文件夹 | w/[用户名] 作为所有者
- 创建 /opt/[serviceAccount]Service | w/[serviceAccount] 作为所有者
- 创建/修改 /etc/service/[someconfig] | w /[serviceAccount] 为所有者
一般来说,我会执行很多很多命令,而回到翻转权限位是繁琐、不一致的,并且由于管理员健忘或打字错误而导致安全漏洞。
答案1
要创建目录并立即设置所有者:
sudo install -d -o owner -g group -m 755 /path/to/dir
/home
如果父目录不能由“所有者”写入,就像 的情况一样,则需要使用安装来完成此操作。
要创建文件,只需使用 sudo
sudo -u owner touch /path/to/file
或者 vi 或者其他什么。
如果您有想要复制并设置所有者的文件,可以再次使用 install。它的工作原理类似于 cp,但有额外的选项
sudo install -o owner -g group -m 640 file /path/to/file
如果您需要创建大量文件、用户和目录等,并且担心一致性,也许您需要查看配置管理系统,如 puppet、chef、ansible 或类似的。设置起来需要多花点功夫,但它的优点是可以重复使用。