回答:
この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
adduser
コマンドでカスタムSKELディレクトリを指定することはできないため、を使用しますuseradd
。「これはuseradd
ユーザーを追加するための低レベルのユーティリティです。Debianでは、管理者が通常adduser
代わりに使用する必要があります。」このような異常な状況でこのコマンドを使用しても問題ありません。
追加の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
。
useradd
私の16.04システムのmanページで、debianベースのシステムにはお勧めしません。この警告の理由が変わった場合は、回答に追加できます。また、16.04useradd
にadduser
は、さまざまなオプションを持つさまざまなプログラムがあります。おそらく、明確にするために回答を編集できます。