実行ファイルやディレクトリには、3つの特別なパーミッションが存在します。 それらは、
1. SUID権限
2. SGID権限
3. Sticky bit
Set-user Identification (SUID)
非 root ユーザーが /etc/shadow ファイルへの書き込み権限を持っていないのにどうやって自分のパスワードを変更できるのか考えたことがありますか?んー、興味深いですね?
# ls -lrt /usr/bin/passwd-r-sr-sr-x 1 root sys 31396 Jan 20 2014 /usr/bin/passwd
– よく見ると、permissionの欄に2つのSがあるのがわかると思います。 最初のSはSUIDを意味し、2番目のSはSGIDを意味する。
– SUIDビットが設定されたコマンドまたはスクリプトが実行されると、その実効UIDはそれを実行しているユーザーではなく、そのファイルの所有者のものとなる。
– SUID の他の良い例は su コマンドです :
# ls -l /bin/su -rwsr-xr-x-x 1 root user 16384 Jan 12 2014 /bin/su
– 所有者の実行フィールドに “s” として表示される setuid 権限。
ファイルに SUID を設定するにはどうしますか?
# chmod 4555
所有者の実行フィールドに大文字の “S” が表示された場合、それは setuid ビットがオンで、ファイルの所有者の実行ビット “x” がオフまたは拒否されていることを表します。
Set-group identification (SGID)
SGID permission on executable file
– SGID 許可は SUID 許可と似ていますが、唯一の違いは – SGID をオンにしたスクリプトまたはコマンドを実行すると、そのファイルがメンバーである同じグループのメンバーであるかのように実行されることです。
– グループの execute フィールドに小文字の “l” が表示された場合、setgid ビットがオンで、グループの execute ビットがオフまたは拒否されていることを示します。
# chmod 2555
SGID on a directory
– SGID許可がディレクトリに設定されると、そのディレクトリで作成されたファイルはそのディレクトリが所属するグループに属します。
– たとえば、ディレクトリに書き込み許可を持つユーザーがそこにファイルを作成すると、そのファイルはユーザーのグループではなくディレクトリと同じグループに属します。
How to set SGID on a directory
# chmod g+s
Sticky Bit
– スティッキービットは主に共有ディレクトリで使用されます。
– /var/tmp や /tmp のような共有ディレクトリで有用です。なぜなら、ユーザーはファイルの作成、他のユーザーが所有するファイルの読み取りと実行はできますが、他のユーザーが所有するファイルの削除は許可されていないからです。
– たとえば、ユーザー bob が /tmp/bob というファイルを作成すると、/tmp ディレクトリの権限が 777 であっても他のユーザー tom がこのファイルを削除できないようにします。 もしスティッキービットが設定されていなければ、/tmp/bob ファイルは親ディレクトリのパーミッションを継承するので、tom は /tmp/bob を削除できます。
– root ユーザー(もちろん!)とファイルの所有者は、自分のファイルを削除できます。
スティッキービットの例 :
# ls -ld /var/tmpdrwxrwxrwt 2 sys sys 512 Jan 26 11:02 /var/tmp
- T refers to when the execute permissions are off.- t refers to when the execute permissions are on.
スティッキービットのパーミッションの設定方法
# chmod +t or # chmod 1777