Смотрите исходный код, в частности 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для обеспечения обратной совместимости, и есть слишком много приложений, которые там проходят точку , чтобы удалить эту поддержку совместимости.
chownаргумент: текущий синтаксис, по крайней мере, в GNU coreutilsuser:group, с точкой принимается только для совместимости. Можно использоватьj.smith:j.smith.