Linux 사용자 이름은 왜 숫자로 시작할 수 없나요?

Linux 사용자 이름은 왜 숫자로 시작할 수 없나요?

기술적인 이유가 있나요? 이것은 Linux 또는 Unix의 초기 유물입니까? 그렇다면, 계속 유지될 이유가 있나요?

답변1

일부 명령(예: chown)은 사용자 이름 또는 숫자 사용자 ID를 허용할 수 있으므로 모든 숫자 사용자 이름을 허용하면 해당 명령이 중단됩니다.

이름이 숫자로 시작하고 일부 문자를 포함하도록 허용하는 규칙은 노력할 가치가 없는 것으로 간주될 수 있으며 대신 이름이 알파벳 문자로 시작하도록 요구합니다.

편집하다:

이 경우에는 일부 배포판이 이 제한을 초과한 것으로 다른 답변에서 나타납니다.GNU 핵심 유틸리티 문서:

POSIX에서는 먼저 지정된 문자열을 이름으로 구문 분석하고, 실패한 경우에만 이를 ID로 해석하기 위해 이러한 명령이 필요합니다.

$ 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 == 루트 사용자). 그러나 그룹/사용자 ID 매개변수 앞에 "+"를 붙여서 이를 정수로 해석하도록 할 수 있습니다.

답변2

다음은 우분투 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

유니코드 U+1F600을 사용하는 것 -

답변3

*Nix 사용자 이름은 일반적으로 유틸리티에서 생성된 32자 문자열입니다 useradd. 당신이 말했듯이 이것은 초기 Unix(기술적으로는 BSD) 표준의 직접적인 결과입니다. FreeBSD 매뉴얼 페이지에 따르면 passwd(5):

로그인 이름은 하이픈(`-')으로 시작할 수 없으며 8비트 문자, 탭, 공백 또는 다음 기호를 포함할 수 없습니다. `,:+&#%^()!@~*?<> =| /"'. 달러 기호(`$')는 Samba에서 마지막 문자로만 사용할 수 있습니다. 콜론은 역사적으로 사용자 데이터베이스에서 필드를 구분하는 데 사용되었기 때문에 어떤 필드에도 콜론(`:')을 포함할 수 없습니다.

일부 *Nix 시스템에서는 사용자 이름에 특수 문자가 나타날 때 모호한 오류가 발생하여 결국 특수 문자가 금지되었습니다. 대부분의 최신 *Nix 시스템에서는 passwd특수 문자 사용자 이름을 지원하기 위해 변경/활용하는 것이 상대적으로 쉽지만 useradd, 대부분의 사람들은 영향이 거의 없고 이전 버전과의 비호환성을 유발하므로 중요하지 않은 변경을 꺼립니다.

편집하다:
Adonis가 말했듯이 실제로 최신 Linux 배포판에서 이 작업을 수행하는 것이 가능하지만 이는 현명하지 않습니다(특히 표준화된 프로그램이나 레거시 프로그램을 접할 경우).

답변4

답변에서 지적했듯이 Linux 사용자 이름할 수 있는모두 디지털입니다. 그러나 이는 많은 소프트웨어 도구(및 인간 시스템 관리자)를 혼란스럽게 하기 때문에 좋지 않은 생각입니다.

이러한 이유로 예를 들어,전체 숫자로 된 사용자 이름과 그룹 이름은 RHEL 7에서 더 이상 사용되지 않으며 RHEL 8에서는 금지됩니다.

8.7.1 shadow-utils전체 숫자 사용자 이름과 그룹 이름은 더 이상 허용되지 않습니다.

그리고 useradd명령은 groupadd사용자 이름과 그룹 이름에 숫자만 포함하는 것을 허용하지 않습니다. 이러한 이름이 허용되지 않는 이유는 사용자 및 그룹 이름은 물론 사용자 및 그룹 ID(숫자)를 사용하는 많은 도구를 혼동시킬 수 있기 때문입니다. 숫자로만 구성된 사용자 및 그룹 이름은 Red Hat Enterprise Linux 7에서 더 이상 사용되지 않으며 이에 대한 지원은 Red Hat Enterprise Linux 8에서 완전히 제거되었습니다.

관련 정보