web-dev-qa-db-ja.com

Linuxのユーザー名を数字で始めることができないのはなぜですか?

なぜ技術的な理由があるのですか?これはLinuxまたはUnixの初期のアーティファクトですか?ある場合、それが続く理由はありますか?

84
43Tesseracts

一部のコマンド(例:chown)は、ユーザー名または数値のユーザーIDのいずれかを受け入れることができるため、すべて数値のユーザー名を許可すると、それを壊します。

数字で始まり、アルファを含む名前を許可するルールは、おそらく努力する価値がないと考えられていました。代わりに、アルファベット文字で始める必要があります。

編集:

他の応答から、一部のディストリビューションがこの制限を覆しているようです。この場合、 GNU Core Utilsのドキュメント によると:

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 == rootユーザー)。ただし、グループ/ユーザーID引数の前に「+」を付けると、整数として解釈されることに注意してください。

136
thomas_d_j

これは数値を使用した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

ユニコード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
&#%^()!@~*?<>=|

明らかに、そのようなユーザーを追加できますが、長期的にはこれが良いアイデアかどうかはわかりません。

82
adonis

* Nixユーザー名は通常、ユーティリティuseraddによって作成された32文字の長い文字列です。あなたが言ったように、これは初期のUnix(BSD技術的に)標準の直接の結果です。 FreeBSD Man Page passwd(5)によれば:

ログイン名はハイフン( `-')で始めてはならず、8ビット文字、タブ、スペース、または次の記号を含めることはできません:`、:+&#%^()!@〜*?<> = |/"'。ドル記号(` $')は、Sambaで使用する最後の文字としてのみ使用できます。これまでユーザーのフィールドを区切るために使用されてきたため、フィールドにコロン( `: ')を含めることはできません。データベース。

ユーザー名に特殊文字を使用すると、特定の* Nixシステムは不明瞭なエラーをスローするため、特殊文字は最終的に禁止されました。最近のほとんどの* Nixシステムでは、特殊文字のユーザー名をサポートするようにpasswd/useraddユーティリティを変更するのは比較的簡単ですが、ほとんどの人は、このような重要でないものを変更することをためらっています。影響はほとんどなく、後方互換性が失われます。

編集:
Adonisが言ったように、最近のLinuxディストリビューションで実際にこれを行うことは可能ですが、(特に標準化されたプログラムやレガシープログラムに遭遇した場合)推奨されていません。

9
Interesting...

技術的な理由はありますか?これはLinuxまたはUnixの初期のアーティファクトですか?ある場合、それが持続する理由はありますか?

私は技術的な理由を考えることはできません-歴史的に、それは単なるASCIIです。それがどのように読み取られてから入力されるかは、コーダーの手に委ねられています。

nix-history-repo/usr/src/cmd/passwd.c

char *uname;

insist = 0;
if(argc < 2) {
    if ((uname = getlogin()) == NULL) {
        printf ("Usage: passwd user\n");
        goto bex;
    } else {
        printf("Changing password for %s\n", uname);
    }
} else {
    uname = argv[1];
}

アーカイブのマニュアルページの閲覧に時間を費やしてきたので(例: 1BSDはBill Joyの最初のBerkeley Software Distributionでした )、ユーザー名を指定するものは何も見ていません。存在しないと言っているわけではありませんが、見たことはありません。

ですから、私たちは歴史的な人間の文脈に取り残されます。 1980年にテクノロジーを始めたときは、ログインには常に本名を使用していました。長さに制限がない限り、通常は最初のフルネームと最後のフルネーム。ログイン名がメールアドレスとして使用されたため、これは重要でした。当時、匿名のメールは誰も送信していませんでした。もちろん、いくつかの例外があったに違いありませんが、私はそれらを思い出しません。しかし、全体として、私はこれが事実であると信じています。

また、rfc5321#page-63によると、電子メールの「名前」を数字で始めることに関する制限はありません。 gmailはすべての数値のユーザー名を作成します。 (今すぐ入手してください、彼らは速く進んでいます)。

したがって、[0-9]で始まるユーザー名を拒否するコードがある場合、おそらく「名前に数字を使用する理由は何か」と考えるプログラマーによって、後でそのコードが出現した可能性があります。繰り返しになりますが、数字で始まるユーザー名を拒否した歴史的なUNIXコードが存在する可能性が非常に高いと言えます。見たことがありません。初期のパスワードテーブルは手動で編集されました。90年代の初めでも、頻繁にそれを行ったことを覚えています。

なぜそれが存続する限り、私はstroustrup、C++ 11FAQを引用します、いつ新しい標準ライブラリが利用可能になりますか?

問題をより困難にするために、委員会が古い機能を悪いと同意しても、古い機能を排除することは現実的ではないことを覚えておいてください。経験から、ユーザーはすべての実装者に互換性スイッチの下で(またはデフォルトで)非推奨の機能と禁止された機能を提供し続けるように強いています。何十年もの間。

1
Jim

回答で指摘されているように、Linuxユーザー名はすべて数字にすることができます。ただし、多くのソフトウェアツール(および人間のシステム管理者!)を混乱させるため、これは悪いアイデアです。

このため、たとえば すべて数値のユーザー名とグループ名はRHEL 7では廃止され、RHEL 8では禁止されています

8.7.1。 shadow-utilsユーザー名とグループ名にすべて数字を使用できなくなりました

useraddコマンドとgroupaddコマンドは、数字のみで構成されるユーザー名とグループ名を許可しません。このような名前を許可しない理由は、ユーザー名とグループ名、およびユーザーIDとグループID(数字)を操作する多くのツールを混乱させる可能性があるためです。すべて数値のユーザー名とグループ名はRed Hat Enterprise Linux 7では非推奨であり、それらのサポートはRed Hat Enterprise Linux 8では完全に削除されていることに注意してください。

0
dr_