Skocz do zawartości

Migracja Ustawien Userow I Inne Uid Gid


123tomek

Rekomendowane odpowiedzi

Witam!

Przenosze konta userow z bardzo starej fedory na F16 i napotkalem na pewnien problem. W starym systemie numeracja UID uzytkownikow rozpoczyna sie od 500 natomiast w F16 od 1000. Pytanie czy moge wrzucic te nizsze UID do nowej F16 czy spowoduje to komplikacje. Na razie niskie numery od 500 do 1000 nie dubluja sie ale ogolnie zrobi sie niezly balagan jak system bedzie w dalszym ciagu uzywac numerow 500 do 1000 jako systemowe konta a wsrod nich bede mial dotychczasowych uzytkownikow (na przyszlosc migracja bedzie utrudniona).

 

Czy jest jakis sposob na przenumerowanie UID i GID tak by takze pliki uzytkownikow otrzymaly nowe UID i GID?

Odnośnik do komentarza
Udostępnij na innych stronach

Użytkowników zakładasz na nowo w F16 i chcesz przenieść ich zasoby (/home itp)? Jeśli tak, to w czym problem?

Do starego UID, GID dodajesz 500, zapisujesz w zmiennej i lecisz po odpowiednich zasobach (czyli np. /home) chown -R $nowy_uid:$nowy_gid /home/$USER.

 

Zasadniczo stare UID i GID >=500 i <1000 na razie nie przeszkadzają, ale jak słusznie zauważyłeś nie wiadomo jak to się potoczy dalej, więc lepiej zmienić numery teraz i mieć z głowy.

Odnośnik do komentarza
Udostępnij na innych stronach

Użytkowników zakładasz na nowo w F16 i chcesz przenieść ich zasoby (/home itp)? Jeśli tak, to w czym problem?

Do starego UID, GID dodajesz 500, zapisujesz w zmiennej i lecisz po odpowiednich zasobach (czyli np. /home) chown -R $nowy_uid:$nowy_gid /home/$USER.

 

Zasadniczo stare UID i GID >=500 i <1000 na razie nie przeszkadzają, ale jak słusznie zauważyłeś nie wiadomo jak to się potoczy dalej, więc lepiej zmienić numery teraz i mieć z głowy.

 

 

Chcę uniknąć zakładania nowych użytowników w F16. W plikach passwd, shadow i group moge pododawac po 500 do UID i GID jednak zalezaloby mi na przeniesieniu pozostałych danych z zachowaniem uprawnien. Daloby sie wykombinowac jakis madry skrypt ktoryby sprawdzal UID i GID katalogu wraz z wszystkimi plikami, nastepnie dodawalby do UID i GID po 500 i wykonywal chown z nowymi wartosciami?

Odnośnik do komentarza
Udostępnij na innych stronach

Opcja -R (recursive) w chown załatwia tę sprawę, jak podał WalDO

 

 

Chyba sie nie rozumiemy.

 

Mam kilkaset kont userow z UID od 500 w gore. Potrzebuje automatycznie (skryptem) zamienic wszelkim plikiom i katalogom, ktorych wlasciciele mieszcza sie w przedziale UID od 500 do "n", wartosc UID na wyzsza o 500.

 

Przykładowo: Jest katalog /var/spool/mail/ ktory zawiera setki plikow z poczta userow, kazdy z plikow ma inne UID. Potrzebuje wydac jedno polecenie ktore: 1.odczyta aktualna wartosc UID danego pliku z poczta, 2.zapamieta te wartosc, 3.wykona komende chown z "zapamietana wartoscia UID"+500, 4.powtorzy to dla wszystkich plikow w tym katalogu.

Odnośnik do komentarza
Udostępnij na innych stronach

Czyli tak naprawde chcialbys wyszukac w calym systemie pliki z UID/GID 500 lub wiecej? Bo dalsza czesc, to juz tak jak napisales.

Moze sa jakies gotowe narzedzia. W najprostszej (choc na pewno malo efektywnej wersji):

for i in `seq 500 999` # albo mniej jesli znasz wszystkie id
do
      find / -uid $i -gid $i -exec chmod $i:$i {} \; 
done

Oczywiscie szukac mozna w okreslonych lokalizacjach, szukac tylko po UID jesli wszyscy userzy maja te sama grupe itd.

Odnośnik do komentarza
Udostępnij na innych stronach

Tylko chyba w tym skrypcie brakuje zwiekszenia o 500 ?

Nie znam za dobrze basha, bo do skryptów uzywam Tcl, ale po drodze wystarczy przypisac j=$i+500

i zrobic -exec chmod $j:$j. No a na koncu chyba trzeba recznie zwiekszyc wpisy w passwd i group, zeby pasowaly do nowych wartosci.

Odnośnik do komentarza
Udostępnij na innych stronach

Słusznie, tak na szybko i "spod dużego palca" rzuciłem raczej sposób odszukania plików danego użytkownika niż rozwiązanie do zaimplementowania sposobem copy-paste ;)

Poza tym dawno już nie administrowałem serwerem z jakąś poważniejszą liczba użytkowników, więc trochę nie na czasie jestem, ale myślę, że jak dobrze poszukać w Googlach, to znajdzie się bardziej efektywny, szybszy i słuszniejszy sposób rozwiązania problemu.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie, to nie będzie takie hop siup

 

* jeśli w systemie jest user o uid = 1000..1500 to będzie pozamiatane :D

zacznij od najwyższego numerku w /etc/password w dół

 

* user wcale nie musi mieć tego samego UID i GID, wystarczy że dodałeś kiedyś z palca grupę, więc rozpatruj osobno

 

* jeśli jakieś pliki mają usera powyżej 500, a celowo nadaną grupę poniżej 500, to nie powinny mieć zmienionej grupy

 

* jak się pomylisz, to nie ma szans na odzyskanie uprawnień. Zrób to selektywnie po nazwach w wiadomych lokalizacjach: /home i /var/spool/mail itd.

 

* nie wiem jak u Ciebie, ale $HOME nie zawsze jest w /home

* a poza tym to by się trochę optymalizacji przydało, bo "500 * find /" ;) nie lepiej raz

  • Upvote 1
Odnośnik do komentarza
Udostępnij na innych stronach

To jest jakies nowe ograniczenie na sesje (GDM nie wpusci). Jakby sie uprzec i poszukac to mozna na pewno jakos przywrócic mozliwosc uzywania UID ponizej 1000.

 

EDIT: Poza tym jak zmieniasz UID poleceniem usermod to on automatycznie dostosuje system plików, tzn. przynajmniej /home/user, ale poza tym folderem raczej nie trzymasz plików. Konta root to nie dotyczy, bo i tak ma uid=0.

Odnośnik do komentarza
Udostępnij na innych stronach

potestuj taki pomysł,

nie testowane w realu!!!

#!/bin/bash

TEST=echo # dla testu ustaw na 'echo', żeby wykonać zmiany zakomentuj

# powiększ UID/GID z tego zakresu
MIN=500
MAX=999

# sprawdż najpierw jakie są największe ustawione wartości
# posłużymy się nimi jako licznikiem
LAST_UID=$(awk -F':' '{print $3}' /etc/passwd | sort -n | tail -1)
LAST_GID=$(awk -F':' '{print $4}' /etc/passwd | sort -n | tail -1)

# musimy mieć pewność, że liczymy nowe przynajmniej od 1000
[ $LAST_UID -le $MAX ] && LAST_UID=$MAX
[ $LAST_GID -le $MAX ] && LAST_GID=$MAX

echo "Last used UID = $LAST_UID"
echo "Last used GID = $LAST_GID"

# przy okazji możemy wygenerować nową zawartość dla /etc/passwd
NEW_ETC_PASSWD=/tmp/new_etc_passwd && echo > $NEW_ETC_PASSWD

cat /etc/passwd | while IFS=: read user x uid gid info home shell
do
echo "checking user '$user' : uid=$uid, gid=$gid" #$x $uid $gui $info $home $shell

if [ $uid -ge $MIN ] && [ $uid -le $MAX ]
then
	# oblicz nowy UID
	new_uid=$(( $uid - $MIN + $LAST_UID +1 ))
	echo -e "\t--> new uid: $new_uid"
	# ustaw nowy UID
	$TEST find / -uid $uid -exec chmod $new_uid '{}' \; # <---- TEST
fi

if [ $gid -ge $MIN ] && [ $gid -le $MAX ]
then
	# oblicz nowy GID
	new_gid=$(( $gid - $MIN + $LAST_GID +1 ))
	echo -e "\t--> new gid: $new_gid"
	# ustaw nowy GID
	$TEST find / -gid $gid -exec chgrp $new_gid '{}' \; # <---- TEST
fi

echo "${user}:${x}:${uid}:${gui}:${info}:${home}:${shell}" >> $NEW_ETC_PASSWD
done

echo "New /etc/passwd --> $NEW_ETC_PASSWD"

 

Domyślnie tylko wyświetla, co chce zrobić. Aby rzeczywiście coś zmienić, zakomentuj zmienną TEST na początku skryptu.

Wydaje się, że użycie wielokrotnie "find" jest nieuniknione. Zresztą, wydaje mi się, że find też jakoś sobie cachuje wyniki.

Odnośnik do komentarza
Udostępnij na innych stronach

Ustawilem na sztywno LAST_UID i LAST_GID na 999 bo mam konto uid=65534, gid=65534 x 65534 Anonymous NFS User

 

Jedna uwaga to lepiej puscic to od najwiekszej wartosci do najmniejszej bo gdy userow jest wiecej niz 500 (obecne UID>1000) to sie zrobi niezly balagan. Mam userow mniej ale i tak nie do konca wiem jakby to puscic.

 

Linijka echo "${user}:${x}:${uid}:${gui}:${info}:${home}:${shell}" >> $NEW_ETC_PASSWD kopiuje ze starym UID i GID ale to pewnie przez to ze ma byc

echo "${user}:${x}:${new_uid}:${new_gui}:${info}:${home}:${shell}" >> $NEW_ETC_PASSWD ale jeszcze nie zmienialem

 

Jeszcze jedno lamerskie pytanko, co oznacza -le i -ge? Tzn. widac co to robi ale to sa jakies bashowe komendy czy cos?

Odnośnik do komentarza
Udostępnij na innych stronach

Ustawilem na sztywno LAST_UID i LAST_GID na 999 bo mam konto uid=65534, gid=65534 x 65534 Anonymous NFS User

 

Jedna uwaga to lepiej puscic to od najwiekszej wartosci do najmniejszej bo gdy userow jest wiecej niz 500 (obecne UID>1000) to sie zrobi niezly balagan. Mam userow mniej ale i tak nie do konca wiem jakby to puscic.

 

Linijka echo "${user}:${x}:${uid}:${gui}:${info}:${home}:${shell}" >> $NEW_ETC_PASSWD kopiuje ze starym UID i GID ale to pewnie przez to ze ma byc

echo "${user}:${x}:${new_uid}:${new_gui}:${info}:${home}:${shell}" >> $NEW_ETC_PASSWD ale jeszcze nie zmienialem

 

Jeszcze jedno lamerskie pytanko, co oznacza -le i -ge? Tzn. widac co to robi ale to sa jakies bashowe komendy czy cos?

 

 

 

EDIT2:

Co do zapuszczenia od najwyzszego UID do najnizszego to wyszukalem cos takiego jak przepisanie pliku passwd

 

Export /etc/passwd (ignorujemy konta systemowe):
export UIDGID=500
awk -v LIMIT=$UIDGID -F: '($3>=LIMIT) && ($3!=65534)' /etc/passwd  > /passwd.mig

i pozniej wymyslilem zeby to posortowac komenda

sort -t : -k3 -r passwd.mig > passwd_sort.mig

 

i do petli uzyc tego pliku passwd_sort.mig zamiast

cat /etc/passwd | while IFS=: read user x uid gid info home shell

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...