Portál AbcLinuxu, 9. května 2025 22:05

Dotaz: Přenos uživat. účtů z jednoho systému na nový

24.7.2006 09:35 pavel
Přenos uživat. účtů z jednoho systému na nový
Přečteno: 173×
Odpovědět | Admin
Potřebuji přenést kompletní účty uživatelů (login, heslo, home adresář) ze starého linuxového serveru (RedHat 7.x) na nový(RedHat EL 4). Jak to nejjednodušeji a bezproblému provést.

Dik moc Pavel
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

24.7.2006 10:20 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Přenos uživat. účtů z jednoho systému na nový
Odpovědět | | Sbalit | Link | Blokovat | Admin
S největší pravděpodobností bude směrodatný obsah adresáře /home, dále příslušné řádky v /etc/passwd, v /etc/shadow a (eventuelně) /etc/group. Napiš, kolik těch uživatelů máš, jestli se na to vyplatí psát skript nebo to nějak zvládneš ručně.
24.7.2006 10:48 pavel
Rozbalit Rozbalit vše Re: Přenos uživat. účtů z jednoho systému na nový
Je jich celkem dost. Nekolik stovek. :-(
24.7.2006 11:08 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Přenos uživat. účtů z jednoho systému na nový
Obvykle by mělo pomoci něco jako
  awk -F: '{ if ($3>=1000 && $3<65500) print; }' /etc/passwd
Konstanty 1000 a 65500 si samozřejmě upravte podle svého systému.
24.7.2006 11:27 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Přenos uživat. účtů z jednoho systému na nový
Záleží na situaci, ale jako celkem bezpečný způsob se mi zdá tohle:
#!/usr/bin/env python
import os
passwd = {}
for line in file('/etc/passwd'):
    line = line.strip()
    if not line: break
    splitted = line.split(':')
    print splitted
    homedir = splitted[5]
    user = splitted[0]
    passwd[splitted[5]] = (user, line)

shadow = {}
for line in file('/etc/shadow'):
    line = line.strip()
    if not line: break
    splitted = line.split(':')
    shadow[splitted[0]] = line
    
homebase = '/home'
frompasswd = []
fromshadow = []
for homedir in os.listdir('/home'):
    fullpath = os.path.join(homebase, homedir)
    if not os.path.isdir(fullpath): continue #we want
                                             #directories only
    try:
        user, line_passwd = passwd[fullpath]
        frompasswd.append(line_passwd)
        fromshadow.append(shadow[user])
    except KeyError:
        pass

print '-' * 50
print '\n'.join(frompasswd)
print '-' * 50
print '\n'.join(fromshadow)
Je to program, který projde celý adresář /home a v něm vyhledá podadresáře. Jestliže najde adresář, který se zároveň vyskytuje jako domovský adresář nějakého uživatele v /etc/passwd, tak zjistí, jaký je to uživatel a najde jeho záznam v /etc/shadow.
Takhle to všechno prohledá a na závěr vypíše, kterou část /etc/shadow a /etc/passwd je potřeba zkopírovat.

Předpokládá se, že všichni uživatelé mají domovský adresář v /home. Tímto způsobem se dají eliminovat "mrtvé duše".
Je potřeba to pouštět jako root (hahaha :-)
24.7.2006 11:31 pavel
Rozbalit Rozbalit vše Re: Přenos uživat. účtů z jednoho systému na nový
Dik moc, to vypada dobre.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.