buat direktori home setelah membuat pengguna


68

Saya membuat beberapa pengguna dengan:

$ useradd john

dan saya lupa menentukan parameter -muntuk membuat direktori home dan memiliki file kerangka disalin ke setiap pengguna. sekarang saya ingin melakukan itu, dan saya tidak ingin membuat ulang semua pengguna (pasti ada cara yang lebih mudah). jadi, apakah ada cara untuk membuat direktori pengguna dan menyalin file kerangka?

Saya berpikir tentang membuat direktori, mengunyahnya ke pengguna yang sesuai, menyalin semua file kerangka dan mengunyahnya ke pengguna yang sesuai. tetapi jika ada perintah seperti useradd -mitu tidak membuat pengguna lagi, tetapi membuat direktori, itu akan lebih baik.


Apakah ini terjadi pada daftar besar pengguna?
David Rickman

Saya memiliki sekitar 10 pengguna dengan masalah ini.
cd1

Saya merasa Rahul memiliki jawaban terbaik untuk pertanyaan Anda. Mungkin Anda harus meninjau kembali jawaban yang Anda terima?

Jawaban:


17

Ini mungkin terdengar seperti ide yang konyol, tetapi jika pengguna tidak benar-benar melakukan apa pun, Anda dapat melakukan:

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

Kemudian edit /tmp/users.list untuk hanya berisi pengguna yang Anda inginkan. Kemudian lakukan:


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

Namun, banyak distribusi berbasis Redhat akan membuat Anda direktori home baru ketika Anda pertama kali login, asalkan ditentukan di / etc / passwd di mana direktori seharusnya berada.

Untuk mengujinya, lakukan "su -" dan lihat apakah itu "hal yang benar". Jika tidak, skrip di atas akan berfungsi dengan baik, saya pikir.


1
ya, itu berhasil, meskipun itu menciptakan UID dan GID baru (tapi itu bukan masalah). tapi saya lupa untuk membuat cadangan kata sandi dari / etc / shadow, sekarang pengguna harus mengatur kata sandi mereka lagi = /
cd1

Jika ia menciptakan mereka baru-baru ini, ia mungkin dapat melakukannya: cat / etc / passwd | egrep '^ \: [0-9] {4} \:' | cut -f 1 -d:> /tmp/users.list Itu seharusnya hanya mengambil UID pengguna yang valid, dan bukan pengguna sistem.
David Rickman

Bagaimana dengan kata sandi, apakah tetap sama? Saya takut tidak!
matematika

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

mengapa menggunakan grep atau dipotong dengan kucing dan dengan pipa, mengapa tidak langsung dengan cara ini? cut -f 1 -d: </ etc / passwd> passwtmp
c4f4t0r

97

Anda juga bisa menggunakannya mkhomedir_helper

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

13
Ini adalah satu-satunya jawaban yang benar-benar menjawab pertanyaan tanpa beberapa skrip 10 baris.
Brendan Byrd

Ini dan jawaban pam adalah yang terbaik di sini, terima kasih. Jangan pernah mengacaukan file-file itu dengan tangan jika Anda bisa menghindarinya.
h4unt3r

1
dka @ dev-04: / $ / sbin / mkhomedir_helper dka dka @ dev-04: / $ cd bash: cd: / home / dka: Tidak ada file atau direktori seperti itu
Dimitri Kopriwa

@ DimitriKopriwa sudahkah Anda mencobanya sebagai root misalnya sudo /sbin/mkhomedir_helper dka? yang /homedirektori milik rootpengguna, dan jadi saya akan membayangkan salah satu harus menjadi root untuk membuat subdirektori daripadanya.
Jonathan

15

Anda harus membuat direktori pengguna secara manual. Ini membutuhkan tiga langkah:

  1. Buat direktori sesuai dengan /etc/passwd, biasanya sudah ada entri / home / login.
  2. Salin file awal dari / etc / skel
  3. Dan akhirnya mengatur hak akses:

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

BTW: Saya selalu melewatkan -mopsi untuk useradd juga. Setidaknya sistem berbasis Debian harus memiliki adduserperintah, yang saya sarankan di atas useradd. Jika Anda melewatkan -mopsi itu mungkin juga layak dipertimbangkan deluserdan kemudian menciptakan kembali pengguna dengan opsi yang tepat.

Sunting: Ditambahkan -runtuk menyalin juga direktori.


Apakah itu: usernameh = myusername; mkdir / home / $ usernameh; cp / etc / skel / * /etc/skel/.* / home / $ usernameh; chown -R $ usernameh: $ usernameh / home / $ usernameh; chmod -R 755 / home / $ usernameh;
Aki

Secara pribadi saya tidak suka chmod 755, karena memungkinkan pengguna untuk memata-matai rumah pengguna lain. Saya pikir setiap pengguna harus secara eksplisit memberikan akses kepada orang lain. Sebagai public_htmlkebutuhan setidaknya xset bit, saya akan merekomendasikan chmod 0711pada setiap rumah, public_htmldan direktori yang sama sebagai default.
matematika

juga, gunakan cp -r untuk skel, karena selain itu tidak akan menyalin direktori (.ssh).
Aki

Pada sistem saya (Arch Linux on ARM) cp -r /etc/skel/.*kambuh kembali ke / etc / dan salin semua data dari sini (/etc/skel/.* cocok dengan / etc / skel / .. Saya harapkan). Solusi dari superuser.com/a/61619/22153 tampaknya berhasil: cp -r / etc / skel / home / user (/ home / user tidak boleh ada sebelum menjalankan perintah)
zpon

Saya kira Anda shell globbing mengembang *dengan .(dot). Jadi ..cocok. Apakah saya benar? Banyak shell menonaktifkan ini per default, karena perilaku tersebut. Shell mana yang Anda gunakan?
matematika

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

Itu harus melakukan trik saya percaya


2
ia mengatakan: usermod: no changes. dan direktori tidak dibuat. itu tidak berfungsi baik dengan -mopsi.
cd1

1
Baik. Saya tahu mengapa itu tidak berhasil, useradd dulu hanya menaruh $ HOME_DIR di / home kecuali Anda menentukan sebaliknya. Sekarang tampaknya secara otomatis memasukkannya ke / home / $ USER. Cara yang murah mungkin untuk usermod -d / home / john2 -m john kemudian jalankan usermod -d / home / john -m.
David Rickman

Nevermind itu tidak berhasil juga.
David Rickman

1
Setidaknya Anda mempelajari sesuatu yang baru.
David Rickman

1
Anda lupa menyalin isi / etc / skel / + chown rekursif untuk file-file baru tersebut. usermod tidak akan berfungsi karena di sini direktori telah terdaftar tetapi tidak dibuat, usermod tidak akan melakukan apa-apa.
Aki

9

Anda dapat menggunakan sesuatu seperti pam_mkhomedir untuk mencegah hal ini menjadi masalah dengan pengguna mana pun di masa mendatang. pam_mkhomedir adalah modul PAM yang secara otomatis membuat direktori home pengguna saat login jika tidak ada, dan mengisinya dengan file dari / etc / skel (atau direktori skel apa pun yang Anda tentukan).

Ini juga merupakan pendekatan yang dapat diskalakan karena akan terus menyelesaikan masalah ini jika Anda pernah mengalihkan repositori pengguna Anda ke layanan direktori seperti LDAP di masa mendatang.


4

Dalam kasus saya, volume rumah rusak dan saya memutuskan untuk membangun kembali dari awal karena tidak banyak data yang terlibat tetapi saya ingin menyimpan informasi login pengguna, jadi saya membuat kembali direktori home secara manual dengan skrip ini:

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

Jika Anda mengedit /etc/login.defsmengandung

CREATE_HOME yes

maka direktori home akan secara otomatis dibuat untuk setiap pengguna di masa depan, kecuali jika Anda memberi tahu sistem untuk tidak melakukannya.

Opsi lain adalah menggunakan PAM untuk login, dan menggunakan modul pam_mkhomedir untuk secara otomatis membuat homedir pada login pertama.


0

Langkah pertama saya setelah melakukan useraddadalah untuk su - <user>.

Membuat direktori home, menyalin kerangka, dll - setidaknya pada kotak CentOS 4 saya paling sering melakukannya.


0

Login dengan john pengguna dan tulis dari shell:

xdg-user-dirs-update

Itu dia! Jangan gunakan sudo atau su, Anda tidak perlu akses root untuk membuat beberapa direktori. Dari akun root, Anda dapat menggunakan:

sudo -u john xdg-user-dirs-update

Dengan begitu, Anda akan menjalankan perintah sebagai john, yang dapat berguna jika Anda melakukan kesalahan dengan lebih dari satu pengguna.


-1

Inilah yang dilakukan mkhomedir_helper $USERNAMEperintah.


1
Tidak ada nilai yang ditambahkan dengan mengulangi apa yang sudah dijawab jawaban lain dua tahun lalu.
kasperd

-2

Anda cukup mengedit / etc / passwd. Bidang kedua ke terakhir adalah direktori home pengguna.

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

Mereka pengguna sudah dibuat. Direktori rumah tidak dibuat karena dia lupa sakelar.
David Rickman

Saya tidak bermaksud mengubah direktori home pengguna, saya bermaksud membuat direktori dan menyalin file kerangka ke dalamnya dengan izin yang sesuai setelah pengguna telah ditambahkan.
cd1

-2
usermod -d /home/john john

atau

usermod --home /home/john john

dan baca

man usermod

;)


2
Pertanyaannya lebih kompleks dari itu - dan sudah memiliki jawaban yang lebih baik.
Esa Jokinen
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.