Jakie są dozwolone nazwy grup dla groupadd?

13

Postępowałem zgodnie z tymi instrukcjami, aby zbudować Shadow, który udostępnia groupaddpolecenie. Podczas próby wykonania tego pojawia się błąd:

$ groupadd automake1.10
groupadd: 'automake1.10' is not a valid group name

Sprawdziłem alfanumeryczne nazwy i działają dobrze.

tshepang
źródło

Odpowiedzi:

20

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ść.

Gilles „SO- przestań być zły”
źródło
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!

Malvineous
źródło
5
Nie zapomnij edytować /etc/gshadowpodczas dodawania grup. Ponadto używaj vigr(8)zamiast bezpośrednio edytować pliki.
camh