Jak mogę zmienić własny identyfikator użytkownika?

49

W moim systemie jest tylko jeden użytkownik. Jak mogę zmienić jego identyfikator użytkownika z domyślnego 1000?

Jeśli konieczne są dodatkowe kroki, aby uniknąć przerwania procesu logowania podczas typowej instalacji na pulpicie, należy je uwzględnić w odpowiedzi.

ændrük
źródło
5
Z ciekawości, jakie są powody zmiany ID użytkownika?
Olivier Lalonde,
14
Jeśli często wymieniasz dane z innymi systemami za pośrednictwem NFS lub po prostu jakąś metodą kopiowania, która zachowuje UID, pomoże to, jeśli użyjesz tego samego UID dla tej samej nazwy użytkownika w różnych systemach.
João Pinto,
João miał rację. W szczególności mam nadzieję dopasować identyfikatory UID do użytkowników w systemie Mac OS X, aby współdzielony system plików przenosił zamierzone uprawnienia między systemami operacyjnymi.
ændrük
1
Obecna wersja Nethacka (3.6.0) zapisuje gry, w tym bieżący identyfikator użytkownika w nazwie pliku. Jeśli chcesz zsynchronizować zapisaną grę między komputerami, musisz dopasować uids. (używając dowiązania nie jest możliwe)
Jonathan Hartley

Odpowiedzi:

27

Problem polega na tym, że, jak wspomniałeś, nie możesz zmienić identyfikatora UID użytkownika, gdy jest on zalogowany w sesji. Aby kontynuować, musisz użyć innego konta użytkownika.

Ale nie musisz tworzyć nowego konta użytkownika, awansować go na administratora, wylogować się, zalogować na nowe konto administratora, zmienić UID konta podstawowego, wylogować się, zalogować na konto podstawowe, a następnie usunąć nowego użytkownika administratora wystarczy zmienić identyfikator UID. ;)

Możesz uruchomić system w trybie odzyskiwania (jest to opcja pojawiająca się podczas uruchamiania komputera lub przytrzymanie klawisza Shift zaraz po zakończeniu komunikatów BIOS; Użyj ESCna komputerach Dell z systemem OEM-Ubuntu). Spowoduje to zalogowanie się w sesji root. Będąc zalogowanym rootem, a nie zwykłym kontem użytkownika , będziesz mógł modyfikować swój UID.

Ponieważ tryb odzyskiwania działa tylko w interfejsie wiersza poleceń, po zalogowaniu się do sesji roota będziesz musiał:

  1. Użyj instrukcji BubbaJ by zamontować główny system plików w trybie odczytu i zapisu : mount -o remount,rw /.

  2. Użyj polecenia Luis Alvarado : usermod -u NEW_UID your_username.

  3. Postępuj zgodnie z instrukcjami ddeimeke, aby zaktualizować uprawnienia do pliku.
  4. Następnie uruchom ponownie komputer ( reboot), aby można było uruchomić system w trybie normalnym.
Alexandre P.
źródło
1
Nie działa dla Ubuntu 14.04. Po wykonaniu usermod -u NEW_UID your_usernamei find / -uid 1000 -exec chown -h 5000 '{}' \+ponowne uruchomienie prowadzi do logowania GUI tylko do zgadywania.
Kay
Może ukryte pliki w domu nie są odpowiednio zmieniane? Czy używasz szyfrowania w swoim domu?
matematyka
Możesz sprawdzić swoje /etc/login.defsi /etc/adduser.confpliki, jeśli zmieniłeś swój identyfikator użytkownika poza zasadami określonymi w tych plikach konfiguracyjnych. Użytkownicy poza limitami zasad nie są wyświetlani w pętli logowania, ale możesz zmienić zasady. Zobacz tę odpowiedź
K Markey,
usermod: user user_name is currently used by process 1118 @Alexandre P.
alper
54

Można go zmienić w /etc/passwd, /etc/groupi /etc/shadowlub użyć jednego z preferowanych possibilties powyżej. Ale - co najważniejsze - musisz zmienić własność wszystkich plików należących do użytkownika.

Na przykład, jeśli stary identyfikator użytkownika to 1000, a nowy to 5000:

find / -uid 1000 -exec chown -h 5000 {} +

To samo dotyczy identyfikatora grupy (jeśli go również zmienisz).

find / -gid 1000 -exec chgrp -h 5000 {} +
ddeimeke
źródło
8
To jest naprawdę ważny punkt. Wiele rzeczy się zepsuje, jeśli zastosujesz się do technik podanych w innych odpowiedziach, nie robiąc tego.
poolie
4
Właśnie się nauczyłem, że lepiej jest używać sudo find / -xdev -uid 1000 -exec chown 5000 '{}' \+, w przeciwnym razie uwzględnilibyśmy zamontowane dane (w /mnt, co jest prawdopodobnie niepożądane) i pliki, z którymi lepiej nie zadzierać w /proci /dev. Zobacz ten post
Sebastian
2
To nie jest dobry pomysł. Biorąc pod uwagę, że / home znajduje się na innym systemie plików, nie zmienisz nawet własności własnych plików.
ddeimeke
W tej odpowiedzi powinieneś zmienić uprawnienia grupy i identyfikatora użytkownika, przed edycją plików w / etc, prawda?
MrDaniel
Nie ma znaczenia, co zrobisz najpierw.
ddeimeke
25

Kompletne rozwiązanie oparte na @AlexandreP. oraz @ddeimeke + oficjalna dokumentacja. Ponowne uruchomienie nie jest konieczne.

Polityka Debiana / Ubuntu mówi, że jeśli istnieje użytkownik jimo identyfikatorze użytkownika 1001, istnieje również grupa jimo identyfikatorze grupy 1001. To rozwiązanie aktualizuje również te identyfikatory grup.

  1. Włącz konto root :

    sudo passwd root
    
  2. Jeśli użytkownik jest zalogowany, wyloguj się (także na terminalach wirtualnych)
  3. Przejdź do VT1: Ctrl-Alt-F1
  4. Zaloguj się jako root i uruchom to, podając nazwę użytkownika i stary / nowy identyfikator UID:

    # put the information we need in variables
    username=...
    old_uid=`id -u $username`  # looks up current (old) uid
    new_uid=...
    
    # update the user ID and group ID for $username
    usermod -u $new_uid $username
    groupmod -g $new_uid $username
    
    # update the file ownerships
    # NB: you cannot combine the next two chowns, or files where 
    # only the uid xor the gid matches won't be updated  
    chown -Rhc --from=$old_uid $new_uid /    # change the user IDs
    chown -Rhc --from=:$old_uid :$new_uid /  # change the group IDs
    
  5. Wyloguj
  6. Zaloguj się jako $username
  7. Wyłącz konto root :

    sudo passwd -dl root
    
10b0
źródło
Włączenie konta root nie powinno być konieczne; wystarczy użyć trybu odzyskiwania .
ændrük
2
Powinno to być szybsze niż ponowne uruchomienie, dlatego go opublikowałem.
l0b0
3
W Ubuntu 14.04 i 14.10 musisz także naprawić rozszerzone uprawnienia ACL w / media, w przeciwnym razie automatyczne montowanie (w Nautilus / Nemo) ulegnie awarii, gdy stary UID pozostanie. sudo setfacl -m "u:<NEWUID>:r-x" /media/<USERNAME> sudo setfacl -x "u:<OLDUID>" /media/<USERNAME>
richud.com
To działało dla mnie jak urok. Musiałem jednak tylko zmienić identyfikator użytkownika.
chmike
włączenie konta root wydaje mi się łatwiejsze (i mniej przerażające) niż korzystanie z trybu odzyskiwania.
Jonathan Hartley,
7

Jeśli przejdziesz do konsoli i wpiszesz: usermod --helpotrzymasz jeden z parametrów:

-u, --uid UID nowy UID dla konta użytkownika

więc jeśli chcesz zmienić UID dla użytkownika cyrex, wykonaj następujące czynności:

usermod -u 1000 cyrex

zmieniłoby to uid dla cyrexu z jakiejkolwiek wartości, jaką miał wcześniej, na 1000

Jeśli chcesz to zrobić wizualnie, zrób to:

Iść do

SYSTEM -> ADMINISTRACJA -> UŻYTKOWNICY I GRUPY

Wybierz siebie z listy i kliknij USTAWIENIA ZAAWANSOWANE

UID znajduje się na końcu tego okna.

Luis Alvarado
źródło
1
Wypróbowałem zaproponowaną przez Ciebie metodę graficzną, ale pojawia się komunikat „Nie możesz zmienić identyfikatora użytkownika, gdy użytkownik jest zalogowany”. Czy przetestowałeś tę metodę?
ændrük
2
Cóż, to prawda. Próbowałem z innym kontem. Musisz się zalogować przez root lub dowolne inne konto administratora. Następnie zrób graficzny sposób. Przepraszam za to.
Luis Alvarado,
2
  • Idź do Systemu >> Administracja >> Użytkownicy i grupy

alternatywny tekst

  • Kliknij Ustawienia zaawansowane i przejdź do zakładki Zaawansowane tam na dole zobaczysz swój identyfikator użytkownika.
  • Zmień to i kliknij OK.
    alternatywny tekst
karthick87
źródło
1
Czy powinienem po prostu zignorować ostrzeżenie na zrzucie ekranu „Nie możesz zmienić ID użytkownika, gdy użytkownik jest zalogowany”.
ændrük
Musisz go zmienić z innego konta użytkownika, aby pozbyć się tego ostrzeżenia.
karthick87
7
Moje pytanie brzmi: „Jak mogę zmienić własny identyfikator użytkownika?”. Jeśli chcesz, aby twoja odpowiedź brzmiała, że ​​powinienem utworzyć nowego użytkownika tylko do edycji tej wartości, powinieneś edytować swoją odpowiedź, aby to zaznaczyć.
ændrük
0

Z KDE: w menu Zmień zaawansowane ustawienia użytkownika:

Zmiana z innego użytkownika nie działa dla 1000, który jest użytkownikiem domyślnym.

musisz to zrobić ręcznie - moje doświadczenie

skidzo
źródło
0

Najpierw musisz zalogować się jako root, przynajmniej przez jakiś czas, więc pozwól nam to umożliwić:

sudo passwd root

Uruchom ponownie, ctrl + alt + f1, aby przełączyć się na konsolę, zaloguj się jako root, wykonaj następujące czynności (własność w katalogu domowym zostanie załatwiona automatycznie):

groupmod --gid NEWGID username
usermod  --uid NEWUID username 

W przypadku plików w miejscach innych niż katalog domowy:

sudo chown -R username:username /path/to/files

Usuń i zablokuj hasło roota, jeśli chcesz. (Staram się to utrzymywać):

passwd -dl root
co było do okazania
źródło
0

Śledziłem ddeimeke za instrukcjami z następującymi zmianami:

  1. Nie wylogowałem się i zamiast tego wylogowałem się sudo su
  2. Nie dotknąłem /etc/shadow

Widziałem już wspomniane w innych odpowiedziach, że powinieneś albo uruchomić komputer w celu odzyskania, albo zalogować się jako root. Mój był świeżą instalacją Ubuntu 14, więc byłem gotów przetestować, czy zadziała bez logowania jako root. Robiłem to również na instancji EC2 przez SSH.

KalenGi
źródło