visudoでsudoersを変更して、sudo権限を設定する
zabbixユーザーとsudo等々の権限周りでハマりました。
備忘録として開発環境で動作確認したのを残しておきます。
環境
MacOS High Sierra 10.13.1
Vagrant 2.0.1
CentOS 7.2.1511
かんたんなsudoersの知識
sudoとかの権限を設定しているのは、
/etc/sudoers
というファイルです。
ちなみに/etc
の下にsudoのつくファイルは以下でした。
$ ls -l /etc/ | grep sudo
-rw-r-----. 1 root root 1786 Sep 25 2012 sudo.conf -r--r----- 1 root root 4191 Jan 16 17:27 sudoers drwxr-x---. 2 root root 20 Jan 27 2016 sudoers.d -rw-r-----. 1 root root 3181 Jul 25 2013 sudo-ldap.conf
よく見ると、sudoersは440で書き込みできませんね。
普通には書き込みができないのがこのsudoersファイルです。
普通に書き込みしてしまって、シンタックスエラーがある状態で保存してしまうと、二度とrootを使えなくなったりする危険なファイルです。
なので、sudoersを編集する際にはシンタックスチェックをする、安全なvisudoというコマンドを使って編集をしていきます。
一般ユーザーを作成します
rootになっておく
$ sudo su -
まずは、現在のユーザー一覧を確認
$ ls -l /home/
合計 2 drwx------. 5 vagrant vagrant 4096 1月 12 10:52 vagrant
vagrantユーザーだけでした。
userを追加
$ useradd test-user
ユーザー追加されたのを確認
$ ll /home
total 0 drwx------ 2 test-user test-user 59 Jan 16 17:01 test-user drwx------. 3 vagrant vagrant 90 Jan 27 2016 vagrant
test-userが作成されました。
test-userのパスワードを設定(一応)
$ passwd test-user
Changing password for user test-user. New password: Retype new password: passwd: all authentication tokens updated successfully.
パスワード設定完了。
権限確認
test-userにログイン
$ su test-user
$ whoami
test-user
test-userにログインできました。
sudoが必要なコマンドを実行してみます
$ yum install -y git
Loaded plugins: fastestmirror You need to be root to perform this command.
rootじゃないとできないみたいですね。
sudoをつけてみます。
$ sudo yum install -y git
We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for test-user:
やはり、パスワードがないとだめですね〜
これは当然ながらtest-userを作った管理者は知っていますが。。。
sudoers権限をいじります
rootに戻ります
$ exit
sudoersをいじります
$ visudo
以下の行をを一番下に追加します。
test-user ALL=(root) yum
test-userに root権限でのyumの使用を許可します。という意味です。
/bin/yumじゃなくていいのかな?
yumのオプションは何でも使えるのかな?
試しにやってみます。
編集を抜けると
visudo: >>> /etc/sudoers: syntax error near line 121 <<< What now? Options are: (e)dit sudoers file again e(x)it without saving changes to sudoers file (Q)uit and save changes to sudoers file (DANGER!) What now?
と、
何も考えずにQをやってしまったが最後、二度とsudoを使えなくなってしまいました。
rootにログインすることも叶わなかった。。。
VM立ち上げ直した。。。
これ本番でやったら偉いことになります。
めのまえがまっくらになった!状態になります。
所持金がなくなります。
そんな事故がないために、単にviだけでは編集できず、専用のsyntaxチェックをしてくれるvisudoを使うんですね~
さて、もう一度vagranをdestroyしてupして、visudoまでの操作を行います。
$ visudo
以下のように追加
test-user ALL=(root) NOPASSWD: /bin/yum
:wqでちゃんと正常に抜けられました。
動作確認
test-userにログイン
$ su test-user
権限を確かめる
$ sudo yum install -y git
->OK!
$ sudo yum history
→正常に表示されます。
yumのコマンドなら全部使えるっぽい。
権限をもう少し絞ってみます。
権限変更
とりあえず/bin/yumが使えることがわかりました。
オプション等々、どこまでsudoersファイルで制限できるのでしょうか。
試してみます。
rootになる
$ exit
$ visudo
一番下の行を以下の設定に変更
test-user ALL=(root) NOPASSWD: /bin/yum install -y tig
test-userになる
$ su test-user
確かめる
$ sudo yum install -y tig
出来ました。
他のコマンドは使えないのか確認します。
$ sudo yum install -y tree
ダメでした。パスワードを求められてしまいます。
全部決め打ちでroot権限を与えることもできるようですね。
どこまで制限できるのか
検証してみます。
$ visudo
次のように設定
test-user ALL=(root) NOPASSWD: /bin/yum install
期待する動作は、これでyum installなら何でも使えるけど、他のyumコマンドは使えない挙動!
試してみます
$ su test-user
$ sudo yum install -y tree
↓
なんかパスワード求められた。。。
なんかダメみたいだ。
なので、方法としては、
完全に決め打ちのコマンドを一つずつ書くか、
オプションは指定しないで、実行ファイルのパスだけを書くか。
のどちらかっぽい。
コマンドの処理の仕方とかもっと深く知れば「はいはい、そりゃそうだ」って言えるようになる気がする。
けど今は一つ一つ動作を検証してみて、こういう挙動なのだとわかりました!頑張った!
あと実はファイルパスとディレクトリの権限等のこともハマったので、次回整理してまとめておきたいです。