programmgesteuert klonen / etc / skel für neue Benutzer

11

/etc/skelist ein Ordner, der für neue Benutzer geklont wird. Gibt es eine Möglichkeit, Regeln zu definieren, was aus dem /etc/skelOrdner kopiert werden soll ?

Zum Beispiel suche ich nach einer Möglichkeit, dass, wenn ein Benutzer erstellt wird und zur Gruppe mit dem Namen gehört A, der /etc/skelOrdner klonen außer /etc/skel/not_for_a.txt. Möglich?

Nam Nguyen
quelle

Antworten:

11

Beachten Sie, useradddass Sie mit diesem Befehl ein benutzerdefiniertes SKEL-Verzeichnis mit der -kOption angeben können . Sie können ein Verzeichnis / etc / skel-for-group-A ohne das Verzeichnis erstellen not-for-a.txtund dann neue Benutzer mit der Standardgruppe A hinzufügen und ihr SKEL-Verzeichnis mit dem folgenden Befehl angeben:

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

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

Mukesh Sai Kumar
quelle
1
useraddwird für Debian-basierte Systeme in der Manpage auf meinem 16.04-System nicht empfohlen. Wenn sich der Grund für diese Vorsicht geändert hat, können Sie ihn Ihrer Antwort hinzufügen. Auch am 16.04 useraddund addusersind verschiedene Programme mit unterschiedlichen Optionen, vielleicht könnten Sie Ihre Antwort aus Gründen der Klarheit bearbeiten.
J. Starnes
8
@ J.Starnes Das Angeben eines benutzerdefinierten SKEL-Verzeichnisses ist im adduserBefehl nicht möglich , daher verwenden wir useradd. Es ist nicht völlig entmutigt: „ useraddist ein niedriges Niveau Dienstprogramm Benutzer für das Hinzufügen Auf Debian - Administratoren sollten. In der Regel verwenden , adduserstatt.“ Es ist in Ordnung, diesen Befehl unter ungewöhnlichen Umständen wie diesen zu verwenden.
Mukesh Sai Kumar
8
  1. Erstellen Sie zusätzliche skelVerzeichnisse.

    sudo mkdir /etc/skel{A,B}
    
  2. Kopieren Sie den Inhalt von /etc/skelnach /etc/skelA.

    sudo cp /etc/skel/* /etc/skelA/
    
  3. Passen Sie den Inhalt des alternativen Skel-Verzeichnisses an.

  4. adduserohne homedir, aber mit sonst normalen einstellungen. Ersetzen Sie die Auslassungspunkte durch die entsprechenden Einstellungen.

    sudo adduser --no-create-home ... bob
    
  5. mkhomedir_helper um Benutzer homedir basierend auf alternativen Skel Dir zu erstellen.

    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
quelle
3

adduserunterstützt eine eingeschränkte Möglichkeit, Dateien aus dem Skeleton-Verzeichnis auszuschließen. Von 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)).

Während Sie diesen regulären Ausdruck nicht über die Befehlszeile festlegen können, können Sie die verwendete Konfigurationsdatei mit der --confOption festlegen . Sie können also zusätzliche Kopien davon erstellen /etc/adduser.conf, die sich nur auf der unterscheiden SKEL_IGNORE_REGEX, und diese verwenden:

(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
quelle
3

Der adduserBefehl kann ein ortsspezifisches Skript ausführen, um alle Einstellungen wie das Entfernen von Dateien vorzunehmen. Solange es akzeptabel ist, mit einer vollständigen Kopie zu beginnen und anschließend einige Dateien zu löschen, könnte dieser Ansatz für Sie funktionieren.

Aus der Adduser (8) Manpage :

Wenn die Datei /usr/local/sbin/adduser.local vorhanden ist, wird sie ausgeführt, nachdem das Benutzerkonto eingerichtet wurde, um lokale Einstellungen vorzunehmen. Die übergebenen Argumente adduser.localsind:

Benutzername uid gid Home-Verzeichnis

Sie müssen also nur ein Skript schreiben, das vier Parameter verwendet, und damit alle benötigten Dateien entfernen. Speichern Sie es als /usr/local/sbin/adduser.localund stellen Sie sicher, dass es als ausführbar ( chmod a+x) markiert ist .

Hier ist etwas, um Ihnen den Einstieg zu erleichtern:

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

Der interessante Teil, den Sie bearbeiten möchten, sind die Zeilen, die wie folgt aussehen:

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

Sie können den tatsächlichen Gruppennamen und das Verhalten eingeben, das Sie anstelle von a)und sehen möchten rm not_for_a.txt.

RJHunter
quelle