kullanıcı oluşturduktan sonra giriş dizinleri oluşturun


68

Bazı kullanıcıları şununla oluşturdum:

$ useradd john

ve -mana dizini oluşturmak için parametreyi belirlemeyi ve iskelet dosyalarının her bir kullanıcıya kopyalanmasını unuttum . şimdi bunu yapmak istiyorum ve tüm kullanıcıları yeniden yaratmak istemiyorum (daha kolay bir yolu olmalı). Peki, kullanıcı dizinleri oluşturmak ve iskelet dosyalarını kopyalamak için herhangi bir yolu var mı?

Dizinleri oluşturmayı, bunları ilgili kullanıcıya boğmayı, tüm iskelet dosyalarını kopyalamayı ve ilgili kullanıcıya boğmayı düşündüm. fakat böyle bir komut varsa useradd -m, kullanıcıyı tekrar yaratmaz, fakat dizinleri yaratırsa daha iyi olur.


Bu, geniş bir kullanıcı listesiyle oldu mu?
David Rickman

Bu sorunla ilgili yaklaşık 10 kullanıcı vardı.
cd1

Yardım edemem ama Rahul'un sorunuza en iyi cevabı verdiğini hissediyorum. Belki de kabul edilen cevabını tekrar ziyaret etmelisin?

Yanıtlar:


17

Bu saçma bir fikir gibi gelebilir, ancak kullanıcılar aslında bir şey yapmıyorsa, şunları yapabilirsiniz:

cat /etc/passwd | cut -f 1 -d : >/tmp/users.list

Ardından /tmp/users.list dosyasını yalnızca istediğiniz kullanıcıları içerecek şekilde düzenleyin. O zaman yapın:


for i in `cat /tmp/users.list`
do
    userdel $i
    useradd -m $i
done

Ancak, birçok Redhat tabanlı dağıtım, ilk giriş yaptığınızda, dizinin nerede olması gerektiği / etc / passwd içinde belirtilmesi koşuluyla size yeni bir giriş dizini oluşturur.

Bunu test etmek için bir "su -" yapın ve "doğru olanı" yapıp yapmadığını görün. Olmazsa, yukarıdaki betiğin oldukça iyi çalışacağını düşünüyorum.


1
evet, yeni UID'ler ve GID'ler oluştursa da işe yaradı (ama bu bir problem değildi). fakat / etc / shadow dizinindeki şifreleri yedeklemeyi unuttum, şimdi kullanıcılar şifrelerini tekrar ayarlamak zorunda kalacaklar = /
cd1

Onları yakın zamanda yarattıysa, yapabilecekleri: cat / etc / passwd | egrep '^ \: [0-9] {4} \:' | cut -f 1 -d:> /tmp/users.list Sistem kullanıcıları değil, yalnızca geçerli kullanıcıların UID'sini almalıdır.
David Rickman

Peki ya şifreler, aynı kalıyorlar mı? Korkmuyorum!
matematik

for i in $(awk -F: '{print $1 }' /etc/passwd)
Rahul Patil

neden grep kullanın veya kedinizle ve kepçeyle kesin, neden doğrudan bu şekilde değil? kesmek -f 1 -d: </ etc / passwd> passwtmp
c4f4t0r

97

Ayrıca kullanabilirsiniz mkhomedir_helper

Usage: /sbin/mkhomedir_helper <username> [<umask> [<skeldir>]]

13
Bu aslında 10 satırlık bir betiği olmayan soruyu yanıtlayan tek cevap.
Brendan Byrd

Bu ve Pam cevap, burada en iyisidir, teşekkürler. Bunu önleyebilirsiniz eğer asla bu dosyaları el ile karıştırmayın.
h4unt3r,

1
dka @ dev-04: / $ / sbin / mkhomedir_helper dka @ dev-04: / $ cd bash: cd: / home / dka: Böyle bir dosya veya dizin yok
Dimitri Kopriwa

@DimitriKopriwa root olarak denediniz sudo /sbin/mkhomedir_helper dkami? /homeDizin ait rootkullanıcı ve bu yüzden tek bunun bir alt dizin oluşturmak için kök olmak zorunda olacağını hayal ediyorum.
Jonathan,

15

Kullanıcılar dizinini el ile oluşturmanız gerekir. Bu üç adım gerektirir:

  1. Uyumlu olarak dizin oluşturun /etc/passwd, genellikle zaten bir / home / login girişi olacaktır.
  2. / Etc / skel'den ilk dosyaları kopyala
  3. Ve sonunda doğru izinleri ayarla:

    • mkdir /home/YOU
    • cd /home/YOU
    • cp -r /etc/skel/. .
    • chown -R YOU.YOURGROUP .
    • chmod -R go=u,go-w .
    • chmod go= .

BTW: Ben -mde useradd için seçeneği her zaman özlüyorum . En azından Debian tabanlı sistemler, genel kullanım için adduserönerdiğim bir komut vermeli . -mSeçeneği kaçırdıysanız deluser, kullanıcıyı uygun seçeneklerle yeniden düşünmeye ve sonra yeniden oluşturmaya değer olabilir .

Düzenleme: -rAyrıca dizinleri kopyalamak için eklendi .


Bunu yaptım: usernameh = kullanıcı adı; mkdir / home / $ usernameh; cp / etc / skel / * /etc/skel/.* / home / $ usernameh; chown -R $ usernameh: $ usernameh / home / $ usernameh; chmod -R 755 / home / $ kullaniciadi;
Aki

Şahsen ben 755 chmod'dan hoşlanmıyorum, çünkü kullanıcıların diğer kullanıcıların evlerine göz atmasını sağlıyor. Her kullanıcının açıkça başkalarına erişim izni vermesi gerektiğini düşünüyorum. Gibi public_htmlihtiyaçlar en az xbit kümesi, ben tavsiye ederim chmod 0711her eve, public_htmlve varsayılan olarak benzer dizinleri.
matematik

ayrıca, cp -r'yi skel olarak kullanın, aksi takdirde dizinleri kopyalamaz (.ssh).
Aki

Sistemimde (ARM Linux Arch) cp -r /etc/skel/.*tekrar / etc / 'e geri döndü ve tüm verileri buradan kopyaladı (/etc/skel/.* match / etc / skel / .. umarım). Superuser.com/a/61619/22153 adresindeki çözüm çalışıyor gibi görünüyor: cp -r / etc / skel / home / user (/ home / user komutu çalıştırmadan önce bulunmamalıdır)
zpon

Sana Genişlediğinde globbing shell tahmin *ile .(dot). Yani ..eşleşti. Haklı mıyım Bu tür davranışlardan dolayı birçok kabuk varsayılan olarak bunu devre dışı bırakır. Hangi kabuğu kullanıyorsunuz?
matematik,

14
mkdir -p /home/john
chown john:john /home/john
usermod -d /home/john john

Bu, inandığım numarayı yapmalı


2
diyor: usermod: no changes. ve dizin oluşturulmadı. seçenekle de çalışmaz -m.
cd1

1
Peki. Bunun neden işe yaramadığını anladım, aksi belirtilmedikçe useradd sadece $ HOME_DIR / in evine koyardı. Şimdi otomatik olarak / home / $ USER içine koyuyor gibi görünüyor. En ucuz yol, -d / home / john2 -m john 'u kullanmak olabilir.
David Rickman 09.09

Boş ver, bu da işe yaramıyor.
David Rickman

1
En azından yeni bir şey öğrendin.
David Rickman

1
Bu yeni dosyalar için özyinelemeli / etc / skel / + chown içeriğini kopyalamayı unuttun. usermod, burada dizin kayıtlı olduğundan, oluşturulmadığından beri çalışmaz, usermod hiçbir şey yapmaz.
Aki

9

Bunun gelecekte herhangi bir kullanıcıyla sorun olmamasını önlemek için pam_mkhomedir gibi bir şey kullanabilirsiniz . pam_mkhomedir, giriş yapmadığında otomatik olarak kullanıcının giriş dizinini oluşturan ve / etc / skel (veya belirttiğiniz herhangi bir skel dizini) dosyalarıyla dolduran otomatik olarak PAM modülüdür.

Bu aynı zamanda güzel bir ölçeklenebilir yaklaşımdır, çünkü gelecekte kullanıcı havuzunuzu LDAP gibi bir dizin hizmetine geçirirseniz bu sorunu çözmeye devam edecektir.


4

Benim durumumda, ev birimi bozuktu ve çok fazla veri içermediğinden sıfırdan yeniden oluşturmaya karar verdim, ancak kullanıcıların giriş bilgilerini saklamak istiyorum, bu nedenle giriş dizinlerini bu komut dosyasıyla manuel olarak yeniden oluşturdum:

#!/bin/bash
cat /etc/passwd | while IFS=: read n x i g c d r
do
  # my system has uid started at 1000, but has nfsnobody at 65534:
  if [[ "$i" -ge 1000 && "$i" -le 65000 && ! -x "$d" ]]
  then
    cp -av /etc/skel "$d"
    chown -R "$i:$g" "$d"
    # may needed in SELinux system:
    restorecon -R "$d"
    # add your chmod as your need:
    chmod -R o-rw "$d"
  fi
done

2

İçermek /etc/login.defsüzere düzenlerseniz

CREATE_HOME yes

Daha sonra, sisteme bunu yapmamasını söylemediğiniz sürece, ev dizinleri gelecekteki kullanıcılar için otomatik olarak oluşturulur .

Diğer bir seçenek ise, oturum açma için PAM kullanmak ve ilk oturum açmada homedir öğesini otomatik olarak oluşturmak için pam_mkhomedir modülünü kullanmaktır.


0

Bir yaptıktan sonra ilk adım useraddetmektir su - <user>.

Ana dizinleri oluşturur, iskeletleri kopyalar vb. - en azından CentOS 4 kutusuna bunu sık sık yapıyorum.


0

John kullanıcısı ile giriş yapın ve bir kabuktan yazın:

xdg-user-dirs-update

Bu kadar! Sudo veya su kullanmayın, bazı dizinler oluşturmak için kök erişimine ihtiyacınız yoktur. Bir kök hesaptan şunları kullanabilirsiniz:

sudo -u john xdg-user-dirs-update

Bu şekilde, komutu john olarak uygulayacaksınız, bu hata birden fazla kullanıcıyla yapıldığında faydalı olabilir.


-1

Tam olarak mkhomedir_helper $USERNAMEkomutun yaptığı budur.


1
İki yıl önce başka bir cevabın daha önce açıkladığı bir şeyi tekrarlayarak hiçbir değer katılmaz.
kasperd

-2

/ Etc / passwd dosyasını düzenleyebilirsiniz. Son alandan ikincisi kullanıcının ana dizinidir.

greeblesnort:x:1000:1000:greeblesnort,,,:/home/greeblesnort:/bin/bash

Kullanıcılar zaten oluşturulmuş. Ev dizinleri oluşturulmadı çünkü bir anahtar unuttu.
David Rickman

Kullanıcının giriş dizinini değiştirmek istemedim, dizini oluşturmak ve kullanıcı ekledikten sonra iskelet dosyalarını uygun izinlerle kopyalamak istedim .
cd1

-2
usermod -d /home/john john

veya

usermod --home /home/john john

ve OKU

man usermod

;)


2
Soru sadece bundan daha karmaşık - ve daha iyi cevaplar var.
Esa Jokinen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.