Student właśnie zapytał, co może być wadą kropki ( .
) w imieniu użytkownika. Na przykład:john.doe
Jak wpłynie to na system lub aplikacje w tym zakresie?
Student właśnie zapytał, co może być wadą kropki ( .
) w imieniu użytkownika. Na przykład:john.doe
Jak wpłynie to na system lub aplikacje w tym zakresie?
Odpowiedzi:
POSIX stwierdza o nazwach użytkowników:
[...] Aby być przenośnym w systemach zgodnych z IEEE Std 1003.1-2001, wartość składa się ze znaków z przenośnego zestawu znaków w nazwie pliku. Łącznika nie należy używać jako pierwszego znaku przenośnej nazwy użytkownika.
... gdzie zestaw znaków przenośnej nazwy pliku to:
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 . _ -
Ponadto strona podręcznika dla /etc/adduser.conf
pliku zawiera następujące informacje:
VALID NAMES
adduser and addgroup enforce conformity to IEEE Std 1003.1-2001,
which allows only the following characters to appear in group
and user names: letters, digits, underscores, periods, at signs
(@) and dashes. The name may not start with a dash. The "$" sign
is allowed at the end of usernames (to conform to samba).
An additional check can be adjusted via the configuration
parameter NAME_REGEX to enforce a local policy.
Podczas gdy obie specyfikacje wydają się zawierać kropkę, Ubuntu (przynajmniej w moim 13.04) wydaje się to zabraniać:
⊳ sudo adduser as.df
adduser: Please enter a username matching the regular expression configured
via the NAME_REGEX[_SYSTEM] configuration variable. Use the `--force-badname'
option to relax this check or reconfigure NAME_REGEX.
Domyślne NAME_REGEX
w Ubuntu to (z /etc/adduser.conf
manpage):
^[a-z][-a-z0-9]*$
_
, @
albo .
.Podsumowując, kropka .
może być użyta dla nazwy użytkownika Ubuntu, NAME_REGEX
wystarczy zmienić w /etc/adduser.conf
. Ponieważ jest zgodny z POSIX, nie powinno być żadnych problemów z posiadaniem .
nazwy użytkownika w żadnym programie zgodnym z POSIX.
Uruchom to polecenie w terminalu:
sudo nano /etc/adduser.conf
Zlokalizuj ten wiersz (pod koniec pliku)
#NAME_REGEX="^[a-z][-a-z0-9]*$"
i zamień na
NAME_REGEX='^[a-z][-.a-z0-9]*$'
Zauważ, że -
musi pozostać pierwszym znakiem w wyrażeniu nawiasowym [...]
, w przeciwnym razie jest traktowany jako określający zakres a-z
.
Naciśnij Ctrl+ X, a Ynastępnie Enter.
Referencje:
NAME_REGEX="^[a-z][-a-z0-9_.]*\$?$"
w /etc/adduser.conf
nie.
useradd
zamiast: sudo useradd -m my.user
. Tak właśnie robimy w Userify i jest to również platforma.
Aplikacje, które odczytują nazwy użytkowników, mogą używać wyrażenia regularnego, w którym zakłada się, że nazwa użytkownika jest zgodna z regułami, a zatem nie obsługuje nazwy użytkownika.
Marc Haber wyjaśnia możliwą wadę błędu Debiana # 604242 ( domyślnie zezwalaj na kropki w nazwie użytkownika):
Posiadanie kropek w nazwie użytkownika stwarza pewne problemy z użyciem scipts
chown
, który nadal akceptuje kropki jako separator między nazwą użytkownika a nazwą grupy. Jeślichown
nadal akceptuje kropki, pojawią się skrypty korzystające z tej notacji, które ulegną awarii, jeśli nazwa użytkownika zawiera kropkę.Zalecam zachowanie bieżącej wartości domyślnej (którą można zastąpić konfiguracją lokalną), dopóki
chown
nie przestanie akceptować kropek jako separatora.
I chown
nadal akceptuje kropkę jako separator, chociaż nie jest już dokumentowana. Zgadzam się, że powinna obowiązywać kompatybilność z POSIX i rzeczywiście używam nazw użytkowników zawierających kropki w kilku systemach bez żadnych negatywnych skutków.