Linuxで複数のユーザーを作成する方法について質問があります。これを処理するにはプログラムが必要です。次の内容で新しい users.txt ファイルを作成します。
adams:5000:Adams, John Couch:/bin/bash
atiyah:5001:Atiyah, Michael:/bin/csh
babbage:5002:Babbage, Charles:/bin/csh
baker:5003:Baker, Alan:/bin/csh
barrow:5004:Barrow, Isaac:/bin/bash
...(ファイルには70のユーザー名があります)
これらのユーザーを自動的に追加するスクリプトを書く方法を知りたいです。
答え1
ファイル名がと仮定すると、file
このスクリプトは次のことを行います。
USERNAME=$(cat file | cut -d: -f1)
echo "$USERNAME"
ID=$(cat file | cut -d: -f2)
echo "$ID"
USER_SHELL=$(cat file | cut -d, -f2 | cut -d: -f2)
echo "$USER_SHELL"
useradd -m -s "$USER_SHELL" -u "$ID" "$USERNAME"
答え2
これはタスクを完了する最小限のスクリプトです。ユーザー名またはuidが使用されていないことを確認してください。各ユーザーに対して一致するグループを作成します(gid = uidを使用)。 gidまたはグループ名がすでに存在するかどうかを確認しません(読者の練習用に残しました。ヒント:使用getent group
)。
注:以下のスクリプトはテストされていませんが、以前は同様のスクリプトを百万回作成しました(少し誇張しています)...修正する必要があるいくつかのマイナーなバグがあるかもしれません。
#! /bin/bash
# get newusers file from first arg on cmd line or default to 'newusers.txt'
nf="${1:-newusers.txt}"
# get existing usernames and uids.
names="^($(getent passwd | cut -d: -f1 | paste -sd'|'))$"
uids="^($(getent passwd | cut -d: -f3 | paste -sd'|'))$"
yesterday=$(date -d yesterday +%Y-%m-%d)
# temp file for passwords
tf=$(mktemp) ; chmod 600 "$tf"
while IFS=: read u uid gecos shell; do
gid="$uid" ; homedir="/home/$u"
useradd -e "$yesterday" -m -d "$homedir" -c "$gecos" \
-u "$uid" -g "$gid" -s "$shell" "$u"
groupadd -g "$gid" "$u"
# generate a random password for each user..
p=$(makepasswd)
echo "$u:$p" >> "$tf"
done < <(awk -F: '$1 !~ names && $2 !~ uids' names="$names" uids="$uids" "$nf")
# uncomment to warn about users not created:
#echo Users not created because the username or uid already existed: >&2
#awk -F: '$1 ~ names || $2 ~ uids' names="$names" uids="$uids" "$nf" >&2
# uncomment the cat to display the passwords in the terminal
echo ; echo "passwords are saved in $tf"
# cat "$tf"
# set passwords using `chpasswd:
chpasswd < "$tf"
インストールされていない場合、pwgen
またはmakepassword
同様のプログラムを使用してください。makepasswd
または、4つ以上のランダムな5つ以上の文字ワードを連結して、少なくとも20文字の覚えやすいパスワードを取得します。いくつかの単語を大文字にし、各単語の数字と句読点の間にランダムな1〜3を挿入して、パスワードを均等に長くし、無差別代入検索スペースを増やします。ランダムなパスワード生成は何度も再発明された。
ユーザー名とパスワード(で)を印刷し、"$tf"
それらをストリップ(各ストリップの間に空白行を残すuser:password
)に切り捨てて各ユーザーに提供できます。すぐにパスワードを変更してメモを破棄するように指示します。パスワードは期限切れに設定されているため"$yesterday"
(GNUが必要ですdate
)、ユーザーが初めてシェルにログインしたときにパスワードを変更するように求められます。
答え3
バッチモードのファイルにユーザーを追加または更新する簡単な方法は次のとおりですnewusers(8)
。影ツールスイッチこのツールバーは、少なくともDebianおよびその派生製品用のパッケージとして提供する必要があります。私が使用しているArch Linuxで使用できます。
使用方法の詳細については、次を参照してください。man newusers