运行 bash 带有 sudo 的脚本,但创建文件的所有者是用户
Run bash script with sudo but create files with user as owner
我有一个 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 下的脚本以我的用户为所有者创建文件?
- 您可以正确地说接触单个文件的脚本不需要 运行 在 sudo 下。这个例子当然是原始问题的减少,我的脚本有更多并且确实需要在 sudo 下 运行,但我仍然希望以我的用户作为所有者创建文件。
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
我有一个 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 下的脚本以我的用户为所有者创建文件?
- 您可以正确地说接触单个文件的脚本不需要 运行 在 sudo 下。这个例子当然是原始问题的减少,我的脚本有更多并且确实需要在 sudo 下 运行,但我仍然希望以我的用户作为所有者创建文件。
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