一般ユーザにroot権限のpasswdコマンドを使わせたくないとき
root権限の管理者とは別に、ユーザを追加する非rootのユーザ管理者が必要なことがあります。
普通なら、/etc/sudoersにユーザ管理者とuseraddコマンドの許可を追記するかも知れませんが、それだとユーザを追加した後、パスワードの設定をrootユーザに依頼するしかありません。
かといって、passwdコマンドも許可してしまうと、誤ってrootユーザのパスワードを変更してしまう恐れがあります。
今回は、そんなときの解決方法について書きます。
結論
いきなりですが、結論です。
useraddコマンドのオプションで"grub-cryptコマンド"を使ってパスワードを設定する。
はい、useraddコマンドには、パスワードを一緒に設定するオプションが存在します。
-p passwd
crypt(3) の返り値である暗号化パスワード。デフォルトでは、アカウントは使えない状態となる。
しかし、記載にある通り、crypt()関数を使って暗号化したものを設定しないといけません。crypt()はコマンドではなく、関数らしくperlとかで組まないといけないらしいです。
さてどうするかということで、出てきたのが"grub-cryptコマンド"です。
このコマンドは一般ユーザでも使えるもので、対話形式で入力した文字列をSHA-512(passwdコマンドで作られる暗号と同じ形式)に変換して、標準出力してくれる優れものです。
標準出力された文字列をuseraddコマンドの-pオプションで指定することにより、passwdコマンドを利用しなくてもパスワードを設定することができます。
具体的な使い方
2つのコマンドを別々に実行するのも芸がないので、バッククォートを使ってワンライナーで実行しましょう。
sudo useradd -g <グループID(任意)> -u <ユーザID(任意)> -p `grub-crypt` <ユーザ名>
上記コマンドを実行すると、全部で3回のパスワード入力が求められます。
最初の2回はgrub-cryptコマンドによるパスワード、最後の1回はsudoによるパスワードです。
他にもmkpasswdコマンドがあれば、それを使う方法もあるそうですが(参考:useradd コマンドでユーザのパスワードを指定する方法 - bearmini's blog)、私の環境ではmkpasswdコマンド実行時にエラーが発生したので、やむなく諦めました。
まあこの場合は、テキストに一度パスワードを記載しないといけないという制約があるので、結果としてgrub-cryptコマンドの方がセキュリティ的にも良かったかもしれません。