Jakich znaków należy używać, a których nie używać w nazwach użytkowników w systemie Linux?

39

Chcę utworzyć konta użytkowników nazwane po nazwie domeny. adduser skarży się, że nazwy użytkowników muszą pasować do NAME_REGEXwyrażenia regularnego.

adduser: Please enter a username matching the regular expression configured
via the NAME_REGEX configuration variable.  Use the `--force-badname'
option to relax this check or reconfigure NAME_REGEX.

Mogę dodać użytkowników korzystających z useradd bez reklamacji. Czy jest jakiś powód, że nie należy zmodyfikować wyrażenie regularne, aby umożliwić ., -i _?

Jakie postacie będą powodować problemy i nie powinny być dozwolone w nazwach użytkowników?

To jest domyślne NAME_REGEX.

NAME_REGEX="^[a-z][-a-z0-9]*\$"
Ed Haber
źródło
1
Zauważ, że NAME_REGEXjuż akceptuje, -o ile nie jest to pierwsza postać.
Pierścień Ø
Dlaczego nie dodać .? Rozważ użytkownika o nazwie .lub ... Następnie rmten użytkownik o nazwie ...
Jon
1
@Jon to nie jest problem, ponieważ rmnie jest to polecenie używane podczas usuwania użytkownika. Zgadzam ..się, że nie jest to rozsądna nazwa z podobnych powodów, ale rmnie jest jedną z nich.
toon81

Odpowiedzi:

26

Radzę ci postępować zgodnie ze standardem zalecanym przez domyślny NAME_REGEX. W nazwie * NIX możesz umieścić prawie wszystko w nazwie użytkownika, ale możesz napotkać dziwne problemy z kodem biblioteki, który przyjmuje założenia. Przykładem:

http://blog.endpoint.com/2008/08/on-valid-unix-usernames-and-ones-sanity.html

Moje pytanie do Ciebie: czy masz wiele nazw domen, które kolidowałyby ze sobą, gdybyś usunął nietypową interpunkcję? Na przykład, czy masz zarówno „ZAPEWNIENIE JAKOŚCI”, jak i QUALITYASSURANCE „jako nazwy domen? Jeśli nie, możesz po prostu przyjąć zasadę usuwania nietypowych znaków i używania tego, co pozostało jako nazwa użytkownika.

Możesz również użyć sekcji „prawdziwa nazwa” pola GECOS w informacji / etc / passwd do przechowywania oryginalnej, niezmodyfikowanej nazwy domeny, a skrypty mogą ją łatwo wyodrębnić.

steveha
źródło
Martwię się o przypadkową część nieoczekiwanych błędów. Mogę dość łatwo usunąć kropki i nadal nie mam szans na konflikty nazw, ale - może powodować problem. Nadal jest to mało prawdopodobne.
Ed Haber,
Tak więc używany przeze mnie system debian wykorzystuje dane użytkownika. Wygląda na to, że - powinien być odpowiedni do użycia w nazwach użytkowników.
Ed Haber
W rzeczywistości to wyrażenie regularne zezwala na „-” w nazwach użytkowników! Pierwszą literą musi być az, ale kolejne litery nazw użytkowników mogą być „-”, az lub 0-9.
steveha
Och! masz rację. Brakowało mi dodatkowego - kiedy na niego patrzyłem.
Ed Haber
22

Mówiąc dokładniej, standard POSIX („Interfejs przenośnego systemu operacyjnego dla Uniksa”) (IEEE Standard 1003.1 2008) stanowi :


3.431 Nazwa użytkownika

Ciąg używany do identyfikacji użytkownika; patrz także Baza danych użytkowników. Aby być przenośnym w systemach zgodnych z POSIX.1-2008, wartość składa się ze znaków z przenośnego zestawu znaków w nazwie pliku. <hyphen>Charakter nie powinny być wykorzystywane jako pierwszy znak przenośnego nazwy użytkownika.


3.278 Zestaw znaków przenośnej nazwy pliku

The set of characters from which portable filenames are constructed.

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 . _ -

Każda nazwa użytkownika zgodna z tym standardem jest zgodna z POSIX i powinna być bezpieczna.

Beznadziejny
źródło
6
Chociaż jest to prawdą, na ogół nie jest mile widziane, że w nazwach użytkowników występują duże litery - ludzie mają dość kłopotów z rozróżnianiem wielkości liter w hasłach, a zmuszanie ich do pamiętania wielkości liter w nazwach użytkowników polega na tym, że kopią je, gdy nie działają. (Wyjątek: gdy konwencja dotycząca nazwy użytkownika to ALL UPPERCASE CHARACTERS.)
voretaq7
1
Od POSIX.1-2017 te definicje nieco się zmieniły. 3,431 Nazwa użytkownika jest teraz 3,437 Nazwa użytkownika i 3,278 Portable Nazwa Character Set jest teraz 3,282 Portable Nazwa Character Set
Chuck Wolber
@ voretaq7 Uważam, że uzasadnione jest zachowanie wielkości liter w nazwie użytkownika, ale przy rozróżnianiu wielkości liter w logowaniu. Tak więc nazwą użytkownika może być CatInTheHat, ale zaloguj się, podając catinthehat lub catintheHAT lub cokolwiek innego.
StackOverflowUser
1

Z NAME_REGEX można wywnioskować, że wszystko oprócz A do Z dużymi i małymi literami oraz cyfry od 0 do 9 byłyby złe.

wzzrd
źródło
Szukane słowo to „wydedukowane”.
wfaulk
spójrz ponownie na wyrażenie regularne, -jest również akceptowane (po prostu nie jako pierwszy znak). Zwróć też uwagę, że domyślnie wielkie litery nie są akceptowane (nie ma gflagi ani nie jest A-Zuwzględnione w NAME_REGEX wyrażeniu regularnym dostarczonym przez OPNAME_REGEX="^[a-z][-a-z0-9]*\$"
SherylHohman