はじめる人のびぎねっと。

プライバシーポリシー

読み物

Linux基礎

パーミッションとは?(その1)

パーミッションとは、ファイルやディレクトリに対する操作に権限を与え、ファイルの保護モードを設定することです。

パーミッションには「読み込み」、「書き込み」、「実行」の3種類があり、それぞれをファイルの「所有者」、「グループユーザー」、「その他のユーザー」に対して設定できます。

例)ディレクトリ「etc」の中のファイル「shadow」をの内容を cat コマンドで表示してみましょう。

$ cat /etc/shadow
cat: /etc/shadow 許可がありません

「許可がありません」というエラーが出て表示できません。では、ファイル「shadow」にはどのようなパーミッションが設定されているのでしょうか。

パーミッションの確認をするには ls コマンドにオプション -l をつけて確認します。

$ ls -l /etc/shadow

-r-------- 1 root root 1085 12月 27 15:15 /etc/shadow

表示の意味

-r-------- ファイルの種別と保護モード(パーミッション)
root ファイルを所有するユーザー
root ファイルの属するグループ
12月 27 15:15 ファイルの最終更新日時 ※
/etc/shadow ファイル名

※「日」が表示されないのはRedHat7.3の不具合です

パーミッションの解説

パーミッションを表しているのは、表示されたうちの一番左にある10文字です。一番左1つと、あとは3つの文字の組み合わせが3つという構成です。

drwxrwxrwx
一番左の d は、ディレクトリかどうかを表しています。

drwxrwxrwx
3文字セットの左の r は、読み込み(Read)パーミッションを表しています。

drwxrwxrwx
3文字セットの真ん中の w は、書き込み(Write)パーミッションを表しています。

drwxrwxrwx
3文字セットの真ん中の x は、実行(eXecute)パーミッションを表しています。

rwxのセットが3つあるのは、それぞれの効果が及ぶ範囲が異なっているからです。

  • 一番左のセットが有効なのはそのファイル(ディレクトリ)の「所有ユーザー」だけです。
  • 真ん中のセットが有効なのはそのファイル(ディレクトリ)の「所有グループ」だけです。
  • 一番右のセットが有効なのは「その他のユーザー」です。

上記の例でファイル「shadow」には、所有者であるユーザー「root」以外、ファイル対してどの実行もできない、「---(全て禁止)」というパーミッションが設定されているのがわかります。

つまり、所有者以外にはファイル「shadow」に対して「読み込み」の許可がなかったため、上記の cat コマンドで「許可がありません」というエラーが出てしまったのです。

ファイル「shadow」のパーミッションについて

shadowファイルには、ユーザーのパスワードが暗号化された上で保存されています。これを「シャドウパスワード」と呼びます。

暗号化されているとはいえ、誰でも簡単に読めるようではセキュリティ上問題があります。そのため、このファイルにはroot権限を持つものにしかアクセス許可が与えられていません。

パーミッションの組み合せ例

-rw------- 所有ユーザーは読み込み、書き込みが許可、その他のユーザーは全て禁止
-rw-r--r-- 所有ユーザーは読み込み、書き込みが許可、その他のユーザーは読み込みのみ許可
-rw-rw-r-- 所有ユーザーと所有グループは読み込み、書き込みが許可、その他のユーザーは読み込みのみ許可
-rwxrw-rw- 所有ユーザーは全て許可、所有グループとその他のユーザーは読み込み、書き込みが許可
-rwxrwxrwx 全てのユーザーに全て許可
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/var/spool/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/dev/null
rpm:x:37:37::/var/lib/rpm:/bin/bash
xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false
wnn:x:49:49:Wnn System Account:/home/wnn:/bin/bash
ntp:x:38:38::/etc/ntp:/sbin/nologin
rpc:x:32:32:Portmapper RPC user:/:/bin/false
gdm:x:42:42::/var/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/bin/false
ident:x:98:98:pident user:/:/sbin/nologin
radvd:x:75:75:radvd user:/:/bin/false
apache:x:48:48:Apache:/var/www:/bin/false
squid:x:23:23::/var/spool/squid:/dev/null
pcap:x:77:77::/var/arpwatch:/bin/nologin
staff:x:500:500::/home/staff:/bin/bash
member:x:501:501::/home/member:/bin/bash
user:x:502:502::/home/user:/bin/bash

このファイルにはユーザー名やパスワード、ユーザーID等の情報が示されています。実際パスワードが表示されるべきところには「x」と表示され、パスワードは暗号化されたうえ、「/etc/shadow」に保存されています。

例)/etc/passwd に一行、「test:x:503:503::/home/test:/bin/bash」と書き加える操作をしてみましょう。

$ echo test:x:503:503::/home/test:/bin/bash >> /etc/passwd
bash: /etc/passwd: Permission denied

それでは、ファイル「passwd」のパーミッションを確認してみます。

$ ls -l /etc/passwd
-rw-r--r-- 1 root root 1485 12月 27 15:15 /etc/passwd

他のユーザーに対して、読み込みは許可されていますが書き込み(書き換え)は許可されていません。

例)上記のファイルをviエディタで編集してみましょう

$ vi /etc/passwd
?????
"/etc/passwd" [readonly] 35L, 1485C

すると、最下行で「readonly」と警告が表示されます。これは、パーミッションでわかるとおり、「読み込み」だけが許可されているためです。

例)ファイルの内容変更を試してみましょう

?????
-- INSERT -- Warning: Changing a readonly file

文字を挿入しようとしたところ、最下行に「Warning: Changing a readonly file」という警告が表示されました。「書き込み」許可がないのでエラーとなります。

例)警告を無視して保存しようとした場合

test:x:503:503::/home/test:/bin/bash    ←入力した文字
?????
'readonly' option is set (use ! to override)

とエラーが出て、保存することができません。

パーミッションの変更

パーミッションの変更ができるのは、そのファイル(ディレクトリ)の所有者、もしくはroot権限者に限られます。パーミッションの変更にはchmod コマンドを使います。

chmod モード ファイル名(ディレクトリ名)
chmodコマンドの引数の「モード」には、「誰に」「何を」「許可するか禁止するか」という情報を与えます。

「誰に」については

u 所有ユーザー(user)
g 所有グループ(group)
o その他のユーザー(others)
a 全て(all)

「許可するか禁止するか」については、

+ 許可する
-禁止する

「何を」については、

r 読み込み(read)
w 書き込み(write)
x 実行(execute)

●chmodの組み合せ例

u+x 所有ユーザーに実行を許可
a+rwx 全てのユーザーに全て許可
go-rwx 所有ユーザー以外全て禁止
g+r 所有グループに読み込みを許可

例)警告を無視して保存しようとした場合

test:x:503:503::/home/test:/bin/bash ←入力した文字
?????
'readonly' option is set (use ! to override)

とエラーが出て保存することはできません。

例)自分のディレクトリに新規ファイルを作り、パーミッションの変更を確認します

$ echo readable > newfile "readable"という文字列を含む「newfile」を作成
$ ls -l newfile     パーミッションの確認
-rw-rw-r-- 1 user user 11 1月 17 17:30 newfile
$ cat newfile      内容を表示
readable
$ chmod u-r newfile   所有ユーザー(自分)に対して「読み込み」禁止の設定
$ ls -l newfile パーミッションの確認
--w-rw-r-- 1 user user 11 1月 17 17:30 newfile
$ cat newfile          「読み込み」ができるか確認
cat: newfile: 許可がありません  許可がありません、とエラー表示
$ chmod u+r newfile 「読み込み」許可の設定
$ ls -l newfile      パーミッションの確認
-r--rw-r-- 1 user user 11 1月 17 17:30 newfile
$ cat newfile   内容の表示
readable     ファイルの内容は"readable"であると表示
$ chmod u-w newfile   所有ユーザー(自分)に対して「書き込み」禁止の設定
$ ls -l newfile     パーミッションの確認
-r--rw-r-- 1 user user 11 1月 17 17:30 newfile
$ echo writable > newfile   「書き込み」ができるかどうか確認
bash: newfile: Permission denied パーミッションがない、とエラー表示

次のページへ

このページのTOPへ