yeni kullanıcılar için programlı olarak klon / etc / skel


11

/etc/skelyeni kullanıcılar için klonlanacak bir klasördür. /etc/skelKlasörden ne kopyalayacağımızla ilgili kuralları tanımlamanın olası bir yolu var mı ?

Örneğin, bir kullanıcı oluşturulursa ve grubun bir grubuna aitse A, klon /etc/skelklasörü dışında bir yol arıyorum /etc/skel/not_for_a.txt. Mümkün?

Yanıtlar:


11

O Not useraddkomutu kullanarak özel SKEL dizini belirlemenizi sağlar -kseçeneği. / Etc / for-group-for-group-A dizini olmadan not-for-a.txtve sonra kendi varsayılan gruplarına sahip yeni kullanıcıları A olarak ekleyebilir ve şu komutu kullanarak SKEL dizinlerini belirtebilirsiniz:

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

Bakınız: http://manpages.ubuntu.com/manpages/trusty/man8/useradd.8.html


1
useradd16.04 sistemimdeki man sayfasında debian tabanlı sistemler için önerilmez. Bu uyarının nedeni değiştiyse, cevabınıza ekleyebilirsiniz. Ayrıca 16.04'te useraddve adduserfarklı seçeneklere sahip farklı programlardır, belki cevabınızı netlik için düzenleyebilirsiniz.
J. Starnes

8
@ J.Starnes Özel SKEL dizini belirtmek komutta mümkün değildir adduser, bu nedenle kullanıyoruz useradd. Tamamen cesaret kırılmaz: " useraddkullanıcı eklemek için düşük düzeyli bir yardımcı programdır. Debian'da yöneticiler genellikleadduser bunun yerine kullanmalıdır ." Bu komutu, bunun gibi olağandışı koşullarda kullanmakta sorun yoktur.
Mukesh Sai Kumar

8
  1. Ek skeldizinler oluşturun .

    sudo mkdir /etc/skel{A,B}
    
  2. İçeriğini kopyalayın /etc/skeliçin /etc/skelA.

    sudo cp /etc/skel/* /etc/skelA/
    
  3. Alternatif skel dizini içeriğini özelleştirin.

  4. adduserbir homedir olmadan, ancak normal ayarlarla. Üç noktayı uygun ayarlarla değiştirin.

    sudo adduser --no-create-home ... bob
    
  5. mkhomedir_helper alternatif skel dir dayalı kullanıcılar homedir oluşturmak için.

    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

3

adduserdosyaları iskelet dizininden hariç tutmanın sınırlı bir yolunu destekler. Gönderen 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)).

Bu normal ifadeyi komut satırından ayarlayamasanız da, --confseçeneği kullanarak kullanılan yapılandırma dosyasını ayarlayabilirsiniz . Böylece /etc/adduser.confyalnızca üzerinde farklı olan ek kopyalar oluşturabilir SKEL_IGNORE_REGEXve bunları kullanabilirsiniz:

(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 ...

3

adduserKomut dosyaları kaldırma gibi herhangi bir kurulum yapmak için bir siteye özgü komut dosyasını çalıştırabilirsiniz. Tam bir kopyayla başlayıp daha sonra bazı dosyaları silmeniz kabul edilebilir olduğu sürece, bu yaklaşım sizin için işe yarayabilir.

Gönderen İÇİNadduser (8) kılavuz sayfasında :

Dosya /usr/local/sbin/adduser.local varsa, herhangi bir yerel kurulum yapmak için kullanıcı hesabı kurulduktan sonra yürütülür. Aktarılan argümanlar adduser.local:

kullanıcı adı uid gid giriş dizini

Tek yapmanız gereken dört parametre alan bir komut dosyası yazmak ve ihtiyacınız olan dosyaları kaldırmak için kullanmaktır. Farklı kaydedin /usr/local/sbin/adduser.localve yürütülebilir ( chmod a+x) olarak işaretlendiğinden emin olun .

İşte başlamanız için bir şey:

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

Düzenlemek isteyeceğiniz ilginç kısım, şuna benzeyen satırlardır:

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

Gördüğünüz yerine istediğiniz gerçek grup adı ve davranış doldurabilirsiniz a)ve rm not_for_a.txt.

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.