SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

特殊なファイルアクセス権 (setuid、setgid、スティッキービット)(パーミッションの4桁目)

問題

Linuxのファイルのパーミッションが4桁の数字で表されているのがよくありますが、4桁目って何ですか。

答え

よくある3桁の666とか755などのパーミッションは、所有者、グループ、その他全員の読み/書き/実行の権限を表す。

4桁目は特殊なファイルアクセス権を表す。

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 ..
(略)

関連するメモ

コメント