構成管理ツールである「itamae」を使ってユーザを作成してみます。itamae は Ruby で実装されている為、Ruby がインストールされている必要があります。今回は CentOS7 / Ruby 2.3.1 環境でテストしました。
itamae のインストール
gem でインストールします。
gem install itamae
パスワードを生成する
後で作成するレシピ中でパスワードを指定する際、(平文では無く)パスワードを暗号化した文字列を指定する必要があります。これには gem でインストール出来る unix-crypt に付随する mkunixcrypt というツールを使うと簡単に実行出来ます。
gem install unix-crypt
「-p」オプションでパスワード文字列を渡せます。但し、-p オプションを使うと insecure だよ、と警告が表示されます。
$ mkunixcrypt -p PASSWORD warning: providing a password on the command line is insecure $6$vrjEadB/KhsxiTct$sJ4UKmSTOHGxocAdpQUN9ccZfzDUlnAIbU/YGYhkdK7BoFoqVLm/ZDV0xr9KRBaeTGypcTHF2TzsnE.Yu9UFH0
レシピを用意する
ユーザを作成するレシピを用意しておきます。今回は「CREATE-USER.rb」というファイルを以下の内容で新規作成しました。
$ cat CREATE-USER.rb USER="USER1" GROUP="GROUP1" PASSWORD="$6$vrjEadB/KhsxiTct$sJ4UKmSTOHGxocAdpQUN9ccZfzDUlnAIbU/YGYhkdK7BoFoqVLm/ZDV0xr9KRBaeTGypcTHF2TzsnE.Yu9UFH0" group GROUP do action:create end user USER do action :create gid GROUP password end
テスト実行してみる(dry-run)
itamae は設定変更はせずに、テストだけを実行させることが出来ます。このテスト実行のことを「dry-run」と呼びます。今回はローカルサーバに対して itamae を dry-run してみます。
$ itamae local CREATE-USER.rb --dry-run INFO : Starting Itamae... INFO : Recipe: /home/user/CREATE-USER.rb INFO : user[USER1] exist will change from 'false' to 'true'
実行してみる
dry-run でエラーが検知されなかったので、本番実行してみます。
# itamae local CREATE-USER.rb INFO : Starting Itamae... INFO : Recipe: /root/CREATE-USER.rb INFO : user[USER1] exist will change from 'false' to 'true'
ユーザが作成されたことを確認します。
# id USER1 uid=1001(USER1) gid=1001(GROUP1) groups=1001(GROUP1)
ヘルプ
参考に itamae のヘルプを引用しておきます。
$ itamae Commands: itamae destroy [cookbook|role] [NAME] # Undo role or cookbook (short-cut alias: "d") itamae docker RECIPE [RECIPE...] # Create Docker image itamae generate [cookbook|role] [NAME] # Initialize role or cookbook (short-cut alias: "g") itamae help [COMMAND] # Describe available commands or one specific command itamae init NAME # Create a new project itamae local RECIPE [RECIPE...] # Run Itamae locally itamae ssh RECIPE [RECIPE...] # Run Itamae via ssh itamae version # Print version Options: -l, [--log-level=LOG_LEVEL] # Default: info [--color], [--no-color] # Default: true -c, [--config=CONFIG]