0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Linux パーミッション

Last updated at Posted at 2025-01-27

パーミッション

ファイルシステムにおける基本的なセキュリティ機能で、誰が何をできるかを制御する仕組み。

具体的にはファイルやディレクトリに対して読み取り、書き込み、実行といった操作を許可・制限する。

パーミッションを確認する / $ ls

パーミッションは、ファイルやディレクトリの情報を確認する $ ls コマンドによって確認することができる。

ファイルのパーミッションを表示する
$ ls -l
ディレクトリのパーミッションを表示する
$ ls -ld

出力される情報は以下の構成になっている。

出力情報の構成
$ ls -l
-rwxr-xr-x 2 root root 4096 Jan 19 06:39 sample.txt

ファイルの種類+権限  リンク数  所有者  所有グループ  ファイルサイズ  タイムスタンプ  ファイル名 

権限は以下の通り、所有者、所有グループ、その他のユーザに対して9文字で区別される。

LPIC (1).png

ファイルの種類

$ ls -l コマンド実行で出力される先頭文字は、ファイルの種類を表す。

先頭文字 意味
- 通常のファイル
d ディレクトリ
l シンボリックリンク
c キャラクタデバイス
b ブロックデバイス

ファイルとディレクトリのパーミッションの違い

パーミッション ファイル ディレクトリ
読み取り(read) ファイルの中身を表示できる ファイル一覧を表示できる
書き込み(write) ファイルの中身を編集できる ディレクトリ内でファイルを作成・削除できる
実行(execute) 実行可能ファイルとして動作させる ディレクトリ内にアクセス・移動できる

$ chmod

change mode

ファイルに付与された権限を変更する。

$ chmod
$ chmod モード ファイル名

モードの記述形式には シンボリック形式 と 数値形式 がある。

シンボリック形式

演算子 +-= などを使用して設定を行う方法。

シンボリック形式
$ chmod [対象][演算子][権限] ファイル名
シンボリック形式 説明
対象 u:所有者(user)
g:グループ(group)
o:その他ユーザ(other)
a:すべてのユーザ(all)
演算子 + :追加
-:削除
=:設定
権限 r:読み取り(read)
w:書き込み(write)
x:実行(execute)
sSUIDSGID
tスティッキービット
(例)所有者に実行権限を追加
$ chmod u+x ファイル名
(例)グループの書き込み権限を削除
$ chmod g-w ファイル名
(例)その他のユーザに読み取り専用権限を設定
$ chmod o=r ファイル名

権限を設定する対象を指定しない場合、 a (すべてのユーザ)として扱われる。

(例)すべてのユーザに実行権限を付与
$ chmod +x ファイル名

, を使うと複数同時に操作ができる。

(例)複数同時に変更
$ chmod u+r,g-w,o+x ファイル名

数値形式

数値で設定する場合、所有者、グループ、その他ユーザの権限をそれぞれ数値で表現する。

シンボリック形式とは異なり、設定したい対象が一つでも、三者すべての権限を指定する必要がある。

数値モード
$ chmod [所有者][グループ][その他ユーザ] ファイル名
権限 数値 ファイル
r 4 読み取り(read)
w 2 書き込み(write)
x 1 実行(execute)
s 4xxx SUID
s 2xxx SGID
t 1xxx スティッキービット

権限は数値の 合計値 で表現する。

rwx → 4 (r) + 2 (w) + 1 (x) = 7
rw- → 4 (r) + 2 (w) + 0 (-) = 6
r-- → 4 (r) + 0 (-) + 0 (-) = 4
(例)所有者にrwx(7)、グループにrx(5)、その他にrx(5)を設定
$ chmod 755 ファイル名
(例)所有者にrw-(6)、グループとその他にr--(4)を設定
$ chmod 644 ファイル名
(例)すべての権限を削除(000)
$ chmod 000 ファイル名

SUID / SGID

Set User ID / Set Group ID

実行可能ファイルやディレクトリに設定できる特殊なパーミッション。

s で表現される。

SUID を設定する
$ chmod u+s ファイル名
$ chmod u+s ディレクトリ名
SGID を設定する
$ chmod g+s ファイル名
$ chmod g+s ディレクトリ名

数値は以下のように表現される。

SUID の場合 → 最上位の 4
SGID の場合 → 最上位の 2

SUID を数値で設定する
$ chmod 4755 ファイル名
$ chmod 4755 ディレクトリ名
SGID を数値で設定する
$ chmod 2755 ファイル名
$ chmod 2755 ディレクトリ名

シンボリックリンク、デバイスファイルなどには効果を持たない。

実行可能ファイルに設定される場合

通常、実行可能ファイルを実行したとき、当然だがファイルは実行者の権限で実行される。

一方、実行可能ファイルが SUID 権限を持つ場合、そのファイルは実行者の権限ではなく、ファイルを所有するユーザの権限 で実行される。

同様に、実行可能ファイルが SGID 権限を持つ場合、ファイルを所有するグループの権限 で実行される。

主にシステム管理に必要な操作を通常のユーザーが行う際に使用される、

例えば $ sudo によって操作するファイルは、ファイルの所有者権限(root ユーザ)で実行される。

sudo コマンドの権限を調べる
$ which sudo
/usr/bin/sudo

$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 335120 Jan 19 06:39 /usr/bin/sudo

$ which

他にも /etc/passwd ファイル(一般ユーザには書き込み権限がない)に保存されたパスワードを変更する $ passwd コマンド も SUID 権限で動作している。

/etc/passwd ファイルの権限と passwd コマンドの権限を調べる
$ ls -l /etc/passwd
-rw-r--r-- 1 root root 3010 Jan 19 06:29 /etc/passwd

$ which passwd
/usr/bin/passwd

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 Jan 19 06:39 /usr/bin/passwd

ディレクトリに設定される場合

通常、新規作成されたファイルやディレクトリは、作成者のプライマリグループが所有グループになる。

SGID がディレクトリに設定されている場合、そのディレクトリ内で作成されるファイルやディレクトリは、自動的に親ディレクトリと同じグループが所有するグループとして設定される。

チームで作業する場合、すべてのファイルを同じグループで管理できる。

SUID はディレクトリに対して効果を持たない。

スティッキービット

sticky=粘着性のある、くっつきやすい

ディレクトリ内のファイルを削除または名前変更できる権限を制限するための特殊な権限。

t で表現される。

通常は、共有ディレクトリ(/tmp )で使われる。

/tmp は多くのユーザーが一時ファイルを保存するために使用するディレクトリで、各ユーザーが他人のファイルを削除できないようスティッキービットが利用される。

/tmp ディレクトリの権限を調べる
$ ls -fd /tmp
drwxrwxrwt 19 root root 4096 Jan 27 11:13 /tmp

スティッキービットが有効なディレクトリでは、以下のルールが適用される。

  • ファイルの所有者だけが、削除や名前変更を行える
  • ディレクトリの所有者や root ユーザも、削除や名前変更できる
  • その他のユーザーは、たとえそのディレクトリに書き込み権限があっても、他人が所有するファイルを削除や変更できない
シンボリック形式で設定する
$ chmod +t ディレクトリ名
数値形式で設定する
$ chmod 1755 ディレクトリ名

この仕組みにより、共有ディレクトリ内での誤操作や悪意ある操作を防ぐことができる。

sticky=粘着性のある、くっつきやすい
初期のUNIXシステムには、実行中のプログラムがメモリに収まらないとき、そのバイナリ(実行可能ファイル)をディスクのスワップ領域に退避することがあった。ファイルにスティッキービットを設定してスワップ領域に「張り付けておく」ことで、実行後もそのバイナリ(実行可能ファイル)がキャッシュのように保持され、次回実行時にディスクから再ロードする必要がなくなり、起動が高速化された。

$ umask

ファイルやディレクトリ作成時のデフォルト権限を確認、変更する。

umask と呼ばれる値を使用する。

ファイルやディレクトリには、デフォルト設定できる最大の権限が存在し、umask 値は、これら最大権限から「どの権限を取り除くか」を表わす。

  • 最大権限
    • ファイル:666rw-rw-rw-
    • ディレクトリ:777rwxrwxrwx

つまり、umask 値に指定した部分は「削除する権限」になる。umask 値が 0 の場合、何も権限を削除しない。

新しい権限 = 最大権限 - umask値
デフォルト値を確認する
$ umask
0002

# 実際の権限(umask値 - 最大権限 = 実際の権限)
# ファイル      666 - 002 = 664
# ディレクトリ   777 - 002 = 775
デフォルト値を文字表現で確認する
$ umask -S
デフォルト値を変更する
$ umask umask値

$ chown

change owner

ファイルやディレクトリの所有者・所有グループを変更する。実行には root 権限が必要。

所有者、所有グループを同時に変更
$ sudo chown ユーザ名:グループ名 ファイル名

$ sudo

グループ名の記載は省略できる。

所有者のみ変更
$ sudo chown ユーザ名 ファイル名

所有グループのみの変更もできる。

所有グループのみ変更
$ sudo chown :グループ名 ファイル名

$ chgrp

change group

ファイルやディレクトリの所有グループを変更する。

一般ユーザで実行した場合、自身の所属グループへの変更しかできない。

ファイルの所有グループを変更
$ sudo chgrp グループ名 ファイル名

$ sudo

$ sudo

super user do

ログイン中のユーザに対して、一時的に管理者(root)権限を付与してコマンド実行することができる(仕組みは前述の SUID を参照)。

$ sudo
$ sudo コマンド

管理者しか実行できないコマンド操作でも、$ sudo コマンドを使うことによって一般ユーザが実行できるようになる。

現在のシェル環境で実行する
$ sudo -s コマンド
指定したユーザ権限で実行する
$ sudo -u ユーザ名 コマンド

$ su

switch user

別のユーザーに切り替える。

$ su
$ su ユーザー名

- を使用した場合、ログイン中のシェルが初期化され、変更先のユーザのホームディレクトリに移動する。(- を使用しない場合、ログイン中のシェル環境は変更先のユーザに引き継がれる)

シェル環境の初期化も行う
$ su - ユーザー名

ユーザ名を指定しない場合 root ユーザに切り替わる。

root に切り替える
$ su -

-c オプションで、変更先ユーザ権限でコマンド実行ができる。

root 権限でコマンドを実行
$ su -c コマンド root

$ sudo$ su の違い

違い $ sudo $ su
認証 現在のユーザーパスワードを要求 切り替え先のユーザーパスワードを要求
効果 実行されるコマンドでのみ権限が昇格 ログインユーザが完全に切り替わる
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?