Jak zmienić użytkownika w Linux: Kompletny przewodnik
Linux to system operacyjny wielodostępowy z założenia, a zarządzanie tożsamościami użytkowników to jedna z najbardziej fundamentalnych umiejętności, które każdy administrator systemu musi opanować. Niezależnie od tego, czy zarządzasz środowiskiem VPS Hosting, konfigurujesz serwer WWW czy rozwiązujesz problemy z uprawnieniami do plików po wdrożeniu, zrozumienie sposobu zmiany użytkownika w Linux jest niezbędne.
Fraza „zmiana użytkownika” w Linux obejmuje kilka odrębnych operacji, każda z własnymi narzędziami, zagrożeniami i najlepszymi praktykami:
- Przełączenie się na inne konto w powłoce (np. z
johnnaroot) dla sesji interaktywnej - Uruchomienie pojedynczego polecenia jako inny użytkownik bez pełnego przełączania sesji
- Zmiana użytkownika, jako którego działa usługa lub proces — krytyczne dla wzmacniania bezpieczeństwa
- Zmiana własności plików i katalogów — niezbędna po migracjach, przywracaniu lub wdrożeniach
- Modyfikacja atrybutów konta użytkownika — zmiana nazwy użytkownika, zmiana UID lub dostosowanie członkostwa w grupach
Ten przewodnik obejmuje wszystkie te scenariusze szczegółowo, wyjaśniając, kiedy używać każdego podejścia, jak to robić bezpiecznie i jakich błędów unikać — aby móc pewnie zarządzać użytkownikami Linux bez łamania uprawnień, usług czy dostępu.
Spis treści
- Przełączenie się na innego użytkownika (interaktywna powłoka)
- Uruchomienie pojedynczego polecenia jako inny użytkownik
- Zmiana użytkownika, jako którego działa usługa (systemd)
- Zmiana własności pliku za pomocą chown
- Potwierdzenie bieżącej tożsamości
- Modyfikacja atrybutów konta użytkownika
- Szybki arkusz referencyjny
Przełączenie się na innego użytkownika (interaktywna powłoka)
Gdy potrzebujesz pełnej interaktywnej sesji terminala jako inny użytkownik — do administracji systemem, testowania zachowania aplikacji na innym koncie lub dostępu do konta usługi — Linux udostępnia dwa główne narzędzia: su i sudo.
Używanie su (Switch User)
Polecenie su zastępuje bieżącą tożsamość użytkownika inną:
su - usernameFlaga - (zapisywana również jako -l lub --login) jest ważna: ładuje kompletne środowisko logowania użytkownika docelowego, w tym jego katalog domowy, PATH, profil powłoki i zmienne środowiskowe. Bez flagi - dziedziczysz większość bieżącego środowiska, co może powodować subtelne i mylące zachowanie — szczególnie podczas uruchamiania skryptów lub usług.
Aby przełączyć się bezpośrednio na root:
su -> Uwaga dotycząca bezpieczeństwa: Na wielu nowoczesnych dystrybucjach Linux konto root jest domyślnie wyłączone (szczególnie w systemach opartych na Ubuntu). W takich przypadkach su na root nie powiedzie się, a sudo jest prawidłowym podejściem.
Używanie sudo -i (Preferowane dla powłok Root/Admin)
sudo -iDaje to powłokę logowania root równoważną su -, ale uwierzytelnia się za pomocą Twoich własnych uprawnień sudo zamiast wymagać hasła root. To jest zalecane podejście na większości nowoczesnych dystrybucji, ponieważ:
- Unika potrzeby udostępniania lub znania hasła root
- Wszystkie działania są rejestrowane za pośrednictwem ścieżki audytu sudo
- Respektuje konfigurację sudoers i ograniczenia
Przełączenie się na innego użytkownika z powłoką logowania za pośrednictwem sudo
sudo -iu usernameŁączy to -i (powłoka logowania) i -u (użytkownik docelowy), dając Ci czyste środowisko logowania jako określony użytkownik — bez potrzeby hasła tego użytkownika.
Uruchomienie pojedynczego polecenia jako inny użytkownik
Często nie potrzebujesz pełnej sesji interaktywnej — musisz tylko wykonać jedno polecenie z inną tożsamością. To jest najczęstszy i najbezpieczniejszy wzorzec eskalacji uprawnień.
Używanie sudo -u
sudo -u username whoamisudo -u postgres psqlDrugi przykład jest niezwykle powszechny w administracji bazami danych — przełączenie się na użytkownika systemu postgres w celu uzyskania dostępu do PostgreSQL bez uwierzytelniania hasłem.
Uruchomienie polecenia z czystym środowiskiem logowania
sudo -iu username command_hereZapewnia to, że polecenie działa z pełnym środowiskiem użytkownika docelowego, a nie zmiennymi bieżącej sesji.
Uruchomienie polecenia jako Root
sudo systemctl restart nginxTo jest standardowy wzorzec dla zadań administracyjnych: uruchomienie pojedynczego uprzywilejowanego polecenia bez otwierania powłoki root.
Zmiana użytkownika, jako którego działa usługa (systemd)
Na praktycznie wszystkich nowoczesnych dystrybucjach Linux systemd zarządza usługami. Ze względów bezpieczeństwa każda usługa powinna działać na dedykowanym, nieuprzywilejowanym koncie użytkownika zamiast root. Uruchamianie usług jako root to znaczące zagrożenie bezpieczeństwa — jeśli usługa zostanie zagrożona, atakujący uzyska dostęp root do całego systemu.
Jest to szczególnie ważne na Serwerach Dedykowanych i produkcyjnych środowiskach VPS, gdzie wiele usług może działać jednocześnie.
Sprawdzenie bieżącej konfiguracji usługi
systemctl cat myservice.servicePoszukaj dyrektyw User= i Group= w sekcji [Service]:
[Service]
User=www-data
Group=www-dataZastąpienie użytkownika usługi (bezpieczna metoda)
Zamiast edytować oryginalny plik jednostki (który może być nadpisany podczas aktualizacji pakietu), użyj systemctl edit do utworzenia zastąpienia drop-in:
sudo systemctl edit myservice.serviceOtwiera to edytor, w którym dodajesz:
[Service]
User=myuser
Group=mygroupZapisz plik, a następnie zastosuj zmiany:
sudo systemctl daemon-reload
sudo systemctl restart myservice.serviceWeryfikacja, że usługa działa jako prawidłowy użytkownik
systemctl status myservice.serviceps -eo user,pid,cmd | grep myserviceSprawdzenie użytkownika dowolnego uruchomionego procesu
ps -eo user,pid,cmd | grep nginxps -p <PID> -o user,group,cmd> Ważne: Linux nie pozwala na zmianę użytkownika już uruchomionego procesu w miejscu. Musisz ponownie uruchomić proces (lub skonfigurować menedżera usług do uruchomienia go jako prawidłowy użytkownik), aby zmiana weszła w życie.
Zmiana własności pliku za pomocą chown
Własność pliku jest kluczową częścią modelu uprawnień Linux. Po migracjach, wdrożeniach, kopiach zapasowych lub przywracaniu, własność może być przypisana niewłaściwemu użytkownikowi — powodując błędy odmowy dostępu, uszkodzone aplikacje WWW lub niedostępne dane. Polecenie chown jest Twoim głównym narzędziem do naprawy tego.
To jest typowe zadanie podczas konfigurowania środowisk Hostingu Współdzielonego lub wdrażania aplikacji WWW na VPS.
Zmiana właściciela pliku
sudo chown username file.txtZmiana zarówno właściciela, jak i grupy
sudo chown username:groupname file.txtRekurencyjna zmiana własności (używaj ostrożnie)
sudo chown -R username:groupname /var/www/siteFlaga -R stosuje zmianę rekurencyjnie do wszystkich plików i podkatalogów. Używaj tego ostrożnie — zastosowanie go do niewłaściwej ścieżki (np. / lub /etc) może złamać cały system.
Zachowanie dowiązań symbolicznych
sudo chown -h username:groupname symlinkBez -h, chown podąża za dowiązaniami symbolicznymi i zmienia własność docelowego pliku, a nie samego dowiązania. Użyj -h gdy chcesz zmienić własność dowiązania symbolicznego.
Podgląd własności przed wprowadzeniem zmian
Dla dużych drzew katalogów zawsze podglądaj przed zastosowaniem rekurencyjnego chown:
find /path -maxdepth 2 -printf '%u:%g %pn' | headPokazuje to bieżącego właściciela i grupę dla dwóch pierwszych poziomów drzewa katalogów, pozwalając Ci potwierdzić zakres zmiany przed zatwierdzeniem.
Potwierdzenie bieżącej tożsamości
Przed wprowadzeniem zmian zawsze sprawdź, kim jesteś i w jakim kontekście działasz. Zapobiega to przypadkowym zmianom dokonanym na niewłaściwym koncie.
Sprawdzenie bieżącego użytkownika
whoamiUzyskanie pełnych informacji o tożsamości (użytkownik, grupy, UID)
idPrzykładowe wyjście:
uid=1000(alice) gid=1000(alice) groups=1000(alice),27(sudo),1001(docker)Sprawdzenie, kto jest zalogowany w systemie
whowSprawdzenie oryginalnego użytkownika podczas korzystania z sudo
Gdy eskalujesz za pomocą sudo, dwie zmienne środowiskowe są istotne:
echo $USER # The current effective user (root)
echo $SUDO_USER # The original user who invoked sudo (e.g., alice)To rozróżnienie ma znaczenie w skryptach — $SUDO_USER mówi Ci, kto faktycznie uruchomił polecenie.
Modyfikacja atrybutów konta użytkownika
Czasami „zmiana użytkownika” oznacza modyfikację samego konta: zmianę nazwy, zmianę UID lub dostosowanie członkostwa w grupach. To są trwałe, systemowe zmiany, które mogą wpłynąć na logowania, uprawnienia do plików i dostęp do usług.
> Najlepsza praktyka: Przed wprowadzeniem modyfikacji konta upewnij się, że użytkownik jest wylogowany i żaden proces nie działa na tym koncie.
Zmiana nazwy użytkownika (zmiana nazwy logowania)
sudo usermod -l newname oldnameZmienia to nazwę logowania, ale nie automatycznie zmienia nazwy katalogu domowego. Aby również przenieść i zmienić nazwę katalogu domowego:
sudo usermod -d /home/newname -m newnameJeśli użytkownik ma grupę podstawową o tej samej nazwie co jego stara nazwa użytkownika (co jest domyślne na większości dystrybucji), zaktualizuj również nazwę grupy:
sudo groupmod -n newname oldnameZmiana UID użytkownika
sudo usermod -u 2001 username> Krytyczne: Po zmianie UID wszystkie pliki wcześniej należące do starego UID będą wyglądać na należące do nieznanego identyfikatora numerycznego. Musisz to naprawić natychmiast:
sudo find / -user oldUID -exec chown -h username {} ;Zastąp oldUID poprzednim numerycznym UID. To polecenie przeszukuje cały system plików w poszukiwaniu plików ze starym UID i przypisuje je do nowej nazwy użytkownika.
Dodanie użytkownika do grupy
Najczęstszym przypadkiem użycia jest przyznanie dostępu sudo użytkownikowi:
Debian/Ubuntu:
sudo usermod -aG sudo usernameRHEL / AlmaLinux / Rocky Linux:
sudo usermod -aG wheel usernameFlaga -a jest krytyczna — dołącza użytkownika do grupy bez usuwania go z istniejących grup. Pominięcie -a zastąpi wszystkie członkostwa w grupach tylko określoną grupą.
Weryfikacja członkostwa w grupie
id usernameSzybki arkusz referencyjny
Oto skonsolidowana referencja dla wszystkich operacji przełączania i zarządzania użytkownikami omówionych w tym przewodniku:
| Zadanie | Polecenie |
|---|---|
| Przełączenie się na innego użytkownika (powłoka logowania) | su - username |
| Przełączenie się na innego użytkownika za pośrednictwem sudo | sudo -iu username |
| Otwarcie powłoki root | sudo -i |
| Uruchomienie polecenia jako inny użytkownik | sudo -u username command |
| Uruchomienie polecenia jako postgres | sudo -u postgres psql |
