在计算机之间传输文件时文件用户所有权是否会发生变化?

bre*_*ics 5 unix permissions file-permissions

场景:在计算机 A ( userA )下创建的文件,在文件权限中将文件所有权作为userA,然后以不同的用户 ( userB )传输到计算机 B ...

Does the ownership of the original file change from the original user (userA) in computer A to the user (userB) of computer B?

How can I create a file that is only writable by me, the creator and owner, and only readable to anyone who might receive that file on other computers?

我在计算机 A ( userA )上创建了一个文件权限为 755 的 testfile.txt,以比较使用 scp 从计算机 A 传输到 B 之前和之后该文件的权限和所有权。我注意到我的原始文件,现在在计算机 B 上, 将用户 ID 设为userB而不是userA [创建文件的位置]。

计算机 A,拥有“userA”

rwx-rxr--userA testfile.txt

计算机 B,拥有“userB”

rwx-rxr--userB testfile.txt

我想并希望使文件只能由所有者(我认为是我在其中创建文件的计算机的用户)可读、可写和可执行。

谢谢!我是新手!

Ric*_*ich 2

是的。

\n\n

这完全取决于谁在目标上创建文件。尝试这个:

\n\n
$ touch some_file\n$ ls -l some_file\n-rw-r--r-- 1 userA userA 0 Apr 9 17:44 some_file\n$ ls -ln some_file\n-rw-r--r-- 1 501 501 0 Apr 9 17:44 some_file\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,在我的示例中,userA 的数字 uid 是 501。

\n\n

现在传输它,以 userB 身份登录到远程系统:

\n\n
$ scp some_file userB@computerB:\n$ ssh userB@computerB ls -l some_file\n-rw-r--r-- 1 userB users 0 Apr 9 17:50 some_file\n$ ssh userB@computerB ls -l some_file\n-rw-r--r-- 1 1743 20 0 Apr 9 17:50 some_file\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如您在此处看到的,userB 创建了该文件,并且 userB 的数字 uid 为 1743。另请参阅时间戳如何更改?

\n\n

这是 scp 的默认行为。您可以通过使用 scp 的“-p”选项来保留属性。这只保留时间戳和权限——重要的是,不保留所有权。这可能正是您正在寻找的:

\n\n
$ scp -p some_file userB@computerB:\n$ ssh userB@computerB ls -l some_file\n-rw-r--r-- 1 userB users 0 Apr 9 17:44 some_file\n$ ssh userB@computerB ls -l some_file\n-rw-r--r-- 1 1743 20 0 Apr 9 17:44 some_file\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意,除了 scp 之外,还有许多不同的方法可以在远程计算机上创建文件 - NFS、FTP、WebDAV...这些方法的行为方式不同,但类似的可预测方式。不过,我们不要得意忘形——你问的是 scp。

\n\n

(注意,您实际上创建了具有 754 权限的文件! rwx=111=7, rx=101=5, r--=100=4 \xe2\x80\x93 你看,r、w 和 x 是八进制词,其中 r=4、w=2、x=1。这就是为什么您会看到与权限相关的八进制引用。感谢 ernie 的更正!)

\n