3

Сценарий: файл, созданный на компьютере A (пользователь A), который принимает права доступа к файлу как пользователь A в правах доступа к файлу, затем передается на компьютер B с другим пользователем (пользователь 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?

Я создал файл testfile.txt с правами доступа 755 на компьютере A (пользователь A), чтобы сравнить разрешения и права владения этим файлом до и после того, как я перенес его с помощью scp с компьютера A на B. Я заметил, как мой оригинальный файл теперь на компьютере B , имеет идентификатор пользователя как userB вместо userA [где файл был создан].

Компьютер A, имеющий «userA»

rwx-rxr-- userA testfile.txt

Компьютер B, имеющий «userB»

rwx-rxr-- userB testfile.txt

Я подумал и хотел сделать файл доступным только для чтения, записи и выполнения владельцем (я думал, что это будет пользователь с компьютера, на котором я создал файл).

Спасибо! Я новичок в этом!

3 ответа3

1

Общая форма для scp при локальном копировании на удаленный:

scp localfile username@remotehost:/some/remote/directory

В этом случае вы сообщаете scp, что хотите войти в систему как username на удаленной системе, и это имя пользователя, с которым будет происходить запись. Скорее всего, в вашем примере вы использовали userB, когда просматривали файл на компьютере B.

Если вы копировали удаленный файл на локальный хост, например:

scp username@remotehost:/some/remote/file /some/local/directory

В этом случае вы входите в систему как username в удаленную систему, а затем записываете его локально как пользователь, под которым вы запускаете команду scp. В этом примере будет скопирован файл с удаленного хоста в систему, в которой вы работаете, в качестве пользователя, в котором вы в данный момент вошли (поскольку запись будет выполняться пользователем, вошедшим в данный момент). Это не повлияет на что-либо на удаленном хосте, так как вы только читаете файл оттуда и копируете его на локальный хост. Поскольку вы можете читать удаленный файл, локальный файл должен иметь для вас права на запись, так как вы пишете файл локально.

Другими словами, владелец файла обычно совпадает с автором файла. Итак, если вы вошли в систему как пользователь А и написали файл, владельцем будет пользователь А. Более простой пример может быть примерно таким:

user@server:~$ ls -l /var/log/syslog
-rw-r----- 1 syslog adm 6615 Apr  9 17:09 /var/log/syslog  

Обратите внимание, что этот файл принадлежит системному журналу, но он доступен для чтения любому пользователю группы adm, к которому принадлежит пользователь. Затем, если мы скопируем файл в домашний каталог пользователя (~/):

user@server:~$ cp /var/log/syslog ~/
user@server:~$ ls -l ./syslog
-rw-r----- 1 user user 6615 Apr  9 17:10 ./syslog

Обратите внимание, что скопированная версия файла теперь принадлежит user . scp делает то же самое, за исключением того, что источник или назначение могут включать в себя вход другого пользователя в другую систему.

Обратите внимание, что разрешения отслеживаются с помощью идентификатора пользователя, числового представления пользователя. Вы можете увидеть свой текущий UID с помощью команды id . Как правило, для отдельных систем идентификаторы UID не должны совпадать с системой, поскольку учетные записи не являются общими (если вы не используете LDAP или аналогичный). Я считаю, что традиционно 0 - это root, UID менее 1000 зарезервированы для системных учетных записей (например, почты, новостей, bin, daemon и т.д.), И что обычные пользователи начинают с 1000. Насколько мне известно, обычные пользовательские идентификаторы назначаются последовательно, поэтому, если вы создали три учетные записи, они, вероятно, будут 1000, 1001 и 1002.

Возвращаясь к исходному вопросу о том, как отправить файл только для чтения, вы должны убедиться, что читатель в удаленной системе не имеет того же UID, что и владелец файла. т.е. если вы (userA) готовили файл для userB, вы могли бы сделать что-то вроде:

scp localfile userA@remotehost:/some/remote/directory

В этом случае владельцем файла будет пользователь A (и мы знаем, что пользователь userA существует в удаленной системе, так как именно в него мы вошли), и пользователь B не будет иметь прав на запись (при условии, что файл изначально был 755). ). Изменить: вам может понадобиться -p, чтобы сохранить разрешения?

Конечно, если пользователь B имеет права root или sudo, он сможет сделать файл доступным для записи независимо от того, что вы делаете.

0

Когда вы переносите файл из источника в место назначения, разрешения и собственно владение зависят от параметров передачи. Как сказал @ernie, право собственности зависит от того, как вы передадите файл.

Разрешения зависят от umask файла.

Для старых школьных FTP-серверов umask обычно устанавливается в конфигурации FTP-сервера. Для SFTP-серверов (cp over SSH или scp)необходимо настроить плагины PAM для ssh в соответствии с этим ответом при сбое сервера.

0

Да.

Все зависит от того, кто создает файл в месте назначения. Попробуй это:

$ touch some_file
$ ls -l some_file
-rw-r--r-- 1 userA userA 0 Apr 9 17:44 some_file
$ ls -ln some_file
-rw-r--r-- 1 501 501 0 Apr 9 17:44 some_file

Так что в моем примере числовой идентификатор пользователя А равен 501.

Теперь перенесите его, войдя в удаленную систему как userB:

$ scp some_file userB@computerB:
$ ssh userB@computerB ls -l some_file
-rw-r--r-- 1 userB users 0 Apr 9 17:50 some_file
$ ssh userB@computerB ls -l some_file
-rw-r--r-- 1 1743 20 0 Apr 9 17:50 some_file

Как вы видите здесь, userB создал файл, а userB имеет числовой uid 1743. Смотрите также, как изменилась метка времени?

Это стандартное поведение scp. Вы можете сохранить атрибуты, используя опцию "-p" в scp. Это сохраняет только метки времени и разрешения - и, что важно, не собственность. Это может быть именно то, что вы ищете:

$ scp -p some_file userB@computerB:
$ ssh userB@computerB ls -l some_file
-rw-r--r-- 1 userB users 0 Apr 9 17:44 some_file
$ ssh userB@computerB ls -l some_file
-rw-r--r-- 1 1743 20 0 Apr 9 17:44 some_file

Обратите внимание, что помимо scp, существует много разных способов создания файлов на удаленных машинах - NFS, FTP, WebDAV ... они будут вести себя по-разному, но так же предсказуемо. Давайте не будем увлекаться, хотя - вы спросили о SCP.

(ОТМЕТЬТЕ, вы фактически создали файл с 754 разрешениями! rwx = 111 = 7, rx = 101 = 5, r - = 100 = 4 - видите, r, w и x - биты в восьмеричном слове, где r = 4, w = 2, x = 1. Вот почему вы увидите ссылки на восьмеричное в отношении разрешений. Спасибо Эрни за исправление!)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .