В каком кодовом наборе хранится / etc / passwd? Это может быть UTF-8? Какие ограничения накладываются на имена пользователей? - PullRequest
9 голосов
/ 11 сентября 2009

В современной системе Unix или Linux, как узнать, в каком кодовом наборе файл /etc/passwd хранит имена пользователей? Разрешено ли имена пользователей содержать символы с акцентом (от 0x80..0xFF, скажем, до ISO 8859-1 или 8859-15)? Может ли файл /etc/passwd содержать UTF-8? Можете ли вы сказать, что он содержит UTF-8? Как насчет простого текста паролей до того, как они зашифрованы или хешированы?

Очевидно, что если имена пользователей и другие данные ограничены диапазоном 0x00..0x7F (и в любом случае исключают 0x00), то нет разницы между UTF-8, 8859-1 или 8859-15; все присутствующие символы закодированы одинаково.

Кроме того, я использую /etc/passwd в качестве аббревиатуры для чего-то вроде «базы данных идентификации и аутентификации пользователя (иногда называемой службой каталогов) на машине на основе Unix, обычно доступной через PAM и иногда размещаемой на другие машины полностью с локальной, но иногда все же фактически представляют собой файл на локальном жестком диске, обычно называемый /etc/passwd, часто поддерживаемый /etc/shadow ". Я также предполагаю, что эквивалентные вопросы о базе данных группы (часто файл /etc/group) имеют одинаковый ответ.

1 Ответ

4 голосов
/ 11 сентября 2009

Это все ASCII. Но сам пароль никогда не сохраняется - только результаты одностороннего хеширования. Если вам интересно, какие символы могут быть в самом пароле, это зависит от локали, которая будет ограничивать символы, с которыми может работать ваш терминал. Смотри "man locale"

Со справочной страницы BSD:

"Файл паролей ASCII / etc / passwd ..."

Что касается имен пользователей, я могу сказать, что Solaris поддерживает только ASCII. Я не могу говорить за других Unix-en.

"Не каждый объект в Solaris 2 и Solaris 7 может иметь имена, состоящие из произвольных символов. Имена следующих объектов должны состоять из символов ASCII:

* User names, group name, and passwords
* System name ...

"

...