パーミッションrwsやrwtの「s」や「t」は何?

LPIC

たまに ls -l でファイルやディレクトリを見ると、パーミッション(アクセス権)のところに見慣れた「rwx」以外に「s」や「t」が付いているものがあります。
その意味について調べてみました。

パーミッションrwsの「s」はSUID、SGID

パーミッション「rws」はpasswdコマンド(パスワード変更コマンド)を ls で調べると見ることができます。

$ which passwd   #passwdコマンドの場所(path)を調べる
/usr/bin/passwd

$ ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root  /usr/bin/passwd

passwdコマンドは所有者がrootで、所有者の実行権が「s」になっています。
これは他のユーザーが実行した場合に、ファイル所有者の権限で実行されるという意味です。

つまり一般ユーザーがpasswdコマンドを実行すると、root権限で実行されます。
だからこそ、実行時に /etc/passwd に書き込みができるという仕組みです。
この仕組みを SUID といいます。

SUIDの設定は以下のようにします。

chmod u+s file
もしくは
chmod 4755 file  # 3桁のパーミッションに 4000 を加える

ls -l file
-rwsr-xr-x.   file

SUIDと同じように実行時にグループの権限が適用されるようにすることもできます。
SGIDと言います。

chmod g+s file
もしくは
chmod 2755 file  # 3桁のパーミッションに 2000 を加える

ls -l file
-rwxr-sr-x.   file

SGIDをディレクトリに設定しておくと、その配下で作成されたファイルはディレクトリと同じグループになるので、複数ユーザーで共有するディレクトリにSGIDを設定しておくと便利に使えます。

パーミッションrwtの「t」はスティッキービット

パーミッション「rwt」は /tmp ディレクトリを ls で調べると見ることができます。

ls -ld /tmp
drwxrwxrwt. 16 root root /tmp

Otherユーザーの実行権が「x」ではなく「t」になっています。
これはスティッキービットというもので、この設定がされているディレクトリでは、書き込み権限があっても、自分以外のファイルを削除することができません。

つまり /tmp ディレクトリは、ファイル作成や、自分で作ったファイルの削除はできますが、他者のファイルは削除できないディレクトリです。
ただしファイルに書き込み権限があれば、書き換えることはできます。

[user1@localhost ~]$ cd /tmp
[user1@localhost tmp]$ vi ggg.txt  #user1でファイル作成
[user1@localhost tmp]$ chmod 777 ggg.txt
[user1@localhost tmp]$ ls -al ggg.txt 
-rwxrwxrwx. 1 user1 user1 9  6月  9 15:42 ggg.txt

[user1@localhost tmp]$ su - user2 #user2に切り替え

[user2@localhost ~]$ cd /tmp
[user2@localhost tmp]$ vi ggg.txt #書き換えはできるが…
[user2@localhost tmp]$ rm ggg.txt
rm: 'ggg.txt' を削除できません: 許可されていない操作です

ディレクトリにスティッキービットを設定するには以下のようにします。

chmod o+t dir
もしくは
chmod 1777 dir   # 3桁のパーミッションに 1000 を加える

ls -ld dir
drwxrwxrwt.  dir

コメント