如果使用 sudo 执行了 bash 脚本,脚本中的命令如何以当前登录的用户身份而不是 root 运行,然后恢复为 root 以继续运行其他命令?
例如: -
#!/usr/bash
touch fileOwnedByRoot.txt
touch fileOwnedByUser.txt
touch otherRootFile.txt
如果这个脚本是用sudo运行的,不改变命令的顺序,第二个touch命令如何以标准用户的身份运行?
该脚本只是一个简单的示例,因此使用 chmod 更改创建的文件的所有权是无关紧要的。
我正在使用的实际脚本由安装程序运行,因此要求以提升的权限运行,但必须以运行安装程序的用户身份运行特定命令,而安装程序的名称未知。
最佳答案
使用 su - another_user -c "<command>"
运行该特定命令:
#!/bin/bash
touch /tmp/f1
su - another_user -c "touch /tmp/f2"
touch /tmp/f3
正如 chepner 所评论的下面,你需要使用
$SUDO_USER
或 $SUDO_UID
获取运行 sudo
的真实用户的名称命令:su - $SUDO_USER -c "touch /tmp/f2"
这样,运行命令的用户将接触到该文件。
您可以使用以下方法进行测试:
#!/bin/bash
echo "sudo_user: $SUDO_USER"
echo "sudo_uid: $SUDO_UID"
并使用
./script
运行脚本或 sudo ./script
.在第二种情况下,值将被填充。
关于macos - 从 sudo 提升的脚本以标准用户身份运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26239022/