我有一个bash脚本create-file.sh,它创建一个名为a:
的文件 $ cat create-file.sh
# /bin/bash
touch a
当我运行脚本时,它会以我的用户为所有者创建一个文件'a'。
$ ./create-file.sh
$ ls -l
-rw-r--r-- 1 shai wheel 0 Aug 16 17:19 a
但是当我在sudo下运行脚本时,文件是以root用户身份创建的:
$ sudo ./create-file.sh
$ ls -l
-rw-r--r-- 1 root wheel 0 Aug 16 17:19 a
有没有办法告诉在sudo下运行的脚本以我的用户为所有者创建文件?
答案 0 :(得分:1)
sudo
将原始用户名导出为SUDO_USER
;你可chown
那样。
#!/bin/bash
touch a
[[ $SUDO_USER ]] && chown "$SUDO_USER" a
同样,如果您的sudo配置允许(默认情况下)root权限在没有明确密码提示的情况下将权限删除给任何其他用户,您可以利用它:
#!/bin/bash
# drop privileges back to non-root user if we got here with sudo
depriv() {
if [[ $SUDO_USER ]]; then
sudo -u "$SUDO_USER" -- "$@"
else
"$@"
fi
}
depriv touch a