Так как это было опровергнуто в ответах, каков ваш источник этого утверждения?
10
19
@ l0b0 - за useradd(с shadow-utils 4.2.1) страницы справочника (см. ПРОТЕСТИ ):Usernames must start with a lower case letter or an underscore [...] In regular expression terms: [a-z_][a-z0-9_-]*[$]?
don_crissti
30
@ l0b0 - о, и только потому, что один дистрибутив (известный такими вещами) позволяет, это не означает "он был опровергнут в ответах" . Вопрос помечен linux, а не ubuntu. Попробуйте сделать это на archlinux .
don_crissti
1
@don_crissti Это явно не относится ко всем дистрибутивам Linux, и поэтому было интересно узнать, откуда появилось это ограничение.
10
5
Даже Ubuntu заботится: когда вы устанавливаете с Live CD / Ubiquity ваше имя пользователя «Должно начинаться со строчной буквы»
43Tesseracts
Ответы:
136
Некоторые команды (например chown) могут принимать либо имя пользователя, либо числовой идентификатор пользователя, поэтому использование полностью числовых имен пользователей может нарушить это.
Правило, разрешающее имена, начинающиеся с цифры и содержащие некоторую альфу, вероятно, не стоило усилий; вместо этого есть только требование начать с символа альфа.
Редактировать:
Из других ответов следует, что некоторые дистрибутивы сняли это ограничение; в этом случае, согласно документации GNU Core Utils :
POSIX требует, чтобы эти команды сначала попытались разрешить указанную строку как имя, и только после сбоя, а затем попытались интерпретировать ее как идентификатор.
$ useradd 1000 # on most systems this will fail with:
# useradd: invalid user name '1000'
$ mkdir /home/1000
$ chown -R 1000 /home/1000 # This will first try to map
# to username "1000", but this may easily be misinterpreted.
Добавление пользователя с именем «0» просто вызовет проблемы (UID 0 == пользователь root). Однако обратите внимание, что аргументам идентификатора группы / пользователя может предшествовать знак «+», чтобы заставить их интерпретировать как целое число.
Это единственный пост, который действительно отвечает на вопрос. Вы должны добавить пример , чтобы показать человек , что на Линукс дистрибутивах , которые не имеют привычки калечить вверх по течению кода результата работы useradd 253являетсяuseradd: invalid user name '253'
don_crissti
2
Для записи вот исходный код, если вы хотите добавить его в свой пост.
don_crissti
5
Можете ли вы представить себе возможность путаницы, если имя пользователя 1000 имеет UID 253? Или вообще для числовых имен пользователей, которые не совпадают с UID? Одновременно с группами, конечно.
Джонатан Леффлер
5
У меня есть система LDAP, где некоторые пользователи имеют (числовой) код сотрудника / регистрационный номер в качестве имени пользователя. Я быстро научился канонизировать с идентификаторами пользователей ( chown -R $(id -u $username) ...).
Муру
2
в идеале строка имени пользователя, будь то цифры или буквы, должна быть сопоставлена с UID, и имена всегда ищутся, чтобы определить UID, в отличие от ленивого «это имя состоит из цифр? тогда я буду рассматривать это как удостоверение личности »
Мэтт Уоррен
83
Вот тест на Ubuntu 14.04 с использованием чисел:
root@ubuntu:~# useradd 232
root@ubuntu:~# mkdir /home/232
root@ubuntu:~# chown 232.232 /home/232
root@ubuntu:~# passwd 232
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@ubuntu:~# login
c2 login: 232
Password:
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 4.4.0-22-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information disabled due to load higher than 2.0
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
$
$ whoami
232
и один с использованием Unicode U + 1F600 - 😀
root@c2:~# useradd 😀
root@c2:~# mkdir /home/😀
root@c2:~# chown 😀.😀 /home/😀
root@c2:~# passwd 😀
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@c2:~# login
c2 login: 😀
Password:
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 4.4.0-22-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information disabled due to load higher than 2.0
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
$ whoami
😀
Это, наверное, худшая идея, которая у меня была:
root@c2:~# useradd '&#%^()!@~*?<>=|'
root@c2:~# passwd '&#%^()!@~*?<>=|'
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@c2:~# mkdir '/home/&#%^()!@~*?<>=|'
root@c2:~# chown '&#%^()!@~*?<>=|.&#%^()!@~*?<>=|' '/home/&#%^()!@~*?<>=|'
root@c2:~# login
c2 login: &#%^()!@~*?<>=|
Password:
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 4.4.0-22-generic x86_64)
**** text removed ****
applicable law.
$ whoami
&#%^()!@~*?<>=|
Очевидно, что вы можете добавить такого пользователя, хотя я не уверен, что это хорошая идея в долгосрочной перспективе.
useradd '*'было бы весело - cd /home/*/не сработало бы так, как ожидалось, и кто знает, как будут реагировать другие утилиты при использовании значения $HOMEдля этого пользователя.
Лиам Доусон
9
вау убунту это разрешает? Интересно, что случится, если вы попытаетесь useradd 1000(если у вас уже есть пользователь с UID 1000)
thomas_d_j
8
+1 только за все запрещенные символы!
EKons
3
О, я могу думать о худшем ...
OrangeDog
4
@IsmaelMiguel: Буква \0в / etc / passwd, вероятно, сломает множество программ, которые его анализируют. Но вы, вероятно, не могли бы сначала добавить пользователя с таким именем, используя стандартные инструменты. Системные вызовы вроде mkdir(2)также используют строки с неявной длиной в конце, поэтому вы не можете создавать /home/\0/, потому что этот путь - просто /home.
Питер Кордес
9
Имя пользователя * Nix обычно представляет собой строку длиной 32 символа, созданную утилитой useradd. Это, как вы сказали, прямой результат ранних стандартов Unix (технически BSD). Согласно справочной странице FreeBSD passwd(5):
Имя для входа не должно начинаться с дефиса (`- ') и не может содержать 8-битные символы, символы табуляции или пробелы или любые из следующих символов:`,: + & #% ^ ()! @ ~ *? <> = | / "'. Символ доллара (` $') разрешен только в качестве последнего символа для использования с Samba. Ни одно поле не может содержать двоеточие (`: '), поскольку это исторически использовалось для разделения полей в пользователе база данных.
В некоторых системах * Nix появлялись непонятные ошибки при отображении специальных символов в именах пользователей, поэтому в конечном итоге специальные символы были запрещены. В большинстве современных систем * Nix было бы относительно легко изменить утилиты passwd/ useraddдля поддержки имен пользователей специальных символов, но большинство людей не решаются изменить такую неважную вещь, так как это будет иметь небольшой эффект и приведет к обратной несовместимости.
РЕДАКТИРОВАТЬ:
Как сказал Адонис, на самом деле это возможно сделать в современном дистрибутиве Linux, однако это не рекомендуется (особенно когда сталкиваются со стандартными или устаревшими программами).
Конечно, но в вопросе даже не упоминаются специальные символы. Он спрашивает, почему имена пользователей не могут начинаться с цифр (которые не являются специальными символами).
don_crissti
Конечно, @don_crissti, вы бы предпочли, чтобы я повторно спросил, почему исторически имя пользователя не может начинаться с пробела, а затем спросите отдельно, почему оно исторически не начинается с каждого из символов, а затем спросите & c исторически оканчивается на $? Этот «ответ» не подходит как комментарий, которым он явно является, но содержит полезную информацию, связанную с вопросом.
frumbert
Что подразумевается под 8-битным символом в этом абзаце? IE: Конечно, любые символы ASCII 8-битные?
Мэтт Уоррен
Фэ! /etc/passwdтекстовый файл useradd? тьфу-Тош. Настоящие сисадмины используют vi!
добавлено
1
@MattWarren. ASCII представляет собой 7-битную кодировку
fpmurphy
1
Есть ли техническая причина, почему? Это артефакт с первых дней существования Linux или Unix, и если да, то есть ли причина, почему он сохраняется?
Я не могу придумать техническую причину - исторически это просто ASCII. Как он читается, а затем печатается, находится в руках кодера.
Итак, мы остаемся с историческим человеческим контекстом. Когда я начал заниматься технологиями в 1980 году, мы всегда использовали наше настоящее имя для входа в систему. Обычно имя, фамилия и имя, если не было ограничения по длине. Это было важно, так как ваше имя пользователя использовалось в качестве вашего адреса электронной почты. Тогда никто не отправлял письмо, которое было анонимным. Конечно, были некоторые исключения, я их не помню. В целом, хотя, я считаю, что это так.
И согласно rfc5321 # page-63, нет никаких ограничений на то, чтобы «имя» электронной почты начиналось с цифры. Gmail создаст все числовые имена пользователей. (получите это, они идут быстро).
Поэтому, если есть какой-либо код, который отклоняет имя пользователя, начинающееся с [0-9], то, вероятно, он появился позже, когда какой-то программист подумал: «Почему у вас есть число в качестве имени?». Еще раз, я должен сказать, что вполне может существовать исторический код Unix, который отклонял имя пользователя, начинающееся с цифры. Я просто не видел этого. Ранние таблицы паролей были отредактированы вручную, я, конечно, помню, как часто делал это, даже в начале 90-х годов.
Что касается того, почему он сохраняется, я процитирую stroustrup, C ++ 11FAQ, когда будут доступны новые стандартные библиотеки?
Чтобы сделать проблему более сложной, помните, что невозможно исключить более старые функции, даже если комитет согласен с тем, что они плохие: опыт показывает, что пользователи заставляют каждого разработчика предоставлять устаревшие и запрещенные функции с помощью переключателей совместимости (или по умолчанию) на протяжении десятилетий.
Как указано в ответах, имена пользователей Linux могут быть полностью числовыми. Тем не менее, это плохая идея, так как это может сбить с толку многие программные инструменты (и системные администраторы!).
8.7.1. shadow-utilsбольше не разрешать полностью числовые имена пользователей и групп
useraddИ groupaddкоманда запретить имена пользователей и групп , состоящие исключительно из цифр. Причина, по которой такие имена запрещены, заключается в том, что это может привести к путанице во многих инструментах, работающих с именами пользователей и групп, а также идентификаторами пользователей и групп (которые являются числами). Обратите внимание, что в Red Hat Enterprise Linux 7 полностью числовые имена пользователей и групп устарели, а их поддержка полностью исключена в Red Hat Enterprise Linux 8.
Я не уверен, что назвал бы это технической причиной, но правило сводится к тому, что «имя пользователя должно быть допустимым идентификатором языка программирования». Идентификаторы имеют некоторые приятные свойства из-за их ограниченного синтаксиса: их нельзя принять за числа, даже когда они читают символ за символом, и их не нужно заключать в кавычки при прохождении через анализатор. Короче говоря, они легко распознаются как имена, что сокращает объем работы, необходимой для работы с ними.
Я сомневаюсь, что когда-либо было действительно необходимо запретить имена пользователей, начинающиеся с цифры, но «имя пользователя должно быть идентификатором» - это простое правило, которое было бы совершенно ясно для 100% ранних пользователей Unix.
Если единственное место, где вы вводите свое имя пользователя, находится в приглашении для входа в GUI, то, вероятно, не имеет значения, какие символы оно содержит (исключая нули и такие вещи, как переводы строк, что может привести к сбоям даже в процедуре входа в систему). Но если вы делаете много работы из командной строки, удобство использования имени пользователя, с которым легко работать.
useradd
(сshadow-utils 4.2.1
) страницы справочника (см. ПРОТЕСТИ ):Usernames must start with a lower case letter or an underscore [...] In regular expression terms: [a-z_][a-z0-9_-]*[$]?
linux
, а неubuntu
. Попробуйте сделать это на archlinux .Ответы:
Некоторые команды (например
chown
) могут принимать либо имя пользователя, либо числовой идентификатор пользователя, поэтому использование полностью числовых имен пользователей может нарушить это.Правило, разрешающее имена, начинающиеся с цифры и содержащие некоторую альфу, вероятно, не стоило усилий; вместо этого есть только требование начать с символа альфа.
Редактировать:
Из других ответов следует, что некоторые дистрибутивы сняли это ограничение; в этом случае, согласно документации GNU Core Utils :
Добавление пользователя с именем «0» просто вызовет проблемы (UID 0 == пользователь root). Однако обратите внимание, что аргументам идентификатора группы / пользователя может предшествовать знак «+», чтобы заставить их интерпретировать как целое число.
источник
useradd 253
являетсяuseradd: invalid user name '253'
chown -R $(id -u $username) ...
).Вот тест на Ubuntu 14.04 с использованием чисел:
и один с использованием Unicode U + 1F600 - 😀
Это, наверное, худшая идея, которая у меня была:
Очевидно, что вы можете добавить такого пользователя, хотя я не уверен, что это хорошая идея в долгосрочной перспективе.
источник
useradd '*'
было бы весело -cd /home/*/
не сработало бы так, как ожидалось, и кто знает, как будут реагировать другие утилиты при использовании значения$HOME
для этого пользователя.useradd 1000
(если у вас уже есть пользователь с UID 1000)\0
в / etc / passwd, вероятно, сломает множество программ, которые его анализируют. Но вы, вероятно, не могли бы сначала добавить пользователя с таким именем, используя стандартные инструменты. Системные вызовы вродеmkdir(2)
также используют строки с неявной длиной в конце, поэтому вы не можете создавать/home/\0/
, потому что этот путь - просто/home
.Имя пользователя * Nix обычно представляет собой строку длиной 32 символа, созданную утилитой
useradd
. Это, как вы сказали, прямой результат ранних стандартов Unix (технически BSD). Согласно справочной странице FreeBSDpasswd(5)
:В некоторых системах * Nix появлялись непонятные ошибки при отображении специальных символов в именах пользователей, поэтому в конечном итоге специальные символы были запрещены. В большинстве современных систем * Nix было бы относительно легко изменить утилиты
passwd
/useradd
для поддержки имен пользователей специальных символов, но большинство людей не решаются изменить такую неважную вещь, так как это будет иметь небольшой эффект и приведет к обратной несовместимости.РЕДАКТИРОВАТЬ:
Как сказал Адонис, на самом деле это возможно сделать в современном дистрибутиве Linux, однако это не рекомендуется (особенно когда сталкиваются со стандартными или устаревшими программами).
источник
/etc/passwd
текстовый файлuseradd
? тьфу-Тош. Настоящие сисадмины используютvi
!Я не могу придумать техническую причину - исторически это просто ASCII. Как он читается, а затем печатается, находится в руках кодера.
Unix-история-репо / USR / SRC / ЦМД / passwd.c
Так как я провел некоторое время, просматривая страницы справочника архива (например, 1BSD был первым дистрибутивом программного обеспечения Беркли Билла Джоя ), я не видел ничего, что определяло бы имена пользователей. Это не значит, что его не существует, но я его не видел.
Итак, мы остаемся с историческим человеческим контекстом. Когда я начал заниматься технологиями в 1980 году, мы всегда использовали наше настоящее имя для входа в систему. Обычно имя, фамилия и имя, если не было ограничения по длине. Это было важно, так как ваше имя пользователя использовалось в качестве вашего адреса электронной почты. Тогда никто не отправлял письмо, которое было анонимным. Конечно, были некоторые исключения, я их не помню. В целом, хотя, я считаю, что это так.
И согласно rfc5321 # page-63, нет никаких ограничений на то, чтобы «имя» электронной почты начиналось с цифры. Gmail создаст все числовые имена пользователей. (получите это, они идут быстро).
Поэтому, если есть какой-либо код, который отклоняет имя пользователя, начинающееся с [0-9], то, вероятно, он появился позже, когда какой-то программист подумал: «Почему у вас есть число в качестве имени?». Еще раз, я должен сказать, что вполне может существовать исторический код Unix, который отклонял имя пользователя, начинающееся с цифры. Я просто не видел этого. Ранние таблицы паролей были отредактированы вручную, я, конечно, помню, как часто делал это, даже в начале 90-х годов.
Что касается того, почему он сохраняется, я процитирую stroustrup, C ++ 11FAQ, когда будут доступны новые стандартные библиотеки?
источник
Как указано в ответах, имена пользователей Linux могут быть полностью числовыми. Тем не менее, это плохая идея, так как это может сбить с толку многие программные инструменты (и системные администраторы!).
По этой причине, например, полностью числовые имена пользователей и имена групп не рекомендуются в RHEL 7 и запрещены в RHEL 8:
источник
Я не уверен, что назвал бы это технической причиной, но правило сводится к тому, что «имя пользователя должно быть допустимым идентификатором языка программирования». Идентификаторы имеют некоторые приятные свойства из-за их ограниченного синтаксиса: их нельзя принять за числа, даже когда они читают символ за символом, и их не нужно заключать в кавычки при прохождении через анализатор. Короче говоря, они легко распознаются как имена, что сокращает объем работы, необходимой для работы с ними.
Я сомневаюсь, что когда-либо было действительно необходимо запретить имена пользователей, начинающиеся с цифры, но «имя пользователя должно быть идентификатором» - это простое правило, которое было бы совершенно ясно для 100% ранних пользователей Unix.
Если единственное место, где вы вводите свое имя пользователя, находится в приглашении для входа в GUI, то, вероятно, не имеет значения, какие символы оно содержит (исключая нули и такие вещи, как переводы строк, что может привести к сбоям даже в процедуре входа в систему). Но если вы делаете много работы из командной строки, удобство использования имени пользователя, с которым легко работать.
источник