リモートから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に変えてログインできるかやってみた。

[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のアカウントを自由に設定することが可能でないだろうか・・・と。でもそう簡単なものだったらインプリメントされているだろうな。

最終更新 2010/01/13 12:19:52 - north
(2010/01/13 12:19:52 作成)


検索

アクセス数
3589067
最近のコメント
コアダンプファイル - sakaia
list_head構造体 - yocto_no_yomikata
勧告ロックと強制ロック - wataash
LKMからのファイル出力 - 重松 宏昌
kprobe - ななし
ksetの実装 - スーパーコピー
カーネルスレッドとは - ノース
カーネルスレッドとは - nbyst
asmlinkageってなに? - ノース
asmlinkageってなに? - よろしく
Adsense
広告情報が設定されていません。