rootでSSHする環境もあるし、非rootでSSHする環境もがある。
非rootユーザーでrootコマンドを実行したい時や、root権限しか見れないファイル(すべてがファイルである)をみる時、尚且つrootパスワードがモレたくない時は、sudoで対応できる。
ユーザー、グループでコマンドの許可/拒否できるのが便利
(更に、ホスト名での制限もできるが、あんまりやらない)
visudo
visudoだけかもしれないが、visudoすると、他のセッションやユーザでのvisudoが排他になる
セッション1でvisudoを実行すると、普通にvi /etc/sudoersと同じ感じでviできる状態になる。
↑visudoのままで、visudoを実行すると、↓が表示され、開けない]
[root@mgmt ~]# visudo
visudo: /etc/sudoers がビジー状態です。後で再試行してください
が、が、が
visudoではなく、vi /etc/sudoersでやると普通にいける。
:wqすると↓エラーがでるが、 :wq!をやれば保存できる。
visudoは、/etc/sudoersしてくれるし、排他だし、すすめ
/etc/sudoersを編集する時にvisudoを使うようにしよう
設定考え方
許可するユーザ、グループ、コマンドを許可すればいい(ホワイトリスト)
難しいことを考えなくてもいい
例えば、逆の考えで、ブラックリストの考え方だと、
↓の設定でsnowユーザ以外は、sudoで全コマンドが許可されることとなる。
何が問題だというと、想定外のユーザが許可されてしまう可能がある
(川口的にはセキュリティ的にはアウトな設定だと思う
!snow ALL=(ALL) ALL
/etc/sudoers
上から下までマッチする。同じコード(設定)がある場合、下の方が有効になる。
/etc/sudoersの最後行に#includedir /etc/sudoers.dが記載されている
[root@mgmt ~]# tail -n 1 /etc/sudoers
#includedir /etc/sudoers.d
[root@mgmt ~]# ll /etc/sudoers.d
合計 0
ここでの「#」はコメントアウトの意味ではない
ここでの「#」はコメントアウトの意味ではない
なので、sudo設定が/etc/sudoers.d配下にもみるよ
定時帰られない方は多分grep -v #とかで、コメントアウト行を表示させないようにしたことがあるだろう
はっきりいいと、確認モレだよ
「#=コメントアウト」の場合もあるよ
/etc/sudoers.d配下もみようよ
(グラウト環境では、デフォルトで/etc/sudoersファイルではなく、/etc/sudoers.d配下sudo設定することが多い)
↓がgoogleクラウドの場合
/etc/sudoersにはユーザID、(visudo的にはチェックが大丈夫だが)グループIDが書いても無駄のため、ユーザ名とグループ名でgrep /etc/sudoersした方がいい
%がついているので、google-sudoersグループに対して、sudoですべてのコマンドをパスワードなしで実行可能
[snow@instance-1 ~]$ id
uid=1000(snow) gid=1001(snow) groups=1001(snow),4(adm),39(video),1000(google-sudoers)
[snow@instance-1 ~]$ sudo egrep "snow|adm|video|google-sudoers" /etc/sudoers
[snow@instance-1 ~]$
[snow@instance-1 ~]$ sudo ls /etc/sudoers.d/
google_sudoers
[snow@instance-1 ~]$ sudo egrep "snow|adm|video|google-sudoers" /etc/sudoers.d/google_sudoers
%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL
注意
sudo xxxで実行するとパスワードが聞かれたら、Ctrl+Cでやめましょう。パスワードを入力してしまうと、ログに出てしまうことがある。
なので、Ctrl+Cでやめで、とりあえず/etc/sudoersの設定を見てみよう
考えられる原因:
①/etc/sudoersファイルの設定間違い
②/etc/sudoersの設定でセキュリティ的にダメ。