suid rootされているコマンド
permissionの話題。せっかくなのでちょっと調べてみる。
passwd なんかは suid bit が有効になっていたりする。
パーミッション - odz buffer
passwdファイルはrootじゃないとさわれないから、passwd(1)はsuid rootされている必要がある。
実行可能かつsuidビットが立っているファイルは、findを使えば簡単に検索できる。
> find "どっかのディレクトリ" -xdev -type f \( -perm -u+x -or -perm -g+x \) \( -perm -u+s \)
手元のMac OS X 10.4で/bin, /sbin, /usr/bin, /usr/sbinあたりを調べてみた。
> find /bin -xdev -type f \( -perm -u+x -or -perm -g+x \) \( -perm -u+s \) /bin/ps /bin/rcp > find /sbin -xdev -type f \( -perm -u+x -or -perm -g+x \) \( -perm -u+s \) /sbin/launchd /sbin/mount_nfs /sbin/mount_smbfs /sbin/ping /sbin/ping6 /sbin/restore /sbin/route /sbin/rrestore /sbin/umount > find /usr/bin -xdev -type f \( -perm -u+x -or -perm -g+x \) \( -perm -u+s \) /usr/bin/at /usr/bin/atq /usr/bin/atrm /usr/bin/batch /usr/bin/chfn /usr/bin/chpass /usr/bin/chsh /usr/bin/crontab /usr/bin/login /usr/bin/lppasswd /usr/bin/passwd /usr/bin/quota /usr/bin/rlogin /usr/bin/rsh /usr/bin/setregion /usr/bin/smbutil /usr/bin/su /usr/bin/sudo /usr/bin/top > find /usr/sbin -xdev -type f \( -perm -u+x -or -perm -g+x \) \( -perm -u+s \) /usr/sbin/netstat /usr/sbin/pppd /usr/sbin/scselect /usr/sbin/traceroute /usr/sbin/traceroute6 /usr/sbin/vpnd
全部suid rootだった。意外なコマンドがsuidされてて面白い。suidが必要な理由はコマンドそれぞれだけど、だいたいこんな感じ?
- 扱うファイルのpermissionが制限されている(passwd, crontab, at等)
- kernelの情報を見る必要がある(netstat, top, ps等)
- 特権ポートを扱う必要がある(ping, rlogin, rsh等)
あとはrootでsetuid(2)を使いたいsuやsudoなんかがあるな。