この記事では、Linuxファイルシステムアーキテクチャについて学び、その知識を使用してLinuxユーザーを作成するためのシェルスクリプトを作成するという私の旅について説明します。大学2年生のときに、ユーザーの概念が頭に浮かんだときにLinuxファイルシステムについて学びました。 Linuxベースのオペレーティングシステムでユーザーを作成しようとしました。
このスクリプトは、Red Hatベースのオペレーティングシステム用に設計されており、若干の変更を加えて他のLinuxディストリビューションにも使用できます。 ksh
を使用していることに注意してください 。
[次のこともお勧めします:Linuxシステム管理者の基本:ユーザーアカウント管理]
焦点は、/etc
にあるファイルにあります システム構成情報を格納するディレクトリ。システムファイルを操作して新しいユーザーを作成する方法を示します。ルートアクセスは必須です。
Linuxで新しいユーザーを作成するときに変更されるファイルは次のとおりです。
- / etc / passwd
- / etc / shadow
- / etc / group
- / etc / gshadow
- / home / USER
- / var / spool / mail / USER
システムは、ユーザーとユーザーのグループに所有権を設定することで、ユーザー(USER)のホームディレクトリとメールボックスにセキュリティを追加します。
/ etc / passwd
このファイルには、ユーザー名、ユーザーID、グループID、フルネーム(コメント)、シェルなどのユーザーに関する情報が格納されます。データは次の形式で保存されます: UserName:Link:UserID:GroupID:Comment:HomeDirectory:Shell
ファイルの各行には、ユーザーに関する次の情報が含まれています。
- ユーザー名:簡単にアクセスできるようにユーザーに提供されるユーザー名を示します。
- リンク:
/etc/shadow
に保存されているユーザーのパスワードを表します ファイル。 xの場合 が削除されると、パスワードはチェックされず、ユーザーはログインできなくなります。 - UserID:一般にUIDと呼ばれ、ユーザーを一意に表すために使用されます。範囲は0〜65,535です。
- UID=0->rootユーザーアカウント
- UID =1,000〜60,000->非ルート/一般アカウント
- UID =1〜999および60,001〜65,535->システムユーザー
- GroupID:UserIDと同じですが、グループを一意に表すために使用されます。
- コメント:ユーザーに関する追加情報。通常、ユーザーのフルネーム。
- HomeDirectory:ユーザーのホームディレクトリの場所。
- シェル:ユーザーのデフォルトのシェル。
/ etc / shadow
このファイルには、ユーザーのパスワードに関する情報が保存されており、暗号化された形式でパスワードが含まれています。
データは次の形式で保存されます:
UserName:EncryptedPassword:LastPasswordChange:MinPwdAge:MaxPwdAge:WarningPeriod:InactivityPeriod:ExpirationDate:Unused
- ユーザー名:ユーザーに提供されたユーザー名を示します。
- 暗号化されたパスワード:パスワードは、sha256、sha512、md5などのハッシュアルゴリズムを使用して暗号化され、ファイルに保存されます。
- 最後のパスワード変更:パスワードが最後に変更されてからのエポック日付を保存します。
- 最小パスワード経過時間:次のパスワード変更までの日数を保存します。
- デフォルトでは、0->最低年齢なし
- パスワードの最大有効期間:ユーザーがパスワードを変更する必要がある最大日数を格納します。
- デフォルトでは、99,999->最大年齢なし
- 警告期間:パスワードを変更するために警告が表示されるまでの日数。
- デフォルトでは、NULL
- 非アクティブ期間:ユーザーパスワードの有効期限が切れてからアカウントが無効になるまでの日数を指定します。
- 有効期限:アカウントが無効になるまでのエポック日。
- 未使用:将来の使用のために予約されています。
その他のファイル
-
/etc/group
および/etc/gshadow
ファイルはLinuxのグループ用であり、データを GroupName:Link:GroupID:MemberListの形式で保存します およびGroupName:Password:Reserved:MemberList それぞれ。 - ユーザーのホームディレクトリは、
/home
に作成されます。/etc/skel
からのデータを含むディレクトリ フォルダ。 -
/var/spool/mail
に作成されたメールボックス ディレクトリ。
スクリプト
以下は、新しいユーザーをパーツに分割して作成するために作成したシェルスクリプトです。
uname=$1
id -u $uname&>/dev/null
まず、ユーザーがすでに存在するかどうかを確認します。
if [ $? -ne 0 ]
then
for i in {1000..60000}
do
id -u $i&>/dev/null & id -g $i&>/dev/null
if [ $? -ne 0 ]
then
break
fi
done
uid=$i
echo "$uname:x:$uid:$uid::/home/$uname:/bin/bash">>/etc/passwd
lastpwdchange=$(datediff 1970-01-01 `date +"%Y-%m-%d"`)
echo "$uname::$lastpwdchange:0:99999:7:::">>/etc/shadow
echo "$uname:x:$uid:">>/etc/group
echo "$uname:!::">>/etc/gshadow
mkdir /home/$uname
cp -a /etc/skel/. /home/$uname/
chown $uname:$uname /home/$uname/ -R
chmod 0700 /home/$uname/ -R
touch /var/spool/mail/$uname
chown $uname:$uname /var/spool/mail/$uname
echo "User successfully created"
else
echo "User already exists : try using a unique username">&2
fi
ユーザーがすでに存在する場合は、プログラムを終了するか、ユーザーを作成します。
完全なコードはGitHubで公開されています。
シェルスクリプトを実行する
[編集者注:このスクリプトはかなり単純に見えるかもしれませんが、スクリプトをインストールしたり、システムへのアクセス許可をエスカレートしたりする前に、見つけたスクリプトを常に理解して信頼してください。 ]
1)シェルスクリプトをディレクトリ/usr/bin/
に配置します コマンドとしてアクセスできるようにします。
2)rootユーザーの実行権限を追加します:
# chmod u+x /usr/bin/ksh_useradd
3)引数としてユーザー名を使用してコマンドを実行します:
ksh_useradd USERNAME
4)スクリプトはユーザーアカウントを作成します。最初にログインする前に、新しいユーザーのパスワードを設定する必要があります。
[無料のオンラインコース:Red HatEnterpriseLinuxの技術概要。 ]
まとめ
このスクリプトを使用すると、useradd
のスイッチを覚えるよりも、ユーザーを作成するプロセスが少し簡単になります。 指図。もちろん、useradd
を使用できます ユーザーを作成し、権限を設定し、ユーザーのメールボックスを作成するコマンドですが、このスクリプトはuseradd
と同じアクションを実行します また、ファイルシステムの舞台裏で何が起こっているのかを学ぶのに役立ちます。上記の説明が、ユーザー作成関連の構成ファイルとそのフィールドをもう少し明確に理解するのに役立つことを願っています。