Я имею в виду, если два пользователя имеют одинаковые имена, как система узнает, что они на самом деле разные пользователи, когда она применяет права доступа к файлам?
Это сомнение пришло мне в голову, когда я собирался переименовать свой дом, /home/old-arch
прежде чем переустанавливать систему (у меня есть /home
собственный раздел, и я не форматирую его), чтобы я мог получить новый, чистый /home/arch
. Я задавался вопросом, даст ли новая система старые разрешения на мои файлы или она распознает меня как другую arch
.
permissions
users
authentication
multiuser
Арк Стентон
источник
источник
ls -n
./home/old-arch
перед переустановкой системы (у меня есть/home
собственный раздел, и я не форматирую его), чтобы у меня тогда был новый, нетронутый/home/arch
. Я задавался вопросом, сохраню ли я те же разрешения для своих файлов, или система распознает меня как другоеarch
.Ответы:
В Unix пользователи идентифицируются по их идентификатору (uid), который должен быть уникальным (в рамках локальной системы). Таким образом, даже если бы можно было создать 2 разных пользователей с одинаковыми именами (adduser в моей системе отказывается это делать, см. Этот вопрос для получения дополнительной информации. Могут ли отдельные учетные записи Unix иметь общее имя пользователя, но иметь отдельные пароли? ), Им потребуется получить разные идентификаторы Хотя вы можете манипулировать файлами, содержащими информацию о пользователях, в соответствии с вашими критериями, каждая программа основана на предположении, что идентификаторы пользователя уникальны в системе, поэтому такие пользователи будут идентичны.
РЕДАКТИРОВАТЬ: другой ответ продемонстрировал случай, когда у вас есть 2 разных имени пользователя для одного и того же UID - хотя, если говорить о системе, это все равно, что иметь два разных имени для одного и того же пользователя, поэтому следует избегать подобных конструкций, если это возможно , если вы не хотите специально создать псевдоним для пользователя в системе (см. вопрос о псевдонимах пользователей unix на serverfault для получения дополнительной информации о технических особенностях).
Система использует эти идентификаторы для обеспечения прав доступа к файлам. Uid и gid (идентификатор группы) пользователя, которому принадлежит файл, записываются в метаданные файла. Если вы перенесете диск на другой компьютер с другим пользователем, который случайно использует один и тот же uid, файл внезапно будет принадлежать этому пользователю в этой системе. Знание того, что идентификаторы uid в системе unix обычно не превышают 16-битные целые числа, показывает, что идентификаторы uid не должны быть глобально уникальными, а уникальными только в области действия локальной системы.
источник
Если вы заставите там существовать несколько пользователей с одним и тем же именем пользователя, то будет несколько записей
/etc/{shadow,passwd}
с одним и тем же именем:Если вы попытаетесь войти в систему как этот пользователь, вы войдете в систему как первое совпадение.
Не будет никакого способа войти как второй пользователь с тем же именем.
Обратите внимание, что Linux отслеживает пользователей по их uid, а не по имени пользователя.
Однако было бы возможно, чтобы два разных имени пользователя были одинаковыми. Рассмотрим другую версию
/etc/passwd
:Обратите внимание, что для обоих имен пользователей
a
иb
третьего столбца 1001 - это идентификатор пользователя / uid. Теперь, если пользовательa
или пользовательb
входит в систему (даже с разными паролями), они оба будут «пользователь 1001» и будут отображаться как пользовательa
с точки зрения ОС. Здесь также первая совпадающая запись является возвращенной (в большинстве случаев):Оба
a
иb
uid,1001
и будут иметь доступ к ресурсам, доступным для uid1001
.источник
useradd
приведут в порядок, если вы попытаетесь добавить существующего пользователя, поэтому под «силой» здесь Энди в значительной степени означает «ручное редактирование»,/etc/passwd
и/etc/shadow
это очень большая территория «Не пытайтесь это дома».setuid
со вторым UID? Или дажеsudo -u '#<uid>' bash
?Если у вас однопользовательская система и вы выполняете переустановку с тем же или похожим дистрибутивом, очень вероятно, что ваша учетная запись пользователя будет иметь такой же идентификатор пользователя и, следовательно, будет одним и тем же пользователем с точки зрения ядра. Например, насколько я помню, пользователь, созданный во время установки, имел UID 1000 в системах Debian. Другие системы могут использовать другое число, но, скорее всего, это будет какое-то целое число небольшого размера, одинаковое при каждой установке.
То же самое относится и к другим пользователям (если они есть), поскольку идентификаторы UID обычно назначаются последовательно. Вероятно, у третьего созданного пользователя будет тот же UID, что и у третьего пользователя, созданного в другой системе. Вам нужно будет предпринять шаги заранее, чтобы убедиться, что идентификаторы не используются повторно в обеих системах.
По тем же причинам, все, что использует NFS, должно иметь общую пользовательскую базу данных.
Но в этом случае, поскольку это ваша личная система, вы можете просто войти в систему как root и запускать,
chown newuser. -R /home/olduser
даже если UID будет другим.(Системы Windows отличаются друг от друга, они генерируют эту длинную строку идентификатора, которая является более случайной. Там, если вы переместите диск на другой компьютер, вы увидите, что файлы принадлежат неизвестному пользователю, и у вас не будет доступа без использования полномочий администратора.
Кроме того, я сказал «вероятно» много в выше. Нельзя сказать, если какой-то дистрибутив ведет себя по-другому. Современный Linux также поддерживает 32-разрядные идентификаторы UID, поэтому, хотя это не так много, как в случае идентификаторов Windows SID, все еще есть место, чтобы использовать, например, случайные идентификаторы UID. Обычно для этого мало что нужно. Предполагается, что системный администратор должен знать, к каким дискам они подключаются к системе, и соответствующим образом регулировать владение файлами или делать точку монтирования недоступной для других пользователей.)
источник
Unix - это очень старая система, эпоха, когда объемы хранения были очень малы, и все - и файлы, и пользователи - были идентифицированы по номерам . Имена пришли позже , после того как хранилище немного выросло.
Достоинство этой системы является то , что имена только этикетки подключили к реальным ручкам: числовые идентификаторы. Таким образом, вы можете иметь несколько имен для одного пользователя (при непосредственном редактировании / etc / passwd), а также несколько имен для одного файла (полезно хранить файл только один раз, но просматривать его в нескольких местах).
Пределы - это система для пользователя и раздел для файла.
Я говорю это только для того, чтобы уточнить, объяснить, почему вещи такие, какие они есть .
Должен признаться, я никогда не пробовал противоположный путь - одно и то же имя с разными идентификаторами - я всегда думал, что это невозможно. Это? Не как ошибка?
источник