結局設定はきちんと内容を把握した上で行わないと痛い目を見るという私の経験に基づく事例を一件紹介させていただくというものです。
そもそも
何をしたかったかというと、会社では、在宅でも外出先でも仕事ができる環境を提示していただいておりまして、その一つにVPNアクセスがあります。会社側では、Windows環境を想定したコマンド・アプリ・設定情報の提供はするものの、macについては使いたければ使っても良いが、自己責任でというものです。
openvpnを利用するのですが、やはり実行時にはsudoが欠かせません。それも面倒なので、当該コマンドのみsudoパスワードなしで楽をしたいというヨコシマな考えが発端となりました。
sudoers
上記、特定コマンドのみsudoのパスワードを入力せずに実行するには、sudoersファイルの設定が必要となります。
$ sudo visudo
上記により編集するわけですが、その設定ファイルのフォーマットが以下となります。
who where = (as_whom) what
- man sudoers
whoの部分に%を先頭につけて、グループ名を指定すると、グループが対象になり、そのグループに所属しているユーザ全てに許可することとなります。
元のsudoersには、以下の行が有効になっています。
root ALL=(ALL) ALL
%admin ALL=(ALL) ALL
以下の行はコメントになっているのでデフォルトでは無効ですが、コメントを外す(先頭#を取り除く)と、wheelグループに属しているユーザーは誰にでもsudoを許可するということになります。
# Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
以下のコメントを外すことで、wheelグループに属しているユーザーはパスワードなしにsudoコマンドを実行可能となります。
# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
サンプルとして提示されている以下の行は、usersグループに属しているユーザーは指定したコマンドについて、sudoを許可するということになりますが、ここにワナが仕込まれていました(ワタシだけ)
# Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now
ワナ
何も考えずにサンプルを鵜呑みにして私は以下のような設定をしてしまいました。
%users ALL=NOPASSWD: /Users/user/.vpn/my_vpn.sh
上記の記載について、フォーマットは間違っていないので、visudoコマンドでも問題なく編集できます。しかし、想定した動作となっていませんでした。(上記コマンドであっても必ずパスワードが問われる)
うまく動作していないにも関わらず、設定をそのまま放置してしまったため、さらにひどい状況になってしまいました。
sudoを行おうとすると、上記で指定したコマンドに関係なく、全ての場合に、パスワードの問い合わせが行われるまでに2分程度の時間がかかり、やっとsudo以下で指定したコマンドが実行できるようになるという状況でした。
何度かsudoの仕組み上何かネットにアクセスしてタイムアウトの結果なのかと思い調べてみたりしたのですが、何もわからず、いく日が過ぎ、やっと原因がわかりました。
時間がかかった原因とは
macにはusersというグループはデフォルトでは存在していないのです。
存在するグループ(やユーザー)を指定することで問題なく動作しました。
余談
ちなみに、サンプルには、whereに該当する部分にlocalhostが指定されておりますが、これもマニュアルによるとマッチしないため、指定してはいけないようです。指定してもフォーマット的に動作はしますが、想定通り動きません。
残念ながら、dhcpなどの環境の場合、どのように自機だけに制限したら良いのかわかりませんでした。(2017/6/14現在)
さらに余談
以下のようにすることで、設定ファイルを局所化することが可能です。例えば、所定のホスト向けの設定だけとか、所定のユーザー・グループ向けの設定だけとかに分割することで、設定ファイルの見通しをよくすることができます。(先頭の#はコメントを示すものではありません)
#includedir /private/etc/sudoers.d
編集する場合、visudoでは、最初に/etc/sudoersが開かれるので、:e により所定のファイルを開き、編集して保存するときちんとフォーマットチェックしてくれます
最後に
念のため、私のmac環境について記述いたしますが、今回の件は、usersがグループに存在しないOSについて該当するかと思います。sudoersの記述については、現時点のもので、実際に設定する場合には、manなどでご自身で確認してみることをお勧めいたします。
https://linuxjm.osdn.jp/html/sudo/man5/sudoers.5.html
- my環境
- mac OS Sierra ver 10.12.5
- MacBook (Retina, 12-inch, Early 2015)
- Processor 1.2GHz Intel Core M
- Memory 8GB 1600 MHz DDR3
イジョ