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なんかがあるな。