2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

パーミッションは奥が深し!

パーミッションは、すでにみなさん頻繁に更新しているであろう。しかし、パーミッションは通常のリード権・ライト権・実行権以外にもあまり表に出てこない物もある。ここでは、その事について掘り下げてみたい。以下に説明する。


1.名前付きパイプFIFO (First In First Out)

名前付きパイプは、名前を付けてパイプをオープンできるので、どのプロセスからでも(親子関係でないプロセスでも)ファイルの読み書きオープンができる。

(1)FIFO の作成

# mknod [fifo1] p
# mkfifo [fifo2]

# ls -l
prw-r–r– 1 root root 0 3月 11 10:15 fifo1
prw-r–r– 1 root root 0 3月 11 10:20 fifo2

と言うように、FIFOになったファイルにはパーミッションの一番左にpビットが付く。


2.「s」と「S」の違い(setuidの謎)!

s は setuid または setgid が設定された事を表す。S も同じ。そんでもってじゃあどこがどう違うのか?

(1)setuidの意味
プログラムのパーミッションを実行する人ではなく、そのファイルの所有者にするもの。つまり、本来はあるユーザ(例えば root)のみに許可されたものを誰が実行しても許されるようにする。
例えば、root でしか出来ない作業をコマンド化して setuidビットを設定すると、root になる変わりにそのコマンドを実行する事でその処理を行う事が出来る。root になるのはそのコマンドを実行している間だけである。
そして、そのコマンドが終了するとともにまたもとの一般ユーザに戻る。
つまり、わざわざ危険性の高い root になって仕事をする必要が無い。
しかし、その半面コマンドが途中で中断可能なものなら誰でもrootになれる。

(2) setgid
そのファイルのプログラムを実行する時は誰でも一時的にそのグループの一員になることができる。

(3) s と S の違い
setuid、setgid ともに実行することが関わっている。
つまり、s とはあらかじめ実行権を持って初めて動ける。
元の所有者やグループが実行権を持っていないと s は動けない(ゆえにエラーコード S を返す)。

(4)setuidする方法

# chmod g+s        ←グループをsetuidする


3.ステッキービット!

drwxrwxrwt というパーミッションを良く見る。この中のtというのは、なかなか説明にない。これは、スティッキービットと呼ぶ、良く/tmp ディレクトリがそうなってるかと思う。当然、drwxrwxrwxは誰でも読み書き変更及び削除が出来てしまう。スティッキービットを付けることで書き込みは出来るけれど名前の変更や削除が出来ないようする。

(1)スティッキーする方法

# chmod +t < Dir >        ←スティッキーする

(2)スティッキーされてるディレクトリ

# ls -al
drwxr-xr-x 2 root root 4096 Nov 18 13:50 bin
drwxr-xr-x 2 root root 4096 Jun 25 2004 boot
drwxr-xr-x 2 root root 4096 Jun 25 2004 cdrom
drwxr-xr-x 9 root root 24576 Oct 13 14:18 dev
drwxr-xr-x 48 root root 4096 Jan 17 13:13 etc
drwxr-xr-x 2 root root 4096 Jun 25 2004 floppy
drwxrwsr-x 4 root staff 4096 Sep 13 11:01 home
drwxr-xr-x 2 root root 4096 Jun 25 2004 initrd
drwxr-xr-x 5 root root 4096 Jan 17 13:12 lib
drwx—— 2 root root 16384 Jun 25 2004 lost+found
drwxr-xr-x 2 root root 4096 Feb 9 2002 mnt
drwxr-xr-x 2 root root 4096 Jun 25 2004 opt
dr-xr-xr-x 39 root root 0 Jul 15 2004 proc
drwxr-xr-x 3 root root 4096 Sep 14 11:31 root
drwxr-xr-x 2 root root 4096 Jan 17 13:12 sbin
drwxrwxrwt 2 root root 4096 Feb 1 06:25 tmp
drwxr-xr-x 13 root root 4096 Jun 24 2004 usr
drwxr-xr-x 13 root root 4096 Jun 25 2004 var
lrwxrwxrwx 1 root root 25 Jun 25 2004 vmlinuz -> boot/vmlinuz-2.4.18-bf2.4

以上

コメント