忘備録

日々の調べ物をまとめる。アウトプットする。基本自分用。

【Linux】ファイルシステムについて

SUID

Set User IDの略。

SUIDを付与されたファイルやディレクトリは誰が実行しても所有者の権限で実行される。

例えば、passwdコマンドは/etc/shadowに書き込みを行うが、/etc/shadowのパーミッションは以下のようになっている。

例)/etc/shadowファイルのパーミッション

$  ls -l /etc/shadow
----------. 1 root root 776  222 18:25 2016 /etc/shadow

このパーミッションだと、通常rootユーザ以外は書き込みができないはずであるが、passwdコマンドには以下のようにSUIDが与えられているので、一般ユーザが実行しても/etc/shadowに書き込みができる。

例)passwdコマンドのパーミッション

$ ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768  222 20:48 2012 /usr/bin/passwd

SUIDの付与の仕方

chmod 4xxx file

もしくは、chmod u+s file でセットできる。

例)絶対モードでSUIDを付与

$ chmod 4777 fir
$ ls -l hoge
-rwsrwxrwx.   1 root root     0  223 20:39 2016 fir

ちなみにシェルスクリプトに設定しても効果はない模様。

一般ユーザにルート権限でシェルを実行する方法について − Linux Square − @IT

スクリプトのSUIDビットというのは危なっかしいので無視されるもののようです。

こんなのもあったけど、CentOS6ではできなかった

[Solaris] シェルスクリプトのオーナーをrootにしてsetuidビットをセットしたがroot権限で動作しない - Life with IT

ただし以下のようにスクリプトの最初にオプションを付けることによってこの制限を外すことができる。
Bourneシェルの場合
#!/bin/sh -p

SGID

Set Group IDの略。

SUIDが付与されている場合、所有者の権限で実行されるのに対し、こちらはグループの権限で実行される。

ディレクトリに付与するとそのディレクトリで作成されたファイルは全て同じグループとなるので、複数ユーザで共有するディレクトリに設定するとよい。

SGIDの付与の仕方

chmod 2xxx dir

もしくは、chmod g+s dir でセットできる。

例)絶対モードでSGIDを付与

$ chmod 2777 dir
$ ls -l hoge
drwxrwsrwx.   2 root root  4096  223 20:03 2016 dir

スティッキービット(Sticky bit)

スティッキービットを付与されたファイルやディレクトリは所有者以外が削除できなくなる。

通常はディレクトリに設定する。

スティッキービットの付与の仕方

chmod 1xxx file

もしくは、chmod o+t file でセットできる。

$ chmod 1777 dir
$ ls -l
drwxr-xr-t.   2 root root  4096  223 20:08 2016 dir

ちなみに、その他ユーザに実行権限を与えていないと大文字でフラグが立つ。

$ chmod 1006 testdir
$ ls -l testdir
d------rwT.   2 root root  4096  223 20:06 2016 testdir
# その他ユーザに実行権限さえあれば大文字にならない
$ chmod 1001 testdir
$ ls -l testdir
d--------t.   2 root root  4096  223 20:06 2016 testdir

これによって何が嬉しいのかよく分からないので、エロい人教えてください。

【余談】chmodについて

chmodの絶対モード(数字で設定するやつ)って覚えにくいなーとか思ってたんですが、最近になってあの数字が、パーミッションのビットを表してることを教えてもらった。

7(10)
-> 111(2)
=> rwx

6(10)
-> 110
=> rw-

4(10)
-> 100
=> r--

$ chmod 764 file
$ ls -l file
-rwxrw-r--.  1 root root     0  223 20:14 2016 file

なるほど、分かればシンボリックモード(u+x みたいなやつ)より扱いやすいですね。

てか、もっと早く教えてよ

えっ、自分で気づけって?

デフォルトのパーミッション

作成したファイルやディレクトリのデフォルトのパーミッションはumaskによって決まる。

ファイルは「666」から、ディレクトリは「777」からumaskを差し引いたものがデフォルトのパーミッションになる。

たとえば、umaskが0022の場合

ファイルのパーミッション
644 (= 666 - (0)022) => -rw-r--r--

ディレクトリのパーミッション
755 (= 777 - (0)022) => drwxr-xr-x

となる

umaskの確認

umaskコマンドを引数なしで実行すると確認できる。

また -Sオプションを付けるとシンボリックモードで確認できる。

$ umask 
0022
$ umask -S
u=rwx,g=rx,o=rx

umaskの設定

umaskコマンドに引数を与えて設定。

また、シンボリックモードでも設定可能。

$ umask 0002
# 確認
$ umask
0002
# シンボリックモードで設定
$ umask u=rwx,g=rx,o=rx
# 確認
$ umask
0022

ちなみに、umaskの設定はユーザ毎となる。

以下はそのうち更新する。。。

ACL

ファイルの暗号化(GnuPG

ファイルシステムの暗号化