Zobacz w szczególności kod źródłowy libmisc/chkname.c. Cień jest dość konserwatywny: nazwy muszą pasować do wyrażenia regularnego [_a-z][-0-9_a-z]*\$?i mogą być co najwyżejGROUP_NAME_MAX_LENGTH długość znaków (opcja konfiguracji, domyślnie 16; nazwy użytkowników mogą zwykle do 32 znaków, z zastrzeżeniem określenia czasu kompilacji).
Debian bardzo rozluźnia czek. Od momentu ściśnięcia :dozwolone jest wszystko oprócz białych znaków . Zobacz błąd nr 264879 i błąd nr 377844 .
POSIX wymaga dopuszczenia liter obu liter, cyfr i ._-( jak w nazwach plików ). POSIX nie ustanawia żadnych ograniczeń, jeśli nie zależy Ci na przenośności. Z używania wynika szereg zalecanych ograniczeń:
Dwukropki, znaki nowej linii i wartości zerowe są od razu; po prostu nie możesz ich użyć w /etc/passwdlub /etc/group.
Nazwa składająca się wyłącznie z cyfr jest złym pomysłem - chownichgrp powinna traktować sekwencję cyfr jako nazwę, jeśli znajduje się w bazie danych użytkowników / grup, ale inne aplikacje mogą traktować dowolną liczbę jako identyfikator liczbowy.
Inicjał -lub a .w nazwie użytkownika nie jest zdecydowanie zalecane, ponieważ wiele aplikacji oczekuje, że będzie mogło przejść $user.$groupdo zewnętrznego narzędzia (np. chown $user.$group /path/to/file) ¹. Nazwa .w grupie powinna sprawić mniej problemów, ale nadal bym jej nie polecał.
/ może również powodować problemy, ponieważ niektóre programy oczekują możliwości używania nazw użytkowników w nazwach plików.
Każda postać, którą rozwinąłaby powłoka, jest prawdopodobnie ryzykowna.
Znaki spoza ASCII powinny być w porządku, jeśli nie obchodzi Cię udostępnianie w systemach, które mogą używać różnych kodowań.
¹ Wszystkie współczesne implementacje oczekują chown $user:$group, ale obsługuje chown $user.$groupkompatybilność wsteczną, a istnieje zbyt wiele aplikacji, które przechodzą kropkę, aby usunąć tę kompatybilność.
chownArgument Re : obecna składnia, przynajmniej w jądrach GNU, jest taka user:group, że kropka jest akceptowana tylko dla kompatybilności. Można użyć j.smith:j.smith.
user1686
1
@grawity: To nie tylko GNU coreutils, ale problem nie jest chownsam, istnieją skrypty i inne programy, które wywołują chown $user.$groupzamiast chown $user:$group- nawet jeśli chownimplementacja próbuje zrobić to dobrze, niektóre przypadki są z natury niejednoznaczne.
Gilles 'SO - przestań być zły'
1
Jeśli masz ochotę na przygodę, możesz edytować /etc/groupbezpośrednio i podać dowolną nazwę grupy. Ma to również dodatkową zaletę, że gdy napotkasz jeden z wymienionych problemów @Gilles, możesz nie być w stanie załadować edytora, aby rozwiązać problem, a nawet się zalogować - co daje cenne doświadczenie w odzyskiwaniu uszkodzonego systemu!
chown
Argument Re : obecna składnia, przynajmniej w jądrach GNU, jest takauser:group
, że kropka jest akceptowana tylko dla kompatybilności. Można użyćj.smith:j.smith
.chown
sam, istnieją skrypty i inne programy, które wywołująchown $user.$group
zamiastchown $user:$group
- nawet jeślichown
implementacja próbuje zrobić to dobrze, niektóre przypadki są z natury niejednoznaczne.Jeśli masz ochotę na przygodę, możesz edytować
/etc/group
bezpośrednio i podać dowolną nazwę grupy. Ma to również dodatkową zaletę, że gdy napotkasz jeden z wymienionych problemów @Gilles, możesz nie być w stanie załadować edytora, aby rozwiązać problem, a nawet się zalogować - co daje cenne doświadczenie w odzyskiwaniu uszkodzonego systemu!źródło
/etc/gshadow
podczas dodawania grup. Ponadto używajvigr(8)
zamiast bezpośrednio edytować pliki.