背景
世間的にどの程度ファイルサーバとしてsambaを利用しているか分からないが、自身の環境ではsambaを用いてファイルサーバを構築していた。
頻繁に社員の出入りがある関係でsambaのユーザをアクセス権制御を目的として登録や削除を行なっていたのだが、手入力で毎日大量のユーザを登録・削除することに嫌気がさしたため簡単なスクリプトを作った。
環境
- OS
Amazon Linux 2 - samba
Version 4.10.4
事前準備
以下のコードをコピペで利用する場合は事前に/tools/usrpass.list
を作成しておくこと。中身は以下のように1行ごとにユーザアカウント名とパスワードをスペース区切りで事前に用意しておく。
tanaka hogehoge
sato fugafuga
コード
基本的な動作としては以下の通り。
- リストからユーザを1行ずつ読み込む
- 読み込んだユーザ名とパスワードは各変数に代入
- 既にユーザが登録されている場合にはユーザ登録をスキップ
- 未登録ユーザの場合はsmbpasswdを使ってユーザ登録とパスワードを同時に実行
#!/bin/bash
while read line
do
#echo $line
#リストを1行ずつ読み込んでIDとパスワードを変数に格納
usrname=`echo $line | awk '{print $1}'`
passwd=`echo $line | awk '{print $2}'`
#既存のユーザでないか確認するための1行
pdbedit -L -w | egrep "^""$usrname"":" >> /dev/null
#既存ユーザの場合は登録処理をスキップ、未登録の場合はワンライナーで登録
if [ $? == 0 ] ; then
echo "$usrname is already registered."
else
echo "Set $usrname registration and password"
(echo $passwd ; echo $passwd) | smbpasswd -s -a $usrname
fi
echo "Delete the contents of the file!!!"
改善メモ
- セキュリティの観点から作業後は自動でリストの中身を削除するようにする
- 削除用の処理も追加して、スクリプトの引数としてaddやdeleteなどを指定することで使い分けることができるようにする