縁側でお茶飲んだりして過ごしたい

日常の記録。ジャンルフリー。

一般ユーザに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コマンドの方がセキュリティ的にも良かったかもしれません。