Generování UID pro adduser

Generování UID pro adduser
« kdy: 21. 01. 2020, 17:00:23 »
Ahoj,
obcas si clovek neuvedomi, s jakou logikou nektere veci funguji...no budiz. Problem je jednoduchy, na debian10 automaticke generovani uid pri "adduser" se ridi hlavne adduser.conf parametry FIRST_GID(1000) a LAST_GID (59999).
Pridavam napric servery lokalni uzivatele a nastavuji jim uid:gid, problem je, ze to vazne nevzalo volne uid mezi 1000 a 2000, ale pridavalo to vzdy po poslednim 2xxx. Super, ceka me pregenerovani nekterych uzivatelu na hromade serveru.

Zakladni otazka je, jak bezpecne je dnes pouzivat uid:gid nad LAST_GID - napr., kdyz si zvolim 100k+, aby se mi normalni veci generovali stale v tom FIRST_GID a LAST_GID a tam, kde to potrebuju mit shodne mezi servery, pouziju 100k+? Pouziva to nekdo mimo LDAP/SSSD atd?
Menit adduser.conf LAST_GID z defaultu se mi moc nechce. A nasadit LDAP atd. mi v tomhle pripade pripada zvyseni rizika nefunkcnosti...

Diky.
« Poslední změna: 21. 01. 2020, 18:10:31 od Petr Krčmář »


Re:Generování UID pro adduser
« Odpověď #1 kdy: 21. 01. 2020, 20:57:45 »
Podle mě spoléhat na stejné uid/gid je chybné. Sám jste popsal situaci, kdy to může selhat. Do budoucna mohou takové situace přibývat a uspravujete se nad něčím, co je postavené na vetchém základě. Když už bych to potřeboval, využíval bych třeba něco z toho, co píšete. Je menší zlo být závislý na této spolehlivosti, než rizika z ručního řešení, jaké popisujete. Ano, musíte počítat s tím, že metoda ověření nemusí být chvíli dostupná - ale s tím dnes spousta systémů počítá.

Re:Generování UID pro adduser
« Odpověď #2 kdy: 22. 01. 2020, 08:20:14 »
pokud potřebuješ synchronizovat uid napříč servery, tak si to připrav někde předem a předávej uid rovnou commandu. taky bych se vyvaroval adduser a použil rovnou useradd.

Re:Generování UID pro adduser
« Odpověď #3 kdy: 22. 01. 2020, 09:22:41 »
pokud potřebuješ synchronizovat uid napříč servery, tak si to připrav někde předem a předávej uid rovnou commandu. taky bych se vyvaroval adduser a použil rovnou useradd.

Pouzivam modul "user" v ansible, ten koukam, useradd pouziva. Ale treba --firstuid --lastuid parametry ten modul neumi.

Re:Generování UID pro adduser
« Odpověď #4 kdy: 22. 01. 2020, 09:25:18 »
Podle mě spoléhat na stejné uid/gid je chybné. Sám jste popsal situaci, kdy to může selhat. Do budoucna mohou takové situace přibývat a uspravujete se nad něčím, co je postavené na vetchém základě. Když už bych to potřeboval, využíval bych třeba něco z toho, co píšete. Je menší zlo být závislý na této spolehlivosti, než rizika z ručního řešení, jaké popisujete. Ano, musíte počítat s tím, že metoda ověření nemusí být chvíli dostupná - ale s tím dnes spousta systémů počítá.

Jenze staticky uzivatele na tom serveru jsou bez ohledu na to, zda neco funguje ci ne. Pokud ten uzivatel neexistuje, tak nenastartuji ani sluzby, ktere jsou vazany na toho uzivatele. Navic, umoznuje mi to konfigurovat uzivatele jen tam, kde maji mit pristup vcetne spravy ssh klicu - to ldap urcite nebude umet. To jsem tehdy zkousel s FreeIPA, ale byly tam urcite problemy, proc jsem nakonec od toho ustoupil.


Re:Generování UID pro adduser
« Odpověď #5 kdy: 22. 01. 2020, 09:26:40 »
A hlavne, stejny uid:gid potrebuji kvuli nfs, takze mit ruzna uid:gid pro stejneho uzivatele mi nepomuze...

Re:Generování UID pro adduser
« Odpověď #6 kdy: 22. 01. 2020, 10:18:17 »
volby firstid a lastid tě vůbec nemusí zajímat. uživateli musíš napevno určit uid, ne nechat systém mu nějaké přiřadit.

Re:Generování UID pro adduser
« Odpověď #7 kdy: 22. 01. 2020, 11:43:06 »
a co použít openldap a uživatele synchronizovat přes sssd na servery? Budeš pak mít centrální správu uživatelů.

Jinak také exituje možnost mít /etc/passwd a /etc/group vzdáleně, pam na to má třeba interfacy.

Nebo si přes ssh projdi všechny servery a najdi nejbližší volné uid pro uživatele a skupinu, pak můžeš na všech serverech spustit useradd se stejný uid

Bash kód může vypadat nějak takhle:

Kód: [Vybrat]
function _find_next_uid() (
    set -uo pipefail

    for host in $servers; do
        ssh "$host" "getent passwd; getent group" \
        || exit 254
    done \
    | awk ' NF > 1 { print $3}' \
    | sort -nr \
    | head -1 \
    | awk ' { print $1 + 1}'

Re:Generování UID pro adduser
« Odpověď #8 kdy: 22. 01. 2020, 12:38:21 »
Prave, ze ja centralni spravu uzivatelu potrebuji i nepotrebuji. Ohledne ldap apod, by vyzadovalo definovani nejake domeny, sifrovani, pripadne upravy ruznych konfiguracnich souboru a to se mi do automatizace davat uz nechce (prilis komplexni).

Ja tu mam tento usecase:
1] uzivatele, kteri muzou mit ruzne uid:gid v ramci skupiny serveru (napr. administratori)  s lokalnim homedir
2] uzivatele, kteri musi mit stejne uid:gid v ramci skupiny serveru kvuli nfs

Ten ansible modul "user" pouziva useradd, ktery bere n+1 volne uid, kde n je nejvyssi pouzity do limitu 60k. Klasicky adduser naopak vezme prvni volny v rozsahu min-max. Kdybych mohl v tom modulu urcit min-max, tak jsem za vodou, takhle resim, kterym smerem jit. Zatim se asi nejvic priklanim pregenerovanim uid v 2] nad max limit. Nebo prepsat ten ansible z toho modulu na shell prikaz...