运行 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_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