それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

sudo で別のユーザー(do as )として実行して、ファイルが読取可能かアクセスを確認する。

本当にそのファイル読み取れないの?

ファイルのパーミッションや権限を設定しても不安が残ります。

ファイルのパーミッションを取り払って、チェックして大丈夫・・・なんだけど

chmod g-rw path/to/file
ls -l path/to/file

チャント読み取り確認したいと思います。

でも、いちいちログインしてると面倒だよね。

別のユーザーとして実行して権限をチェックする

sudo には別のユーザーとして実行する機能があります。 sudo は super user do じゃないですよ? su が super user じゃないのと同じですね。sudo が 常に root だと思ってる人は考えを改めましょう

sudo -u ユーザ名 コマンド

sudo su 
sudo -u mysql cat /etc/shadow 

たとえば、mysqldaemon用ユーザー)が /etc/shadow をウッカリ読み取れないようになってるよね。というのを確認できる。

実例

他のユーザーとして実行した結果

sudo  -u takuya cat /etc/shadow
cat: /etc/shadow: 許可がありません

確認できました!

パーミッションチェックで便利。

sudo -u が便利な場面。このようにログイン無効化してるユーザがいっぱい存在するから。

cat /etc/passwd | grep mysql
mysql:x:116:125:MySQL Server,,,:/nonexistent:/bin/false

いちいち vipw してログインシェル書き換えて、 su mysql して、元に戻すの面倒だよね。

さらにいえば、ウッカリ元に戻すの忘れたりしそうだよね。

作業中に電話かかってきたり打ち合わせ始まったりして、ウッカリログイン有効化したままだったとか目も当てられないよね。

なので、ログインせずにパパっと他のユーザー権限でコマンド実行できると何かと便利です。

do as とかしておいたら便利かもね

alias do_as='sudo -u '
alias run_as='sudo -u '

こうしておけば、忘れない。

補足

sudo -u を使って、”他のユーザーとして実行できる権限” というのは runas として sudoers で定義されている。runas権限がないと、他のユーザで実行ができないことに注意

たとえば、以下の様な例。 takuya さんが sudo で takuya さんとしてコマンド実行を試みた場合

takuya@atom:~$ sudo -u takuya cat /etc/passwd
ユーザー takuya は'/bin/cat /etc/passwd' を takuya として atom 上で実行することは許可されていません。すみません。

ね? takuya さんが takuya さんとしてコマンド実行も出来ないね?つまり、sudoers でチャンと設定する必要がある。

この場合は、sudoers で runaspws / Runas_Spec / Runas_List などを細かく設定すればいい。ただし設定を濫用すると、 root を増やしているのと変わらないから、使わないほうがいいと思うんだけどね。run_as は 事実上 root で実行すると思っておく。

Apacheのsuexec も sudoersで管理できたら楽そうだね。

関連項目

pkexec というのもあります、bsdならdoas 、windows ならrunas とかも linuxで別のユーザーとしてコマンドを実行する。 - それマグで!