特殊なファイルアクセス権 (setuid、setgid、スティッキービット)(パーミッションの4桁目)
問題
Linuxのファイルのパーミッションが4桁の数字で表されているのがよくありますが、4桁目って何ですか。
答え
よくある3桁の666とか755などのパーミッションは、所有者、グループ、その他全員の読み/書き/実行の権限を表す。
- 読込権限 = 4
- 書込権限 = 2
- 実行権限 = 1
4桁目は特殊なファイルアクセス権を表す。
- setuid = 4
- setgid = 2
- sticky bit = 1
setuid
setuid アクセス権を実行可能ファイルに設定すると、このファイルを実行するプロセスにはその実行可能ファイルを実行しているユーザーではなく、ファイルの所有者に基づいてアクセス権が与えられる。この特殊なアクセス権を使用すると、通常は所有者しか利用できないファイルやディレクトリにアクセスできる。
たとえば、passwd コマンドの setuid アクセス権によってユーザーはパスワードを変更できる。
# ls -l /usr/bin/passwd -r-s--x--x 1 root root 21200 8月 22 2005 /usr/bin/passwd
setgid
プロセスの実効グループ ID (GID) はファイルを所有するグループに変更され、ユーザーにはそのグループに与えられたアクセス権に基づくアクセス権が与えられる。
setgidアクセス権がディレクトリに適用されると、このディレクトリ内で作成されたファイルはディレクトリが所属するグループに含まれることになる。ディレクトリに対する書き込み権および実行権を持つユーザーは、そのディレクトリにファイルを作成できる。ただし、作成したファイルはユーザーのグループではなくディレクトリを所有するグループに割り当てられる。
Webの実行ユーザーと開発者のユーザーを同じグループに入れて、DocumentRoot配下のファイルを、一緒に読み書きできるようにするのに使ったりできる。
usermod -a -G apache ec2-user chown -R ec2-user:apache /var/www chmod 2775 /var/www find /var/www -type d -exec chmod 2775 {} \; find /var/www -type f -exec chmod 0664 {} \; → /var/www の中のファイルは、apacheが読み書きできて、ec2-userも読み書きできる。
スティッキービット
ディレクトリ内のファイルを保護するアクセス権ビット。ディレクトリにスティッキービットが設定されている場合、そのファイルを削除や名前変更できるのはその所有者、ディレクトリの所有者、または特権を持つユーザー(rootなど)だけとなる。
/tmp などに適用される。一時ファイルを他人が勝手に削除したり名前変更すると困るので。
# ls -la /tmp total 136 drwxrwxrwt 5 root root 114688 Nov 28 10:33 . drwxr-xr-x 18 root root 4096 Nov 24 20:59 .. (略)
コメント