Jak pakiet Debian powinien tworzyć konta użytkowników?


33

Pakiet qqq.debinstaluje program, qqqktóry powinien być uruchamiany z uqqqkonta użytkownika. Pakiet składa się z qqqprogramu, qqq.confpliku konfiguracyjnego i /etc/init.d/qqqskrypt startowy.

Jak pakiet powinien zarządzać tworzeniem użytkownika uqqq? Czy są jakieś najlepsze praktyki lub oficjalne wytyczne na ten temat?

  1. Wystarczy utworzyć użytkownika automatycznie uqqqw postinst;
  2. Utwórz użytkownika automatycznie przy pierwszym uruchomieniu ze /etc/init.d/qqqskryptu;
  3. Utwórz użytkownika automatycznie przy pierwszym uruchomieniu qqqprogramu (bez argumentów)
  4. Nie twórz żadnych kont użytkowników, odmów uruchomienia, chyba że użytkownik zostanie utworzony przez administratora (na przykład za pomocą qqq --create-user);
  5. Nie twórz żadnych kont użytkowników, domyślnie uruchamiaj się niepewnie z poziomu root;
  6. Interaktywnie pytaj w skrypcie postinst, init.d lub w qqqsamym sobie, czy utworzyć użytkownika.

Czy pakiet powinien usunąć konto użytkownika po odinstalowaniu?


7
Najprostszym sposobem na uzyskanie odpowiedzi na to pytanie jest spojrzenie na skrypty przed / po instalacji oficjalnych pakietów Debiana. Po prostu uruchom grep adduser /var/lib/dpkg/info/*.postinstna dowolnym systemie opartym na Debianie, aby uzyskać wiele przykładów.
jofel

Kiedy adduserjest używany, musi również zależeć od pakietu. Patrz: lintian.debian.org/tags/…
Lekensteyn

Odpowiedzi:


22

Wiki Debiana ma bardziej kompleksowe i szczegółowe wytyczne niż wspomniany już Podręcznik Polityki Debiana. Zobacz AccountHandlingInMaintainerScripts :

Program adduser działa poprawnie, jeśli zostanie wywołany z opcją --system. Dlatego zazwyczaj wystarczy zadzwonić

adduser --system $ USERNAME

w swoim postinst, aby utworzyć konto z wyłączonymi loginami, podstawową grupą nogroup i katalogiem domowym w katalogu / home. Jeśli chcesz inne opcje, dodaj je tak, jak chcesz.

Zwykle nie powinno być konieczne sprawdzanie z getentem, czy konto już istnieje, ponieważ adduser --system ogólnie robi to dobrze. Jeśli nie, zgłoś błąd przeciwko adduserowi, aby Twoje skrypty opiekuna były proste.

Porady dotyczące usuwania kont są niejednoznaczne. Zauważę jednak, że odpowiednia rada dla Fedory nie jest jednoznaczna.

Nie usuwaj użytkowników ani grup Nigdy nie usuwamy użytkowników ani grup utworzonych przez pakiety. Nie ma rozsądnego sposobu, aby sprawdzić, czy pliki należące do tych użytkowników / grup zostały pozostawione (a nawet gdyby tak było, co byśmy z nimi zrobili?), A pozostawienie tych posiadaczy wskazujących na nieistniejących użytkowników / grup może spowodować problemy z bezpieczeństwem gdy semantycznie niepowiązany użytkownik / grupa zostanie utworzony później i ponownie użyje UID / GID. Ponadto w niektórych konfiguracjach usunięcie użytkownika / grupy może być niemożliwe lub / i niepożądane (np. Podczas korzystania ze współużytkowanej, zdalnej bazy danych użytkowników / grup). Oczyszczanie nieużywanych użytkowników / grup należy do administratorów systemu, którzy zajmą się tym, jeśli sobie tego życzą.


12

Jako administrator instalujący pakiety spodziewałbym się, że moje pakiety będą automatycznie tworzyć potrzebnych im użytkowników w trybie preinst lub postinst, tak aby wszelkie pliki, które muszą być własnością użytkownika, mogły zostać utworzone przed uruchomieniem programu.

Twój program powinien działać jako root tylko wtedy, gdy jest to konieczne (np. Powiązać z uprzywilejowanym portem), a najlepiej powinien porzucić swoje uprawnienia, gdy skończy robić to, co wymaga roota.

Możesz sprawdzić, jak poradziły sobie z tym inne (zainstalowane) pakiety

grep -l adduser /var/lib/dpkg/info/*postinst /var/lib/dpkg/info/*preinst

i czytanie wymienionych plików (większość zajmuje więcej niż jedną linię opcji).

Co dziwne, wszystkie oprócz jednego z moich zainstalowanych pakietów, które tworzą użytkownika, adduserdo dodawania użytkowników, ale pakiet adduser nie jest pakietem wymaganym, więc twój pakiet będzie musiał zostać zbudowany, aby na nim polegać. useraddProgram jest używany przez pakiet libuuid1 i jest częścią passwdpakietu, który jest wymagany pakiet.


1
To okropne, sprawdź właściwy sposób generowania skryptów preinst zamiast ręcznego hakowania jednego.
LtWorf

--quietpodejście wydaje się bardzo popularny
vidstige

6

Sekcja 10.9. Uprawnienia i właściciele w Podręczniku zasad Debiana mają to, czego szukasz (od „wersji 3.9.5.0, 28.10.2013”):

Jeśli chcesz utworzyć nowego użytkownika lub grupę dla swojego pakietu, istnieją dwie możliwości. Po pierwsze, może być konieczne, aby niektóre pliki w pakiecie binarnym były własnością tego użytkownika lub grupy, lub może być konieczne skompilowanie identyfikatora użytkownika lub grupy (a nie tylko nazwy) w pliku binarnym (chociaż tego ostatniego należy unikać, jeśli możliwe, ponieważ w tym przypadku potrzebujesz statycznie przydzielonego identyfikatora).

Jeśli potrzebujesz statycznie przydzielonego identyfikatora, musisz poprosić o identyfikator użytkownika lub grupy z base-passwd' maintainer, and must not release the package until you have been allocated one. Once you have been allocated one you must either make the package depend on a version of thepakietu base-passwd „z identyfikatorem obecnym w /etc/passwd' or / etc / group” lub zorganizować, aby Twój pakiet utworzył samego użytkownika lub grupę z poprawnym id (użycie adduser') in itspreinst 'lub postinst'. (Doing it in thepostinst' powinno być preferowane, jeśli jest to możliwe, w przeciwnym razie będzie wymagana wstępna zależność od pakietu `adduser ').

Uwaga: Na liście debian-devel jest dość aktywny i odpowiada na takie pytania też (choć to przykładem jest od 2003 roku).


3
Tak więc krótka uproszczona odpowiedź brzmi „Użyj adduserw postinst”.
Vi.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.