
Я монтирую жесткий диск к своему компьютеру Ubuntu под /media/newhdd
, которыйдомонтирование имеет следующие разрешения:
drwxr-xr-x 2 root team 4096 Jan 19 17:26 newhdd
drwxr-x---+ 2 root root 4096 May 14 2020 oem
Я уже сменил группу на team
группу.ПослеОднако, по мере того, как все больше и больше нарастает, я вижу следующее:
drwx------ 4 29999 29999 4096 Jan 19 19:48 newhdd
drwxr-x---+ 2 root root 4096 May 14 2020 oem
Что означают эти цифры? И почему изменились разрешения?
Информация: Я монтирую с помощью sudo mount /dev/sda /media/newhdd
.
решение1
Нет, разрешения не меняются. Ваше локальное распределение UID/GID не соответствует распределению системы, где были установлены разрешения, и просто ваша система отображает их по-другому. Но разрешения на диске по-прежнему верны, если вы переместили хранилище в систему, где они были установлены, оно отобразит их так, как и предполагалось.
Каждая система имеет свой собственный набор идентификаторов. В общем случае они выделяются по мере необходимости и когда это необходимо. Например, когда вы создаете группу, система выделяет для нее GID и сохраняет выделение в /etc/group
(по умолчанию). Аналогично, когда вы создаете пользователя, система выделяет для него UID и сохраняет выделение в /etc/passwd
.
Системные учетные записи не сильно отличаются. Между дистрибутивами есть различия; например, некоторые дистрибутивы могут "статически выделять" некоторые UID и GID для определенных приложений; эти выделения не сохраняются при установке системы, но когда вы устанавливаете программное обеспечение, которому требуется собственная учетная запись, установщик создает для них учетные записи с предопределенными UID/GID. Другие дистрибутивы (Gentoo) не делают даже этого; UID и GID выделяются заново при первой установке программного обеспечения, если это необходимо.
Есть некоторые настройки, которые определяют пулы, из которых берутся эти UID и GID для распределения. Эти строки в /etc/adduser.conf
являются одними из них, но есть и другие; например, в моей системе нет /etc/adduser.conf, но у меня есть /etc/default/useradd
. Вы можете переопределить это при создании учетной записи, указав конкретные ID, например: useradd -u 1100 -G users newuser
создаст пользователя с UID 1100, независимо от любых настроенных диапазонов.
Итак, какие имена соответствуют каким UID/GID, почти всегда отличается от одной системы к другой. Это сильно зависит от истории системы: какой это дистрибутив; какое программное обеспечение установлено и в каком порядке; какие пользователи созданы и в каком порядке и т. д. Единственная правда, которую мы можем сказать о "любой" системе Linux, заключается в том, что у пользователя root
всегда есть UID 0
, а у группы root
всегда есть GID 0
.
Например, если я установлю две одинаковые Ubuntu, а затем создам в одной системе сначала пользователя «alice», у нее может быть UID 1000, затем «bob», у которого, вероятно, будет UID 1001; в другой системе я создам сначала «bob», который получит UID 1000, а затем «alice», она получит UID 1001.
С другой стороны, файловые системы не хранят имена пользователей и групп; они хранят числа, UID и GID. Расширяя предыдущий пример, если я создам файл на первой системе и сделаю его владельцем "alice", ее UID 1000 будет записан в метаданные файловой системы. Если я перенесу носитель на вторую машину и получу доступ к этому файлу, его владельцем будет "bob", потому что файл имеет UID 1000 в метаданных, а на второй машине этот UID соответствует "bob".
Что делать, если UID не выделен? Не волнуйтесь, сама ОС не беспокоится об именах, она использует только ID, а имена транслируются только пространством пользователя. Инструменты пространства пользователя обычно просто показывают «цифровые» ID, когда для них нет выделения в /etc/passwd
и /etc/group
.
Системы Windows не сильно отличаются. У них есть один "доменный номер" идентификаторов, называемых RID, из него берутся как идентификаторы безопасности пользователей, так и групп (Linux считает UID и GID отдельно). Первый локальный пользователь часто имеет RID 500. RID в сочетании с "доменным номером" дают SID, которые записываются в метаданные файловой системы. Распределения хранятся в базе данных SAM.
Это приводит к очень важной проблеме: как централизованно управлять набором компьютеров, чтобы хранилище было переносимым и т. д.? Для этого есть несколько решений. Одно, безусловно, наиболее используемое, заключается в наличии центральной системы, которая управляет выделениями, и все присоединенные системы запрашивают выделения из нее. В локальных системах эти выделенные идентификаторы часто сопоставляются с некоторым «доменом идентификаторов». Например, MS Active Directory всегда имеет контроллер домена с активной ролью FSMO RID master
; это именно та система, которая управляет выделениями в домене. (Если вы подумаете об этом подробнее, вы получитепочемуЭта роль была сделана FSMO, ролью "единой главной операции".) Поэтому разрешения файлов, принадлежащих домену, будут отображаться правильно на всех системах в домене, даже если носитель перемещается между компьютерами. Но если носитель перемещается за пределы домена, возникнут все описанные эффекты нарушенного сопоставления. Система Linux также может использовать центральное распределение, есть NIS, или даже контроллер MS AD может выделять UID/GID для систем Linux, объединенных в домен AD.
решение2
Похоже, это динамически генерируемый UID, и он выбирает верхний предел для таких идентификаторов из /etc/adduser.conf
:
# FIRST_[GU]ID to LAST_[GU]ID inclusive is the range of UIDs of dynamically
# allocated user accounts/groups.
FIRST_UID=1000
LAST_UID=29999