В / etc / group что означает второе поле?

18

Пример /etc/groupфайла содержит следующие записи:

root:*:0:
adm:!:4:logcheck
antoine:x:1000:

Страницы руководства, которые я прочитал (Debian & OSX), говорят, что второе поле - это сохранение пароля группы. Поскольку они используются редко, *в xних обычно ставится звездочка или знак, а не остается пустым.

Страница shadowman также говорит, что это второе поле должно хранить результат cryptфункции. И если сохранен недопустимый результат (например, *или !), это означает, что пароль не может использоваться в качестве метода аутентификации.

Это верно и для groupфайла? Почему в моем groupфайле 3 разных символа имеют одинаковое значение? Могу ли я смело все поменять на *?

Tonin
источник
Что бы вы сделали, изменив их все *?
Иордания
Я вижу только то, !что используется для одной группы на одном сервере из 10+, которыми я сейчас управляю. Для простоты некоторых проверочных скриптов, всегда имеющих один и тот же символ, все прояснилось бы. Ну, если это действительно означает то же самое, конечно.
Тонин

Ответы:

28

Вы думаете , что !, *или xимеет особое значение здесь, и, следовательно , опасаясь , что там могут быть некоторые различия между ними.

Дело в том, что эти персонажи выбраны просто потому, что они выделяются, по крайней мере, на западные глаза. Эти символы обозначают пропущенное значение, либо исключение, либо предупреждение. Вы можете поставить boogaboogaздесь и получить точно такой же эффект.

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

Хотя нет никакой разницы между этими символами с точки зрения ядра ОС, существуют некоторые соглашения:

  • Когда программа Linux pwconv(8)видит x, это означает, что «я уже переместил этот хэш общедоступного пароля в файл теневого пароля».

    Это не важный случай на практике, потому что дни преобразований в (или, черт возьми, вам, из ) теневых паролей уже позади.

  • Если вы используете usermod -Lили passwd -lдля блокировки пользователя, это !имеет особое значение, /etc/shadowпотому что это соглашение «разбить этот хеш, чтобы он больше не соответствовал».

    Добавление любого другого символа в сохраненный хеш также нарушит его. Нарушив это соглашение только предотвращает usermod -Uили passwd -uот отпирания логин пользователя. Точно так же верно, поскольку вы заблокировали его вручную, добавив поддельный символ, вы можете разблокировать его вручную, удалив его.

    Однако это все пустяки по этому вопросу. Там нет groupmod -Lили gpasswd -l, следовательно, нет !соглашения в /etc/group.

    Более мелочь: если вы которые собираетесь пользователь блокировки учетных записей вручную, вы должны держаться подальше от [A-Za-z0-9/\]множества, так как те правовые символы для хэша. Это одна из причин usermodиспользования !здесь вместо x.

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

Уоррен Янг
источник
Спасибо за ваш очень полный ответ. В настоящее время пишу сценарии для проверки пользователей и групп на моих серверах, я также хотел узнать, можно ли найти в этом поле какой-либо другой символ или последовательность символов. Исходя из вашего ответа и не очень тривиальных деталей, у меня гораздо лучший взгляд на это. Еще раз спасибо!
Тонин
1
Для написания сценариев вам, вероятно, следует звонить getpwent(3)и друзьям. Perl имеет обертки для них в своей стандартной библиотеке, как и любой другой язык сценариев Unix, ориентированный на sysadmin. Если вы используете язык без таких оболочек, это будет хорошим поводом для обмена. :)
Уоррен Янг
Если вы все еще читаете вещи, которым почти шесть лет ... Спасибо за ответ, я вижу некоторые исторические причины, по которым люди используют такие вещи, как xи *для пометки "неиспользуемого" поля пароля. Просто любопытно, что ... страница руководства говорит, что поле вполне можно оставить пустым (то, что в поле базы данных может называться NULL - особенно в Oracle, который определяет NULL и пустую строку как одинаковые). Итак, вернемся к / etc / group: зачем использовать xили !или *вместо того, чтобы просто оставить поле пустым? Два последовательных двоеточия выделяются так же, как и любой из этих персонажей. Не важно - просто любопытно
mathguy
1
@mathguy: пустое поле пароля означает «нет пароля», это не то же самое, что поле пароля, содержащее символ, который никогда не может совпадать с реальным паролем. Так как большинство систем Unix не используют групповые пароли, это различие без разницы, но вы не захотите развивать привычку, которая вызовет у вас проблемы, такие как в большинстве систем Linux » /etc/shadow. Кроме того, я отвергаю идею о том, что двойное двоеточие так же ясно. Быстрый, сколько пустых полей находитесь здесь: ::::::? Теперь сколько: :x:*:!:x:*:? Такое же количество двоеточий, но разные ответы, я верю.
Уоррен Янг