有没有办法告诉 sudo 将我的用户名设置为创建的文件的所有者而不是 root?

Bel*_*dez 20 bash sudo files

如果我执行 a sudo cp /etc/foo.txt ~/foo.txt,则以root所有者身份创建新文件。

现在,除了使用最后两个命令(ls为了阐明用例)之外,我看不出其他办法:

belmin@server1$ ls /etc/foo.txt
>  -rw------- 1 root root 3848 Mar  6 20:35 /etc/foo.txt
>
belmin@server1$ sudo cp /etc/foo.txt ~/foo.txt
belmin@server1$ sudo chown belmin: $_
Run Code Online (Sandbox Code Playgroud)

我会选择:

  1. 在一个sudo命令中完成它。
  2. 不必指定我当前的用户(也许使用变量?)。

Jen*_*y D 32

使用install代替cp

sudo install -o belmin /etc/foo.txt ~/foo.txt
Run Code Online (Sandbox Code Playgroud)

  • @BelminFernandez:为了满足您的第二个偏好:`sudo install -o "$USER" /etc/foo.txt ~/foo.txt` (4认同)

l0b*_*0b0 14

POSIX兼容的cp,你可以sudo cp -p foo bar保存下列文件元数据复制时:

  • 访问时间
  • 修改时间
  • 用户身份
  • 组ID
  • 模式

如果你想设置不同的用户,JennyD 的解决方案是最好的。

  • 我认为运行 sudo 的人不拥有原始文件,否则他们就不需要使用 sudo。 (4认同)
  • 这仅在原始文件归目标用户所有时才有效。 (2认同)
  • 理论上有可能文件归目标用户所有,但位于目标用户无权进入的目录中。但这不太可能:-) (2认同)

Sté*_*las 8

如果你这样做:

sudo cat /etc/foo.txt > ~/foo.txt
Run Code Online (Sandbox Code Playgroud)

然后,~/foo.txt将开放由壳为(所以请与您的凭据创建的),然后sudo将其标准输出重定向到被执行。

最后,该文件将归您所有。

这种方法也有助于限制root. 在这里,root只使用他的权限 open /etc/foo.txt,它不会做可能有害的事情(打开一个文件进行写入,如果~/foo.txt是符号链接可能会产生不良后果)。

  • 这假设用户可以写入目标目录。 (2认同)