/etc/skel
は、新規ユーザー用に複製されるフォルダーです。 /etc/skel
フォルダからコピーするルールを定義できる方法はありますか?
たとえば、ユーザーが作成され、A
というグループに属している場合、/etc/skel
を除く/etc/skel/not_for_a.txt
フォルダーを複製する方法を探しています。可能?
useradd
コマンドを使用すると、-k
オプションを使用してカスタムSKELディレクトリを指定できます。 not-for-a.txt
なしで/ etc/skel-for-group-Aディレクトリを作成し、デフォルトグループをAとして新しいユーザーを追加し、次のコマンドを使用してSKELディレクトリを指定できます。
useradd username -g groupA -k /etc/skel-for-group-A -m
参照: http://manpages.ubuntu.com/manpages/trusty/man8/useradd.8.html
追加のskel
ディレクトリを作成します。
Sudo mkdir /etc/skel{A,B}
/etc/skel
の内容を/etc/skelA
にコピーします。
Sudo cp /etc/skel/* /etc/skelA/
代替のskelディレクトリの内容をカスタマイズします。
adduser
homedirなし、ただし通常の設定。省略記号を適切な設定に置き換えます。
Sudo adduser --no-create-home ... bob
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
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 ...
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
の代わりに、表示したい実際のグループ名と動作を入力できます。