【Linux】パーミッション / アクセス権限 / ケーパビリティ について

■ はじめに

Linux のパーミッション周りをメモ。

 ■ パーミッションの確認

ls -l

 アクセス権限の見方

d rwx rwx rwx
- --- --- ---
1  2   3   4

【項目】

 1) ファイル種別(ファイル(-)/ディレクトリ(d)/シンボリックリンク(l))
 2) 所有者(その対象物の所有者に対しての権限)
 3) 所有グループ(所有者が所属しているグループに対しての権限)
 4) その他(上記以外の利用者に対しての権限)

パーミッション

 * r : 読み込み権限 (Read)
 * w : 書き込み権限 (Write)
 * x : 実行権限     (eXecute)
 * - : 許可しない
 * s : SUID

 ■ アクセス権の変更

chmod : change mode? 

chmod [権限] [ディレクトリ/ファイル]

# [権限]は、「所有者」「所属グループ」「その他ユーザー」の順で指定

例1

# ファイル "startup.sh" を全てのユーザに読み/書き/実行権限を付与
chmod 777 startup.sh

例2

# ファイル "startup.sh" の権限を以下のように付与

chmod 755 startup.sh

 + その所有者は読み出せて、書き込めて、実行できる
 + そのグループは、読み出せて、実行できる(書き込みは不可)
 + その他のユーザは、読み出せて、実行できる(書き込みは不可)

例3

# ディレクトリ "tomcat" およびその配下のディレクトリ・ファイルを
# 全てのユーザに読み/書き/実行権限を付与

chmod -R 777 tomcat

例4

# 実行権限を付ける

chmod +x /etc/init.d/tomcat

例5

# u(所有者に)+(権限を与える)x(実行権限)

chmod u+x /etc/init.d/tomcat

# u(所有者に)-(権限を外す)x(実行権限)

chmod u-x /etc/init.d/tomcat

 主なパーミッション

777

 * 全てのユーザに対して、読み書き実行可能

4(r)+ 2(w)+ 1(x)= 7 

755

 * 誰でも読込みと実行はできるが、書き込みは自分だけ
 (例えば「スクリプト」「ディレクトリ」)

666

 * 自分もグループメンバも他人も、読み書き可能

644

 * 自分は読み書き可能だが、
 グループメンバや他人は読み込みしかできない
 (例えば、「(静的な)HTMLファイル」「画像」などのリソース)

 ■ ファイル/ディレクトリの所有者を変更する

chown : change owner? 

chown -c [所有者]:[所有グループ] [ディレクトリ/ファイル]

例1

# ディレクトリ "tomcat" およびその配下のディレクトリ・ファイル所有者を
# ユーザadmin/にグループadmingroupに変更する

chmod -R -c admin:admingroup tomcat

 ■ ケーパビリティ(POSIX Capability)

POSIX(Portable Operating System Interface for UNIX

 * プロセスにroot特権を与えてしまうと、
 動作しているプロセスに脆弱性があった場合、
 コンピュータのすべてを自由にできる特権を
 奪われてしまう可能性がある

 => 特権をさらに細分化した『ケーパビリティ』と
  呼ばれる単位で取り扱えるようにし、
  プロセスに最小限のケーパビリティを与え、
  必要な処理を行わせようにする

 主なケーパビリティ

CAP_NET_BIND_SERVICE

 * 1024 番以下のポート番号へのバインディングを許可する

 ケーパビリティセット

effective (実効)

 * カーネルがスレッドの権限 (permission) をチェックするときに
 使用するケーパビリティセット

permitted (許可)

 * そのプロセスが持つことを許されているケイパビリティ

inheritable (継承可能)

 * 実行時に継承されるケーパビリティセット

 ケーパビリティの設定

# setcapコマンドを使用する 

sudo setcap 'CAP_NET_BIND_SERVICE=+ep' /path/to/serive

 参考文献

http://www.atmarkit.co.jp/fsecurity/rensai/lids03/lids01.html