プログラムで新規ユーザー用に/ etc / skelをクローンします


11

/etc/skel新規ユーザー用に複製されるフォルダーです。/etc/skelフォルダーからコピーするものをルールを定義できる方法はありますか?

たとえば、ユーザーが作成され、という名前のグループに属している場合、を除くフォルダーをA複製する方法を探してい/etc/skelます/etc/skel/not_for_a.txt。可能?

回答:


11

このuseraddコマンドを使用すると、-kオプションを使用してカスタムSKELディレクトリを指定できます。を使用せずに/ etc / skel-for-group-Aディレクトリをnot-for-a.txt作成し、デフォルトグループをAとして新しいユーザーを追加し、次のコマンドを使用してSKELディレクトリを指定できます。

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

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


1
useradd私の16.04システムのmanページで、debianベースのシステムにはお勧めしません。この警告の理由が変わった場合は、回答に追加できます。また、16.04 useraddadduserは、さまざまなオプションを持つさまざまなプログラムがあります。おそらく、明確にするために回答を編集できます。
J.スターネス

8
@ J.Starnes adduserコマンドでカスタムSKELディレクトリを指定することはできないため、を使用しますuseradd。「これはuseraddユーザーを追加するための低レベルのユーティリティです。Debianでは、管理者が通常adduser代わりに使用する必要があります。」このような異常な状況でこのコマンドを使用しても問題ありません。
ムケシュサイクマール

8
  1. 追加のskelディレクトリを作成します。

    sudo mkdir /etc/skel{A,B}
    
  2. の内容を/etc/skelにコピーし/etc/skelAます。

    sudo cp /etc/skel/* /etc/skelA/
    
  3. 代替のskelディレクトリの内容をカスタマイズします。

  4. adduserhomedirなしで、それ以外は通常の設定で。省略記号を適切な設定に置き換えます。

    sudo adduser --no-create-home ... bob
    
  5. mkhomedir_helper 代替のskel dirに基づいてユーザーhomedirを作成します。

    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

adduserスケルトンディレクトリからファイルを除外する限定的な方法をサポートします。から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)).

コマンドラインからこの正規表現を設定することはできませんが、--confオプションを使用して使用する設定ファイルを設定できます。そのため、/etc/adduser.confでのみ異なるコピーを追加作成し、SKEL_IGNORE_REGEXそれらを使用できます。

(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

このadduserコマンドは、サイト固有のスクリプトを実行して、ファイルの削除などのセットアップを実行できます。完全なコピーから始めて、その後いくつかのファイルを削除することが許容される限り、このアプローチはあなたのために働く可能性があります。

以下からのadduser(8)のmanページ

ファイル/usr/local/sbin/adduser.local が存在する場合、ローカルセットアップを行うためにユーザーアカウントがセットアップされた後に実行されます。渡される引数 adduser.localは次のとおりです。

ユーザー名uid gidホームディレクトリ

したがって、必要なのは、4つのパラメーターを受け取るスクリプトを作成し、それを使用して必要なファイルを削除するだけです。名前を付けて保存し、/usr/local/sbin/adduser.local実行可能とマークされていることを確認します(chmod a+x)。

開始する方法は次のとおりです。

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

編集する興味深い部分は、次のような行です。

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

a)およびの代わりに、表示したい実際のグループ名と動作を入力できますrm not_for_a.txt

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.