【问题标题】:scp file not setting correct ownerscp 文件未设置正确的所有者
【发布时间】:2021-11-12 23:46:18
【问题描述】:

SCP 在设置文件权限时是否有问题或我的服务器配置错误?

用例:

我要编辑的服务器上有一个名为“importantFile.txt”的文件。该文件的所有者和组为“master”:

ls -l importantFile.txt:
-rw-rw-r--  1 master master     7 Mar 18 08:11 importantFile.txt

我被称为“奴隶”,但幸运的是,我在“主人”组中,所以我可以根据需要编辑文件。但是,我是一个懒惰的奴隶,懒得在服务器上编辑文件,我更愿意在我的本地机器上编辑文件并将其 SCP 到服务器:

echo "bored slave info" > importantFile.txt
scp importantFile.txt slave@theServerAddress:/pathToFile/importantFile.txt

如果我这样做,服务器上的文件内容上传正常,文件的时间戳会更新,但文件的权限不会改变,文件仍归“master”所有。这是一个问题,因为如果“奴隶”上传了不良内容,没有人会知道是“奴隶”造成了问题,“主人”会看起来很内疚。

也许我必须设置一个 umask?如果是在哪里?我尝试了 .bash_profile 但没有成功,并且在 Google 上没有找到任何关于 /etc/ssh/sshd_config 中的 umask 的信息。

【问题讨论】:

  • 与编程无关?
  • 这不是一个编程问题,真的。但这完全符合预期;仅仅因为您写入文件并不意味着您现在拥有它。

标签: linux ssh file-permissions scp umask


【解决方案1】:

这对 scp 没什么特别的 - 尝试以 slave 身份登录服务器,并使用您最喜欢的文本编辑器编辑文件...您会发现发生相同的行为...写入文件不会使您成为文件的所有者。


例子:

作为根

#cd /tmp
#mkdir fubar
#chgrp vboxusers fubar
#cd fubar/
#touch testfile
#chgrp vboxusers testfile 
#chmod g+w . testfile
#ls -al
total 16
drwxrwxr-x  2 root vboxusers  4096 2009-03-19 10:30 .
drwxrwxrwt 15 root root      12288 2009-03-19 10:29 ..
-rw-rw-r--  1 root vboxusers     0 2009-03-19 10:30 testfile
#echo foo > testfile 
#ls -al
total 20
drwxrwxr-x  2 root vboxusers  4096 2009-03-19 10:30 .
drwxrwxrwt 15 root root      12288 2009-03-19 10:29 ..
-rw-rw-r--  1 root vboxusers     4 2009-03-19 10:30 testfile

作为用户(在 vboxusers 组中)

>cd /tmp/fubar
>ls -al
total 20
drwxrwxr-x  2 root vboxusers  4096 2009-03-19 10:30 .
drwxrwxrwt 15 root root      12288 2009-03-19 10:29 ..
-rw-rw-r--  1 root vboxusers     4 2009-03-19 10:30 testfile
>echo bar >> testfile 
>ls -al
total 20
drwxrwxr-x  2 root vboxusers  4096 2009-03-19 10:30 .
drwxrwxrwt 15 root root      12288 2009-03-19 10:29 ..
-rw-rw-r--  1 root vboxusers     8 2009-03-19 10:31 testfile
>vim testfile
>ls -al
total 20
drwxrwxr-x  2 root vboxusers  4096 2009-03-19 10:31 .
drwxrwxrwt 15 root root      12288 2009-03-19 10:31 ..
-rw-rw-r--  1 root vboxusers    12 2009-03-19 10:31 testfile
>cat testfile 
foo
bar
baz

【讨论】:

  • 我确实尝试过这个,我发现写入文件确实使我成为文件的所有者(和组)。实际上,保持原始文件组相同的唯一方法是更改​​父目录中的“set-groupID”标志(find . -type d -exec chmod g+s {} \;
  • 写入新文件?还是写入现有文件?
  • 我通过您的有用示例进行了工作,并找到了与您相同的结果。我意识到我最初的错误,而不是使用“echo blah > testfile”编辑文件的内容,我使用的是 emacs,而且似乎 emacs 确实改变了文件所有权。我的错误 - 非常感谢您的回答。
  • 您确实说过“使用您最喜欢的文本编辑器”! :-) - 也许 Emacs 不应该是我的最爱!大声笑。
【解决方案2】:

您必须删除文件才能覆盖它。您是否能够做到这一点取决于目录的权限和所有权。劫持已经存在的文件的所有权是不可能的。您拥有的写入权限仅适用于文件的内容。

【讨论】:

    【解决方案3】:

    您似乎可以通过 backup-by-copying-when-mismatch 变量配置 Emacs 如何处理此问题(请参阅 Emacs 手册或在 Emacs 中键入 C-h-v backup-by-copying-when-mismatch)。

    我实际上为此提交了bug report,因为我认为这是 Tramp 中的一个错误。

    【讨论】:

    • 我认为这个答案作为对您所指答案的评论更有意义?即#661410
    【解决方案4】:

    我误解了文件的工作方式,修改文件内容不会改变所有权或组。

    为什么会出现混乱? EMACS - 每当我编辑文件时,我都在使用 Emacs,而 Emacs 确实会将所有者和组更改为当前用户。它这样做是因为它在保存时通过将“文件名”移动到“文件名~”并创建一个名为“文件名”的新文件来制作备份文件 - 因为它是一个新文件,它具有当前用户的文件权限。我猜这是1up to VI的粉丝?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      • 2018-02-18
      • 2016-10-25
      相关资源
      最近更新 更多