web-dev-qa-db-fra.com

Pourquoi les noms d'utilisateur Linux ne peuvent-ils pas commencer par des nombres?

Y a-t-il une raison technique à cela? Est-ce un artefact des premiers jours de Linux ou Unix, et si oui, y a-t-il une raison pour laquelle il persiste?

84
43Tesseracts

Certaines commandes (par exemple chown) peuvent accepter un nom d'utilisateur ou un ID utilisateur numérique, donc autoriser des noms d'utilisateur entièrement numériques briserait cela.

Une règle pour autoriser les noms commençant par un nombre et contenant de l'alpha a probablement été jugée inutile. à la place, il suffit de commencer par un caractère alpha.

Modifier:

Il ressort des autres réponses que certaines distributions ont renversé cette limitation; dans ce cas, selon la documentation GNU Core Utils :

POSIX requiert que ces commandes tentent d'abord de résoudre la chaîne spécifiée en tant que nom, et seulement une fois que cela échoue, puis essayez de l'interpréter comme un 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.

L'ajout d'un utilisateur nommé '0' serait simplement un problème (UID 0 == root). Cependant, notez que les arguments d'ID de groupe/utilisateur peuvent être précédés d'un "+" pour forcer leur interprétation sous forme d'entier.

136
thomas_d_j

voici un test sur ubuntu 14.04 en utilisant des nombres:

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

et un utilisant 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
????

C'est probablement la pire idée que j'ai eue:

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

De toute évidence, vous pouvez ajouter un tel utilisateur, même si je ne suis pas sûr que ce soit une bonne idée à long terme.

82
adonis

Un nom d'utilisateur * Nix est généralement une chaîne de 32 caractères créée par l'utilitaire useradd. C'est, comme vous l'avez dit, le résultat direct des premières normes Unix (BSD techniquement). Selon la page de manuel de FreeBSD passwd(5):

Le nom de connexion ne doit pas commencer par un trait d'union (`- ') et ne doit pas contenir de caractères, tabulations ou espaces 8 bits, ni aucun de ces symboles:`,: + & #% ^ ()! @ ~ *? <> = |/"'. Le symbole dollar (` $') n'est autorisé que comme dernier caractère à utiliser avec Samba. Aucun champ ne peut contenir de deux points (`: ') car il a été utilisé historiquement pour séparer les champs de l'utilisateur base de données.

Certains systèmes * Nix lançaient des erreurs obscures lorsqu'ils étaient présentés avec des caractères spéciaux dans les noms d'utilisateur, donc finalement, les caractères spéciaux ont été interdits. Dans la plupart des systèmes Nix modernes, il serait relativement facile de changer les utilitaires passwd/useradd pour prendre en charge les noms d'utilisateur de caractères spéciaux, mais la plupart des gens hésitent à changer une chose aussi peu importante, comme cela l'aurait fait peu d'effet et entraînerait une incompatibilité vers l'arrière.

MODIFIER:
Comme l'a dit Adonis, il est en fait possible de le faire dans une distribution Linux moderne, mais c'est mal avisé (surtout quand on rencontre des programmes standardisés ou hérités).

9
Interesting...

Y a-t-il une raison technique à cela? Est-ce un artefact des premiers jours de Linux ou Unix, et si oui, y a-t-il une raison pour laquelle il persiste?

Je ne peux pas penser à une raison technique - historiquement, c'est juste ASCII. La façon dont il est lu puis tapé est entre les mains du codeur.

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];
}

Depuis que j'ai passé un peu de temps à parcourir les pages de manuel des archives (par exemple: 1BSD était la première distribution de logiciel de Berkeley de Bill Joy ), je n'ai rien vu qui spécifie les noms d'utilisateur. Cela ne veut pas dire qu'il n'existe pas, mais je ne l'ai pas vu.

Il nous reste donc un contexte humain historique. À l'époque où j'ai commencé dans la technologie en 1980, nous utilisions toujours notre vrai nom pour les connexions. Habituellement, la première initiale et le dernier nom complet, sauf s'il y avait une limite de longueur. Cela était important car votre nom de connexion a été utilisé comme adresse e-mail. Personne à l'époque n'a envoyé d'e-mail anonyme. Bien sûr, il doit y avoir eu quelques exceptions, je ne m'en souviens pas. Dans l'ensemble, je pense que tel est le cas.

Et selon le rfc5321 # page-63, il n'y a aucune restriction à ce que le "nom" de l'e-mail commence par un chiffre. gmail créera tous les noms d'utilisateurs numériques. (obtenez-le maintenant, ils vont vite).

Donc, s'il existe un code qui rejette un nom d'utilisateur commençant par [0-9], il a probablement vu le jour plus tard, certains programmeurs pensant "pourquoi auriez-vous un numéro comme nom?". Encore une fois, je dois dire qu'il peut très bien y avoir un code Unix historique qui a rejeté un nom d'utilisateur commençant par un nombre. Je ne l'ai tout simplement pas vu. Les premières tables de mots de passe ont été éditées à la main, je m'en souviens certainement souvent, même au début des années 90.

En ce qui concerne la raison pour laquelle elle persiste, je citerai stroustrup, C++ 11FAQ, Quand les nouvelles bibliothèques standard seront-elles disponibles?

Pour rendre le problème plus difficile, n'oubliez pas qu'il n'est pas possible d'éliminer les anciennes fonctionnalités, même si le comité convient qu'elles sont mauvaises: l'expérience montre que les utilisateurs obligent chaque implémenteur à continuer à fournir des fonctionnalités obsolètes et interdites sous les commutateurs de compatibilité (ou par défaut) depuis des décennies.

1
Jim

Comme indiqué dans les réponses, les noms d'utilisateur Linux peuvent être entièrement numériques. Cependant, c'est une mauvaise idée car cela confondrait de nombreux outils logiciels (et les administrateurs système humains!).

Pour cette raison, par exemple, les noms d'utilisateur et les noms de groupe entièrement numériques sont déconseillés dans RHEL 7 et interdits dans RHEL 8:

8.7.1. shadow-utils n'autorise plus les noms d'utilisateurs et de groupes entièrement numériques

Les commandes useradd et groupadd interdisent les noms d'utilisateur et de groupe composés uniquement de caractères numériques. La raison pour ne pas autoriser de tels noms est que cela peut confondre potentiellement de nombreux outils qui fonctionnent avec les noms d'utilisateur et de groupe et les identifiants d'utilisateur et de groupe (qui sont des nombres). Veuillez noter que les noms d'utilisateur et de groupe entièrement numériques sont déconseillés dans Red Hat Enterprise Linux 7 et que leur prise en charge est complètement supprimée dans Red Hat Enterprise Linux 8.

0
dr_