web-dev-qa-db-ja.com

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

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

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

11
Nam Nguyen

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

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

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

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

  4. adduser homedirなし、ただし通常の設定。省略記号を適切な設定に置き換えます。

    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
8
J. Starnes

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
muru

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の代わりに、表示したい実際のグループ名と動作を入力できます。

3
RJHunter