klon / etc / skel terprogram untuk pengguna baru

11

/etc/skeladalah folder yang akan dikloning untuk pengguna baru. Apakah ada cara yang memungkinkan kita menentukan aturan apa yang akan disalin dari /etc/skelfolder?

Sebagai contoh, saya mencari cara bahwa jika pengguna dibuat dan milik grup bernama A, /etc/skelkecuali folder /etc/skel/not_for_a.txt. Bisa jadi?

Nam Nguyen
sumber

Jawaban:

11

Perhatikan bahwa useraddperintah memungkinkan Anda untuk menentukan direktori SKEL khusus menggunakan -kopsi. Anda dapat membuat direktori / etc / skel-for-group-A tanpa not-for-a.txt, dan kemudian menambahkan pengguna baru dengan grup default mereka sebagai A, dan tentukan direktori SKEL mereka menggunakan perintah:

useradd username -g groupA -k /etc/skel-for-group-A -m

Rujuk: http://manpages.ubuntu.com/manpages/trusty/man8/useradd.8.html

Mukesh Sai Kumar
sumber
1
useraddtidak disarankan untuk sistem berbasis debian di halaman manual pada sistem 16.04 saya. Jika alasan kehati-hatian ini berubah, bisakah Anda menambahkannya ke jawaban Anda. Juga pada 16,04 useradddan adduserprogram yang berbeda dengan opsi yang berbeda, mungkin Anda dapat mengedit jawaban Anda untuk kejelasan.
J. Starnes
8
@ J.Starnes Untuk menentukan direktori SKEL khusus tidak dimungkinkan dalam adduserperintah, jadi kami gunakan useradd. Itu tidak sepenuhnya tidak disarankan: " useraddadalah utilitas tingkat rendah untuk menambah pengguna. Di Debian, administrator biasanya harus menggunakan adduser." Tidak apa-apa untuk menggunakan perintah ini dalam keadaan yang tidak biasa seperti ini.
Mukesh Sai Kumar
8
  1. Buat skeldirektori tambahan .

    sudo mkdir /etc/skel{A,B}
    
  2. Salin konten /etc/skelke /etc/skelA.

    sudo cp /etc/skel/* /etc/skelA/
    
  3. Kustomisasi konten direktori skel alternatif.

  4. addusertanpa homedir, tetapi dengan pengaturan normal. Ganti elipsis dengan pengaturan yang sesuai.

    sudo adduser --no-create-home ... bob
    
  5. mkhomedir_helper untuk membuat pengguna homedir berdasarkan alternatif skel dir.

    sudo mkhomedir_helper bob /etc/skelA
    
#!/bin/bash
### a bare bones dumb script to create a user with a homedir based on an alternitive skeldir
adduseropt="--no-create-home --ingroup"
# assumes $1 will be user TODO add sanity check
# Assumes $2 will be alternitive skeldir TODO add sanity check
# assumes $3 will be a group TODO add sanity check
sudo adduser --no-create-home $adduseropt $3 $1
sudo mkhomedir_helper $1 $2
J. Starnes
sumber
3

addusertidak mendukung cara terbatas untuk mengecualikan file dari direktori kerangka. Dari man adduser.conf:

SKEL_IGNORE_REGEX
    Files  in  /etc/skel/  are  checked  against this regex, and not
    copied to the newly created home directory if they match.   This
    is  by default set to the regular expression matching files left
    over from unmerged config files (dpkg-(old|new|dist)).

Meskipun Anda tidak dapat mengatur regex ini dari baris perintah, Anda dapat mengatur file config yang digunakan menggunakan --confopsi. Jadi, Anda dapat membuat salinan tambahan /etc/adduser.confyang hanya berbeda pada SKEL_IGNORE_REGEX, dan menggunakannya:

(grep -v '^SKEL_IGNORE_REGEX' /etc/adduser.conf; printf "%s\n" 'SKEL_IGNORE_REGEX="not_for_a.txt"') > /etc/adduser_A.txt
sudo adduser --conf /etc/adduser_A.txt ...
muru
sumber
3

The adduserperintah dapat menjalankan script spesifik lokasi untuk melakukan setup seperti menghapus file. Selama dapat diterima untuk memulai dengan salinan lengkap dan kemudian menghapus beberapa file setelahnya, maka pendekatan ini dapat bekerja untuk Anda.

Dari halaman manual adduser (8) :

Jika file /usr/local/sbin/adduser.local ada, itu akan dieksekusi setelah akun pengguna telah diatur untuk melakukan pengaturan lokal. Argumen yang diteruskan adduser.localadalah:

direktori rumah nama pengguna uid gid

Jadi yang perlu Anda lakukan adalah menulis skrip yang mengambil empat parameter dan menggunakannya menghapus file yang Anda butuhkan. Simpan sebagai /usr/local/sbin/adduser.localdan pastikan itu ditandai executable ( chmod a+x).

Berikut ini sesuatu untuk Anda mulai:

#!/bin/bash
## Site-specific setup for newly-created users.
## adduser(8) will call this script after setting up a new user.

set -euo pipefail
if [[ "$#" != 4 ]]; then
  echo "usage: $0 username uid gid home" > /dev/stderr
fi
NEW_USERNAME="${1:?}"
NEW_UID="${2:?}"
NEW_GID="${3:?}"
NEW_HOME="${4:?}"

# The groups command outputs a space-separated list of group names
IFS=' '
for group in $(groups "${NEW_USERNAME}"); do
   case "${group}" in
     a)
       [[ "${VERBOSE}" > 0 ]] && echo Removing file for a
       rm "${NEW_HOME}/not_for_a.txt"
       ;;
     b)
       [[ "${VERBOSE}" > 0 ]] && echo Removing dir for b
       rm -r "${NEW_HOME}/not_for_b/"
       ;;
     *)
       [[ "${VERBOSE}" > 1 ]] && echo No special setup required for $group
       ;;
   esac
done

Bagian yang menarik, yang ingin Anda edit, adalah garis-garis yang terlihat seperti ini:

     a)
       [[ "${VERBOSE}" > 0 ]] && echo Removing file for a
       rm "${NEW_HOME}/not_for_a.txt"
       ;;

Anda dapat mengisi nama grup aktual dan perilaku yang ingin Anda lihat alih-alih a)dan rm not_for_a.txt.

RJHunter
sumber