programowo klonuj / etc / skel dla nowych użytkowników


11

/etc/skelto folder, który zostanie sklonowany dla nowych użytkowników. Czy istnieje możliwość zdefiniowania reguł, które należy skopiować z /etc/skelfolderu?

Na przykład szukam sposobu, że jeśli użytkownik zostanie utworzony i należy do grupy o nazwie A, klonuj /etc/skelfolder oprócz /etc/skel/not_for_a.txt. Możliwy?

Odpowiedzi:


11

Zauważ, że useraddpolecenie umożliwia określenie niestandardowego katalogu SKEL za pomocą -kopcji. Możesz utworzyć katalog / etc / skel-for-group-A bez not-for-a.txt, a następnie dodać nowych użytkowników z ich domyślną grupą jako A i określić ich katalog SKEL za pomocą polecenia:

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

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


1
useraddjest odradzane dla systemów opartych na Debianie na stronie man w moim systemie 16.04. Jeśli przyczyna tego ostrzeżenia uległa zmianie, możesz dodać ją do swojej odpowiedzi. Również 16.04 useraddi addusersą różne programy z różnymi opcjami, być może możesz edytować swoją odpowiedź dla jasności.
J. Starnes,

8
@ J.Starnes Określenie niestandardowego katalogu SKEL nie jest możliwe w adduserpoleceniu, dlatego używamy useradd. Nie jest to całkowicie odradzane: „ useraddjest narzędziem niskiego poziomu do dodawania użytkowników. W Debianie administratorzy powinni zwykle używać adduser”. Można używać tego polecenia w takich nietypowych okolicznościach.
Mukesh Sai Kumar,

8
  1. Utwórz dodatkowe skelkatalogi.

    sudo mkdir /etc/skel{A,B}
    
  2. Skopiuj zawartość /etc/skeldo /etc/skelA.

    sudo cp /etc/skel/* /etc/skelA/
    
  3. Dostosuj alternatywną zawartość katalogu skel.

  4. adduserbez homediru, ale z normalnymi ustawieniami. Wymień wielokropek na odpowiednie ustawienia.

    sudo adduser --no-create-home ... bob
    
  5. mkhomedir_helper tworzyć użytkowników homedir na podstawie alternatywnego skel reż.

    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

adduserobsługuje ograniczony sposób wykluczania plików z katalogu szkieletu. Od 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)).

Chociaż nie można ustawić tego wyrażenia regularnego z wiersza polecenia, można ustawić plik konfiguracyjny używany za pomocą --confopcji. Możesz więc utworzyć dodatkowe kopie, /etc/adduser.confktóre różnią się tylko SKEL_IGNORE_REGEXi użyj tych:

(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

adduserPolecenia można uruchomić skrypt site-specific wykonywać żadnej konfiguracji jak usuwanie plików. Tak długo, jak dopuszczalne jest rozpoczęcie od pełnej kopii, a następnie później usunięcie niektórych plików, takie podejście może działać dla Ciebie.

Ze strony podręcznika adduser (8) :

Jeśli plik /usr/local/sbin/adduser.local istnieje, zostanie wykonany po skonfigurowaniu konta użytkownika w celu przeprowadzenia lokalnej konfiguracji. Przekazane argumenty adduser.localto:

nazwa użytkownika uid gid katalog domowy

Wszystko, co musisz zrobić, to napisać skrypt, który ma cztery parametry i użyć go, aby usunąć wszystkie potrzebne pliki. Zapisz go jako /usr/local/sbin/adduser.locali upewnij się, że jest oznaczony jako wykonywalny ( chmod a+x).

Oto coś na początek:

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

Interesującą częścią, którą chcesz edytować, są linie, które wyglądają tak:

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

Możesz wpisać rzeczywistą nazwę grupy i zachowanie, które chcesz zobaczyć zamiast a)i rm not_for_a.txt.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.