it-swarm.asia

kullanıcı oluşturduktan sonra ev dizinleri oluştur

Şununla bazı kullanıcılar oluşturdum:

$ useradd john

ve ana dizini oluşturmak için -m parametresini belirtmeyi ve iskelet dosyalarını her kullanıcıya kopyalamayı unuttum. şimdi bunu yapmak istiyorum ve tüm kullanıcıları yeniden oluşturmak istemiyorum (daha kolay bir yol olmalı). yani, kullanıcı dizinleri oluşturmak ve iskelet dosyaları kopyalamak için herhangi bir yolu var mı?

Dizinleri oluşturmayı, ilgili kullanıcıya seçmeyi, tüm iskelet dosyalarını kopyalamayı ve ilgili kullanıcıya seçmeyi düşündüm. ancak useradd -m gibi kullanıcıyı yeniden oluşturmayan, ancak dizinleri oluşturan bir komut varsa daha iyi olur.

72
cd1

Bu aptalca bir fikir gibi gelebilir, ancak kullanıcılar aslında hiç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. Sonra şunları 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 oturum açtığınızda size/etc/passwd dizininde 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. Değilse, yukarıdaki komut dosyası oldukça güzel çalışacağını düşünüyorum.

17
dotwaffle

Ayrıca mkhomedir_helper

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

Kullanıcı dizinini manuel olarak oluşturmanız gerekir. Bu üç adım gerektirir:

  1. /etc/passwd İle uyumlu dizin oluşturun, genellikle zaten bir/home/login girişi olacaktır.
  2. / Etc/skel dizininden ilk dosyaları kopyala
  3. Ve son olarak doğru izinleri ayarlayın:

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

BTW: Ben de useradd için -m Seçeneğini özledim. En azından Debian tabanlı sistemlerde useradd üzerinden önerdiğim bir adduser komutu olmalıdır. -m Seçeneğini kaçırdıysanız, deluser öğesini düşünüp, kullanıcıyı uygun seçeneklerle yeniden oluşturmayı düşünmek de faydalı olabilir.

Düzenleme: Ayrıca dizinleri kopyalamak için -r Eklendi.

18
math
mkdir -p /home/john
chown john:john /home/john
usermod -d /home/john john

Bu inandığım hile yapmalı

14
David Rickman

Bunun gelecekte herhangi bir kullanıcıyla sorun olmasını önlemek için pam_mkhomedir gibi bir şey kullanabilirsiniz. pam_mkhomedir, kullanıcının oturum açmada yoksa otomatik olarak/etc/skel (veya belirttiğiniz skel dizini) dosyalarıyla dolduran bir PAM modülüdür.

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

9
jgoldschrafe

Benim durumumda, ev hacmi bozuk ve ben çok fazla veri dahil beri sıfırdan yeniden inşa karar verdi ama kullanıcıların giriş bilgilerini tutmak istiyorum, bu yüzden bu komut dosyası ile ev dizinleri el ile yeniden yarattı:

#!/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

/etc/login.defs içerecek

CREATE_HOME yes

sisteme not belirtmedikçe, gelecekteki kullanıcılar için ev dizinleri otomatik olarak oluşturulacaktır.

Başka bir seçenek de girişler için PAM kullanmak ve ilk girişte homedir'i otomatik olarak oluşturmak için pam_mkhomedir modülünü kullanmaktır.

2
Jenny D

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

Ev dizinlerini oluşturur, iskeletleri kopyalar, vb. - en azından CentOS 4 kutusunda en sık bunu yaparım.

0
warren

John kullanıcısıyla giriş yap ve bir Shell'den yaz:

xdg-user-dirs-update

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

Sudo -u john xdg-user-dirs-update

Bu şekilde, komutu birden fazla kullanıcıyla yaptıysanız yararlı olabilecek komutu john olarak uygulayacaksınız.