Смотрите исходный код, в частности libmisc/chkname.c. Тень довольно консервативна: имена должны соответствовать регулярному выражению [_a-z][-0-9_a-z]*\$?и иметь GROUP_NAME_MAX_LENGTHдлину не более символов (параметр конфигурации, по умолчанию 16; имена пользователей обычно могут содержать до 32 символов, что зависит от времени компиляции).
Debian очень ослабляет чек. По состоянию на сжатие, все, кроме пробелов и :разрешено. Смотрите ошибку # 264879 и ошибку # 377844 .
POSIX требует разрешения букв любого регистра, цифр и ._-( как в именах файлов ). POSIX не устанавливает никаких ограничений, если вы не заботитесь о переносимости. Ряд рекомендуемых ограничений исходит от использования:
Двоеточия, переводы строки и нули находятся прямо; вы просто не можете использовать их в /etc/passwdили /etc/group.
Имя, состоящее только из цифр, является плохой идеей - chownи chgrpпредполагается, что последовательность цифр рассматривается как имя, если оно находится в базе данных пользователей / групп, но другие приложения могут обрабатывать любое число как числовой идентификатор.
Строго говоря, инициал -или a .в имени пользователя настоятельно не рекомендуется, поскольку многие приложения ожидают возможности передачи $user.$groupво внешнюю утилиту (например chown $user.$group /path/to/file) ¹. А .в названии группы должно вызывать меньше проблем, но я все равно рекомендую против этого.
/ может также вызвать проблемы, потому что некоторые программы ожидают, что смогут использовать имена пользователей в именах файлов.
Любой персонаж, который будет расширяться оболочкой, вероятно, опасен.
Не-ASCII символы должны быть в порядке, если вы не заботитесь о совместном использовании с системами, которые могут использовать разные кодировки.
¹ Все современные реализации ожидают chown $user:$group, но поддержка chown $user.$groupдля обеспечения обратной совместимости, и есть слишком много приложений, которые там проходят точку , чтобы удалить эту поддержку совместимости.
Re chownаргумент: текущий синтаксис, по крайней мере, в GNU coreutils user:group, с точкой принимается только для совместимости. Можно использовать j.smith:j.smith.
user1686
1
@grawity: Это не просто GNU coreutils, но проблема не chownсама, а в существующих сценариях и других программах, которые вызывают chown $user.$groupвместо chown $user:$group- даже если chownреализация пытается сделать правильные вещи, некоторые случаи по своей сути неоднозначны.
Жиль "ТАК - перестань быть злым"
1
Если вы чувствуете себя авантюрным, вы можете редактировать /etc/groupнапрямую и вводить любое название группы, которое вам нравится. Кроме того, это дает дополнительный бонус: когда вы сталкиваетесь с одной из упомянутых проблем @Gilles, вы, возможно, не сможете загрузить редактор, чтобы решить проблему, или даже вообще войти в систему - что даст вам ценный опыт восстановления сломанной системы!
chown
аргумент: текущий синтаксис, по крайней мере, в GNU coreutilsuser:group
, с точкой принимается только для совместимости. Можно использоватьj.smith:j.smith
.chown
сама, а в существующих сценариях и других программах, которые вызываютchown $user.$group
вместоchown $user:$group
- даже еслиchown
реализация пытается сделать правильные вещи, некоторые случаи по своей сути неоднозначны.Если вы чувствуете себя авантюрным, вы можете редактировать
/etc/group
напрямую и вводить любое название группы, которое вам нравится. Кроме того, это дает дополнительный бонус: когда вы сталкиваетесь с одной из упомянутых проблем @Gilles, вы, возможно, не сможете загрузить редактор, чтобы решить проблему, или даже вообще войти в систему - что даст вам ценный опыт восстановления сломанной системы!источник
/etc/gshadow
при добавлении групп. Кроме того, используйте,vigr(8)
а не напрямую редактировать файлы.