Всегда ли будет пара одинаковых UID и GID?

11

Я должен изменить chmodвладельца файла / каталога, используя. Я знаю только имя пользователя владельца, но хочу изменить имя группы по умолчанию одновременно. На данном этапе название группы не определено, поэтому я ставлю так же, как имя пользователя

chown -R username:username path_to_dir

Команда может выполняться для разных систем / пользователей, поэтому я обеспокоен тем, будет ли в linux всегда указана пара имя пользователя (пользователь): имя пользователя (группа) ИЛИ в какой-то момент это имя группы по умолчанию может вызвать ошибку.

Хотя я начал искать GID от пользователя принадлежит

id username | tr '(=)' ':' | awk -F: '{print $3}

Но для знания я хочу знать. До настоящего времени, за /etc/passwd /etc/groupsисключением нескольких пользователей, таких как «shutdown, halt, sync, opeartor», все пользователи также были перечислены в группах.

РЕДАКТИРОВАТЬ 1: id -gn имя пользователя также хороший вариант

Akaks
источник
3
Во втором примере вы искали id -g username?
user1686
1
Или id -gn usernameкоторый печатает имя вместо идентификатора.
Кристиан Чиупиту
В Linux также есть много «групп устройств» - например. диск, mem, kmem, аудио, видео и т. д., у которых нет соответствующего пользователя.
Баард Копперуд

Ответы:

20

Нет гарантии, что groupname = usernameбудет существовать.

Наиболее распространенным сценарием является то, что использование системными администраторами в Linux создает нового пользователя локально в системе без явной спецификации для группы, что означает, что группа будет создана по умолчанию так же, как имя пользователя, и назначит пользователя для GID по умолчанию для вновь созданной группы.

Это не означает, что другой системный администратор будет следовать этой процедуре, и если вы добавите в сочетание другие службы именования, такие как NIS или LDAP, группа, назначенная по умолчанию, вероятно, будет отличаться от нового GID с именем группы, совпадающим с именем пользователя.

Так что не стоит полагаться на то, что username = groupname

Карлсон
источник
Это также может зависеть не только от политики локального администратора, но и от инструментов, включенных в различные дистрибутивы. Многие сайты просто примут значения по умолчанию, используемые предоставленными инструментами. Хотя большинство дистрибутивов, которые я использовал на протяжении многих лет, поставляются со useraddсценарием, который по умолчанию создает группу с одинаковым именем, не все имеют. В прошлый раз, когда я использовал его (много-много лет назад), сценарий создания пользователей в slackware по умолчанию имел одну группу, usersчленом которой были все пользователи. docs.slackware.com/slackbook:users предполагает, что это все еще может иметь место.
Жюль
11

Хотя идиома частной группы пользователей часто используется в современных системах Linux, * nix фактически не требует уникальной первичной группы для каждого пользователя, и вполне возможно, что несколько учетных записей пользователей совместно используют общую первичную группу, такую ​​как usersили staff.

Даже в тех случаях, когда применяется идиома UPG, нет особой причины, по которой числовой GID конкретной UPG должен быть равен UID владельца, хотя большинство инструментов создания учетной записи будут пытаться назначать UID и GID по порядку, если они имеется в наличии. Идентификаторы могут легко выйти из-под контроля, если необходимо обеспечить согласованность пользователей и / или групп в нескольких системах (например, для размещения уже существующих общих ресурсов NFS).

steeldriver
источник
6

Как указал Рамеш по умолчанию, UID и GID одинаковы для обычных пользователей. Однако это не всегда так, поэтому вы не должны делать такое предположение, поскольку это может нанести ущерб вашей системе. Присвоение прав доступа к файлам / папкам для неправильной группы несколько грязно, не так ли?

Итак, короткий ответ: нет, UID не всегда равен GID. Тем не менее, /etc/passwdсодержит UID и GID группы по умолчанию в одной строке, поэтому их довольно легко извлечь.

Erathiel
источник
«по умолчанию UID и GID равны для обычных пользователей» - на самом деле, это утверждение верно только в том случае, если вы добавляете «в некоторых популярных дистрибутивах Linux». Да, Ubuntu и соавт. сделать это таким образом, но я бы посчитал, что общая группа «пользователи» больше по умолчанию.
Jstarek
Да, если мы стремимся быть точными на 100%, то вы правы. Возможно, нам понадобится добавить еще дюжину различных «если», чтобы никогда не пропустить ни одного исключения. Все мои дистрибутивы на основе Debian (LMDE, Crunchbang, чистый Debian) ведут себя так же, как и один CentOS 6.5 у меня. Имейте в виду, что, поскольку мне не нужно добавлять огромное количество пользователей, которых я склонен использовать, adduserа не заданы useraddзначения по умолчанию /etc/adduser.conf, USERGROUPS=yesкоторые создают группу для каждого нового пользователя. Эти группы обычно (хотя и не всегда) имеют тот же GID, что и UID пользователя, для которого они были созданы.
Эратиэль
2

По этой ссылке я вижу информацию ниже.

Идентификатор пользователя (UID) - это уникальное положительное целое число, назначаемое Unix-подобной операционной системой каждому пользователю. Каждый пользователь идентифицируется в системе по его UID, а имена пользователей обычно используются только как интерфейс для людей.

UID хранятся вместе с соответствующими именами пользователей и другой пользовательской информацией в /etc/passwdфайле, который можно прочитать с помощью команды cat следующим образом:

cat /etc/passwd

Третье поле содержит UID, а четвертое поле содержит идентификатор группы (GID), который по умолчанию равен UID для всех обычных пользователей.

РЕДАКТИРОВАТЬ

Однако, как указывает @Karlson, неверно, что UID будет равен GID по умолчанию.

Это утверждение верно только в том случае, если никакие обычные группы не добавляются отдельно и никакие группы не указываются явно при создании любого пользователя . По умолчанию gid для следующего добавленного пользователя = max(gid) + 1. Нет никакой корреляции между UID и GID, требуемой любой системой * NIX, в некоторых случаях они просто совпадают.

Больше ссылок

http://www.thegeekstuff.com/2009/06/useradd-adduser-newuser-how-to-create-linux-users

Рамеш
источник
Последнее утверждение полностью ложно. UID = GID только в том случае, когда новый пользователь создается в локальной системе, а GID явно не назначен существующей группе.
Карлсон
Нет, это не совсем неверно, так как четко сказано «по умолчанию». Некоторое разъяснение будет высоко ценится здесь.
Эратиэль
1
@Erathiel По умолчанию GID равен GID, назначенному при создании пользователя. Если пользователь создан локально и без указания GID в -gфлаге useraddпрограммы, создаст для вас группу и, если не произошел сдвиг GID, он будет = UID. Однако, если метод создания неизвестен, вы не можете полагаться на тот факт, что это будет иметь место:uid=123456(ME) gid=777(ABC) groups=777(ABC)
Карлсон
В некоторых системах useradd также создает группу с тем же именем для учетной записи. Зависит от вкуса Linux.
Пит
@ Карлсон, я никогда не упоминал, что это всегда будет равным. Четко указано, что по умолчанию он равен UID для всех обычных пользователей .
Рамеш