【Linux】ファイルシステムについて
SUID
Set User IDの略。
SUIDを付与されたファイルやディレクトリは誰が実行しても所有者の権限で実行される。
例えば、passwdコマンドは/etc/shadowに書き込みを行うが、/etc/shadowのパーミッションは以下のようになっている。
例)/etc/shadowファイルのパーミッション
$ ls -l /etc/shadow ----------. 1 root root 776 2月 22 18:25 2016 /etc/shadow
このパーミッションだと、通常rootユーザ以外は書き込みができないはずであるが、passwdコマンドには以下のようにSUIDが与えられているので、一般ユーザが実行しても/etc/shadowに書き込みができる。
例)passwdコマンドのパーミッション
$ ls -l /usr/bin/passwd -rwsr-xr-x. 1 root root 30768 2月 22 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 2月 23 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 2月 23 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 2月 23 20:08 2016 dir
ちなみに、その他ユーザに実行権限を与えていないと大文字でフラグが立つ。
$ chmod 1006 testdir $ ls -l testdir d------rwT. 2 root root 4096 2月 23 20:06 2016 testdir # その他ユーザに実行権限さえあれば大文字にならない $ chmod 1001 testdir $ ls -l testdir d--------t. 2 root root 4096 2月 23 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 2月 23 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の設定はユーザ毎となる。
以下はそのうち更新する。。。