Linux sudoを設定しよう

どうも、inappeです。
最近Linuxを触っていることのほうが多いのですが、自分が触っているOSについて無知すぎるのはどうなの?!という危機感を覚えはじめました。
なので少しずつですが調べたことをブログに残しておこうかなという考えです。

開発していると mysql 触りたい、service network restart したいなど通常は root で操作しなければいけない瞬間に多々ぶつかりますよね。といっても現状はこの二つの問題だけなんだけどねwww
けれど、すべての操作を許可するのは違うなとも思います。なのであえてこの二つの操作だけを sudo で実行できるように設定してみたいと思います。

sudo ってになに?


はじめて sudo を聞いた時の私の感想はsu(すぐ)do(やろうぜ!)でした...w
明らかに違いますがみんなもそう思うよね?

sudo - Wikipedia

wikiをみてみると...ふむ、簡単に言うと root (スーパーユーザ)でしかできない操作を権限の設定さえしていれば他のユーザでも出来ちゃうよってことですね。
大人数での開発で root の password は教えたくないけど、一般ユーザでどうしても root の権限が必要な操作を必要とする場面があったとします。ここで sudo の出番ですね。後ほど方法は記述しますが password の認証なしで特定の操作だけを指定した一般ユーザに実行させることができます。
うん。便利。
と、sudo ってこんなものなんだなって理解していただければと思います。適当でごめんなさいw

設定してみよう


sudo の動作設定は /etc/sudoers に記述されいて、このファイルを編集することで sudo の動作を変更することができます。
/etc/sudoers ファイルは root ユーザでも読み出し権限しかなく、さらに記述内容を間違えると sudo コマンドが正常に動作しなくなることもあるため、/etc/sudoers 編集専用の visudo コマンドを使い編集します。

$ su // root に切り替え
# visudo

いっぱいよく分らないコメントアウトが沢山並んでいます。
けれど今回設定するのは2つだけです。
まず一つ目は sudo を利用できるユーザの設定です。
root ユーザはこのように設定されています。

## Allow root to run any commands anywhere
root   ALL=(ALL)   ALL

これの意味は下記の表の様になっています。

root ALL= (ALL) ALL
root ユーザは、 全てのホストから 全てのユーザに変身でき、 全てのコマンドを実行できる

感の良い方ならもうわかりますよね?ここに権限を与えたいユーザをフォーマットに則って追加します。

## Allow root to run any commands anywhere
root      ALL=(ALL)     ALL
inappe    ALL=(root)    /etc/init.d/network,/etc/init.d/mysqld

これで mysql と service network restart を inappe ユーザでも利用できるようになりました。 利用イメージはこんな感じ

$ sudo service network restart
$ sudo mysql -u root -p

しかしこれだけだと sudo を利用する度に password の入力を求められて面倒です。(この設定はパスワード入力を省くものなので環境に合わせて使用を判断してください)
そこで設定するのが

inappe   ALL=(ALL)   NOPASSWD: ALL

はい、これで inappe ユーザは全ての sudo 操作に対してパスワードの入力を求められなくなります。
ああ、なんて快適なのだろう。

まとめ


root ユーザで操作するのは色々と危険です。個人で使う分にはどうでもいいかなーなんつって。ってよくないよねw
けれど sudo などの設定を適切に行えば安全でかつ快適な開発、Linux ライフが送れるのではないでしょうか?では今回はこの辺で(*'▽')