リモートからrootでログインさせないわけ
sshとftpとかリモートからログインするアプリでは、セイキュリテュの側面からrootでのログインを許可しないのが一般的だ。sshdの場合一般ユーザでログインし、改めてsuでrootになる。当初rootになるには一般ユーザアカウント、そのパスワード、そしてrootのパスワードという3関所をくぐりぬけなければならない。一般ユーザアカウントは推測されやすいとしてもないよりましだ。
HPをぐぐっていたら、rootでログインを許可すると、ブルーフォース攻撃でrootを奪われやすいから。ということだ。改めて思うに「そりゃそうだ。」アカウント名はrootなんだから・・・と。
そしたらrootのアカウント名を変えればいいんじゃないかと。ふと思った。rootのアカウント名がrootである必要があるのか?
include/asm-x86/unistd_32.hでログインのシステムコールがあるかどうか調べてみると存在しない。そこでsuをstraceしてみると、最終的にはcloneで子プロセスを起動し、その時該当ユーザのユーザIDをセットするようだ。rootなら0。実際task_structにはユーザIDでそのアカウント名を保持している箇所はない。sshdが接続されると、ログインチェックをしてOKなら、該当するユーザIDで子プロセスとして複写し、execでシェルを起動すればよさそうだ。
実際rootのアカウントをroot1に変えてログインできるかやってみた。
HPをぐぐっていたら、rootでログインを許可すると、ブルーフォース攻撃でrootを奪われやすいから。ということだ。改めて思うに「そりゃそうだ。」アカウント名はrootなんだから・・・と。
そしたらrootのアカウント名を変えればいいんじゃないかと。ふと思った。rootのアカウント名がrootである必要があるのか?
include/asm-x86/unistd_32.hでログインのシステムコールがあるかどうか調べてみると存在しない。そこでsuをstraceしてみると、最終的にはcloneで子プロセスを起動し、その時該当ユーザのユーザIDをセットするようだ。rootなら0。実際task_structにはユーザIDでそのアカウント名を保持している箇所はない。sshdが接続されると、ログインチェックをしてOKなら、該当するユーザIDで子プロセスとして複写し、execでシェルを起動すればよさそうだ。
実際rootのアカウントをroot1に変えてログインできるかやってみた。
[root1@localhost kitamura]# vi /etc/passwd root1:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root1@localhost kitamura]# vi /etc/shadow [root1@localhost kitamura]# chmod u+w /etc/shadow root1:$6$8l4a.5Bm$tuixKbk1zTWFRJqFrmj04.MOLimbdDhMIGiLHyb7bLekay DNxr2MtMq6BV40:14522:0:99999:7::: bin:*:14498:0:99999:7::: daemon:*:14498:0:99999:7:::sshでアカウント名root1でログインするとログインできた。もちろんroot権限で。「我ながらこれはいい。」と思ってしばらく使ってみると。
[root1@localhost kitamura]# su su: rootというユーザは存在しませんなるほど、アプリケーションによればrootのアカウント名を「rootだ!」として動作するものがある。そのようなアプリが動作しなくなる。もしroot取得をユーザID=0として処理することが仕様だったな、rootのアカウントを自由に設定することが可能でないだろうか・・・と。でもそう簡単なものだったらインプリメントされているだろうな。