Linuxコマンド chmod(ファイルやディレクトリのアクセス権を変更する)

指定したアクセス権限をファイル及びディレクトリに適用するchmodコマンドについて解説。

RHEL Fedora CentOS Vine Deblan Ubuntu Plamo

参考サイト:Man page of INSTALL

使用方法

chmodコマンドを使用ることによりディレクトリやファイルのアクセス権限を変更することができる。ただし、シンボリックリンクファイルのモードを変更することはできません。

アクセス権は、「755」のように数値で指定する方法と現在のアクセス権に「o+rwx」のように記号で指定する方法があります。

書式

$ chmod [オプション] モード設定(権限) ファイル名/ディレクトリ

オプション

-R,
–recursive
指定したディレクトリと、その下にあるファイルのアクセス権限をすべて変更する
-f,
–silent,
–quiet
アクセス権限を変更できない場合だけエラーを表示する
-c,
–changes
ファイルモードが変更されたときだけ冗長モードで表示する
–reference=ファイル名指定したファイルのモードを設定する
オプション一覧

パーミッションの確認方法

ls -lコマンドにより、ファイル及びディレクトリのパーミッション(アクセス権限)が表示できる。1文字目はファイルタイプ(種類)を表し、2文字目からパーミッションをrwxの形式で表している。

解説図
解説図
ls -lコマンドが出力する内容を解説
ファイルの種類

上記、sample.txtのアクセス権限は、オーナーrwであるため「読み取り」と「書き込み」が可能、次にグループrwであるため「読み取り」と「書き込み」が可能、その他は、であるため「読み取り」となっている。

ファイルの種類

記号意味説明
dディレクトリファイルディレクトリを意味するファイル
lシンボリックリンクファイルWindowsの「ショートカット」やMacOSのエイリアス
cキャラクタデバイスファイル
(文字型特殊ファイル)
デバイスを操作するためのポインタとなるファイルで、
バッファを使用しないファイル。
rawデバイスファイルともいい、一般的に/devに格納される。
bブロックデバイスファイル
(ブロック型特殊ファイル)
ハードウェアを操作するためのポインタとなるファイルで、
バッファを使用するファイル。一般的に/devに格納される。
p名前付きパイプファイルFIFO(First In First Out)ともいい、プロセス間で通信するための手段の
1つとして使用されるファイル。
sソケットファイルデータ送受信のため、主にネットワークにおける通信に使われるファイル。
一般的に「/tmp/orbit-ユーザ名」以下に格納される。
普通のファイル上記を除くファイルで、一般的に「ファイル」と呼ばれているファイル。
ファイルの種類の記号一覧

アクセス権を「755」のように8進数で指定する方法

指定するアクセス権限をモードビットを8進数で示したもので変更することができます。モードビットの8進数表記はユーザ、グループ、その他で分けて以下のように計算します。

ユーザーは、「読み取り・書き込み・実行権限」、グループは、「読み取り・実行権限」、その他は、「読み取り・実行権限」とアクセス権限を付与したい場合は、計算した結果755となります。

すべてのアクセス権限を取り除く場合は、000となります。

すべての権限を一括で指定して変更する場合、役に立つ方法となります。

モードビット計算結果
0
–x1
-w-2
-wx3
r–4
r-x5
rw-6
rwx7
ビットパターン一覧

サンプル

$ chmod 755 sample.txt 

実行結果

[centos@xxx work]$ ls -la
total 4
drwxrwxr-x  3 centos centos  39 Apr 20 22:17 .
drwx------. 6 centos centos 161 Apr 15 23:31 ..
drwxrwxr-x  2 centos centos   6 Apr 20 12:33 sample1
-rwx------  1 centos centos  17 Apr 20 22:17 sample.txt
[centos@xxx work]$ chmod 755 sample.txt    #755の計算結果のアクセス権限になる
[centos@xxx work]$ ls -la
total 4
drwxrwxr-x  3 centos centos  39 Apr 20 22:17 .
drwx------. 6 centos centos 161 Apr 15 23:31 ..
drwxrwxr-x  2 centos centos   6 Apr 20 12:33 sample1
-rwxr-xr-x  1 centos centos  17 Apr 20 22:17 sample.txt
[centos@xxx work]$ 

アクセス権を「u+rwx」のように記号で指定する方法

モード設定へ「アクセス権の指定」+「権限の操作」+「許可条件」を羅列して設定します。計算せず一部の権限を付与したり剥奪したりする場合、よく使用します。

ユーザーに、「読み取り権限・書き込み権限・実行権限」を付与したい場合は、u+rwxとなります。グループから「書き込み権限」を剥奪したい場合は、g-wとなります。すべて(ユーザー、グループ、その他)に「実行権限」を付与したい場合は、a+xとなります。

権限の操作

権限の操作

操作説明
+権限を追加する
権限を削除する
=権限を指定する

アクセス権の指定

対象説明
uuser所有者
ggroup所有グループ
ootherその他のユーザー
aallすべてのユーザー

許可条件

記号絶対値アクセス権限
r読み込み可能
w書き込み可能
x実行可能
s4000set uid(実行時に
UDIを設定する)
g2000set gid(実行時に
GDIを設定する)
t1000スティッキービット

サンプル

すべてに実行権限を付与する。

$ chmod a+x sample.txt 

実行結果

[centos@xxx work]$ ls -la
total 4
drwxrwxr-x  3 centos centos  39 Apr 20 22:17 .
drwx------. 6 centos centos 161 Apr 15 23:31 ..
drwxrwxr-x  2 centos centos   6 Apr 20 12:33 sample1
-rw-r--r--  1 centos centos  17 Apr 20 22:17 sample.txt
[centos@xxx work]$ chmod a+x sample.txt                      #すべてに実行権限を付与。
[centos@xxx work]$ ls -la
total 4
drwxrwxr-x  3 centos centos  39 Apr 20 22:17 .
drwx------. 6 centos centos 161 Apr 15 23:31 ..
drwxrwxr-x  2 centos centos   6 Apr 20 12:33 sample1
-rwxr-xr-x  1 centos centos  17 Apr 20 22:17 sample.txt   #すべてに実行権限(x)が付与されている。
[centos@xxx work]$ 

一般ユーザーのアクセス権限

一般ユーザーが自分のファイルのパーミッションを変更する場合は、root権限は必要ありません。

特殊なビット

パーミッションの認可条件は、「読み取り」、「書き込み」、「実行」の3つですが、set uid、set gidという特殊なビットも存在します。

「set uid」を設定すると、そのファイルの所有者に設定されているユーザー番号で実行できるようになります。そのファイルの所有者の権限でコマンドが実行されるようになります。例えばsuやmountコマンドに設定されています。「set gid」を設定すると、そのファイルの所有グループに設定されているグループ番号で実行できるようになります。そのファイルの所有グループの権限でコマンドが実行されます。wallコマンドやwriteコマンドに設定されています。

特殊なビット|スティッキービット

「sticky bit」は、多くの場合ディレクトリに対して設定します。設定することにより中に含まれるサブディレクトリ、ファイルの名称変更したり、削除を所有者に限定することができます。

現在のアクセス権に権限を与える

u+xのように、現在のアクセス権に新たに権限を足すことができる。サンプルではユーザーにファイルの実行権限を追加で与えている。

サンプル:ユーザーに実行権限を付与

$ chmod u+x sample.txt 

実行結果

[centos@xxx work]$ ls -la
total 4
drwxrwxr-x  3 centos centos  39 Apr 20 22:17 .
drwx------. 6 centos centos 161 Apr 15 23:31 ..
drwxrwxr-x  2 centos centos   6 Apr 20 12:33 sample1
-rw-rw-r--  1 centos centos  17 Apr 20 22:17 sample.txt
[centos@xxx work]$ chmod u+x sample.txt                    #ユーザーに実行権限を与える
[centos@xxx work]$ ls -la
total 4
drwxrwxr-x  3 centos centos  39 Apr 20 22:17 .
drwx------. 6 centos centos 161 Apr 15 23:31 ..
drwxrwxr-x  2 centos centos   6 Apr 20 12:33 sample1
-rwxrw-r--  1 centos centos  17 Apr 20 22:17 sample.txt #ユーザーに実行権限が与えられた。
[centos@xxx work]$ 

サンプル:グループに読み取り権限を付与

$ chmod g+r sample.txt 

実行結果

[centos@xxx work]$ ls -la
total 4
drwxrwxr-x  3 centos centos  39 Apr 20 22:17 .
drwx------. 6 centos centos 161 Apr 15 23:31 ..
drwxrwxr-x  2 centos centos   6 Apr 20 12:33 sample1
-rwx------  1 centos centos  17 Apr 20 22:17 sample.txt

[centos@xxx work]$ chmod g+r sample.txt 
[centos@xxx work]$ ls -la
total 4
drwxrwxr-x  3 centos centos  39 Apr 20 22:17 .
drwx------. 6 centos centos 161 Apr 15 23:31 ..
drwxrwxr-x  2 centos centos   6 Apr 20 12:33 sample1
-rwxr-----  1 centos centos  17 Apr 20 22:17 sample.txt   #グループに読み取り権限が付与されている。
[centos@xxx work]$ 

サンプル:その他に書き込み権限を付与

$ chmod o+w sample.txt 

実行結果

[centos@xxx work]$ ls -la
total 4
drwxrwxr-x  3 centos centos  39 Apr 20 22:17 .
drwx------. 6 centos centos 161 Apr 15 23:31 ..
drwxrwxr-x  2 centos centos   6 Apr 20 12:33 sample1
-rwxr-----  1 centos centos  17 Apr 20 22:17 sample.txt
[centos@xxx work]$ chmod o+w sample.txt 
[centos@xxx work]$ ls -la
total 4
drwxrwxr-x  3 centos centos  39 Apr 20 22:17 .
drwx------. 6 centos centos 161 Apr 15 23:31 ..
drwxrwxr-x  2 centos centos   6 Apr 20 12:33 sample1
-rwxr---w-  1 centos centos  17 Apr 20 22:17 sample.txt #その他に書き込み権限が付与される。
[centos@xxx work]$ 

サンプル:すべて(ユーザー、グループ、その他)に読み取り権限を付与

$ chmod a+r sample.txt 

実行結果

[centos@xxx work]$ ls -la
total 4
drwxrwxr-x  3 centos centos  39 Apr 20 22:17 .
drwx------. 6 centos centos 161 Apr 15 23:31 ..
drwxrwxr-x  2 centos centos   6 Apr 20 12:33 sample1
--wx----w-  1 centos centos  17 Apr 20 22:17 sample.txt

[centos@xxx work]$ chmod a+r sample.txt

[centos@xxx work]$ ls -la
total 4
drwxrwxr-x  3 centos centos  39 Apr 20 22:17 .
drwx------. 6 centos centos 161 Apr 15 23:31 ..
drwxrwxr-x  2 centos centos   6 Apr 20 12:33 sample1
-rwxr--rw-  1 centos centos  17 Apr 20 22:17 sample.txt
[centos@xxx work]$ 

現在のアクセス権から権限を剥奪する

u-xと指定することで、ユーザーから実行権限を剥奪することができます。gやoを指定した場合は、グループやその他から実行権限を剥奪することもできます。

サンプル

$ chmod u-x sample.txt 

実行結果

[centos@ work]$ ls -la
total 4
drwxrwxr-x  3 centos centos  39 Apr 20 22:17 .
drwx------. 6 centos centos 161 Apr 15 23:31 ..
drwxrwxr-x  2 centos centos   6 Apr 20 12:33 sample1
-rwxr-xr-x  1 centos centos  17 Apr 20 22:17 sample.txt

[centos@xxx work]$ chmod u-x sample.txt          #ユーザーから実行権限を剥奪する。

[centos@xxx work]$ ls -la
total 4
drwxrwxr-x  3 centos centos  39 Apr 20 22:17 .
drwx------. 6 centos centos 161 Apr 15 23:31 ..
drwxrwxr-x  2 centos centos   6 Apr 20 12:33 sample1
-rw-r-xr-x  1 centos centos  17 Apr 20 22:17 sample.txt

[centos@ work]$ 

ディレクトリ配下すべて同じ権限にする

-r オプションを指定することにより、指定したディレクトリ配下すべて同じ権限となる。

サンプル

サンプルでは、sample/配下のディレクトリ及びファイルにすべてのユーザーに実行権限を付与している。

$ chmod -r a+x sample/ 

実行結果

[centos@xxx work]$ tree
.
└── sample1
    ├── sample1.txt
    └── work

2 directories, 1 file
[centos@xxx work]$ ls -la
total 0
drwxrwxr-x  3 centos centos  21 Apr 21 07:31 .
drwx------. 6 centos centos 161 Apr 15 23:31 ..
drwxrw-r--  3 centos centos  37 Apr 21 07:36 sample1

[centos@xxx work]$ ls -la sample1/
total 4
drwxrw-r-- 3 centos centos 37 Apr 21 07:36 .
drwxrwxr-x 3 centos centos 21 Apr 21 07:31 ..
-rwxrw---- 1 centos centos  3 Apr 21 07:36 sample1.txt
drwxrw---- 2 centos centos  6 Apr 21 07:36 work

[centos@xxx work]$ chmod -R a+x sample1/

[centos@xxx work]$ ls -la            #sample1ディレクトリ配下すべてにファイル実行権限が付与されている。
total 0
drwxrwxr-x  3 centos centos  21 Apr 21 07:31 .
drwx------. 6 centos centos 161 Apr 15 23:31 ..
drwxrwxr-x  3 centos centos  37 Apr 21 07:36 sample1

[centos@xxx work]$ ls -la sample1/   #sample1ディレクトリ配下すべてにファイル実行権限が付与されている。
total 4
drwxrwxr-x 3 centos centos 37 Apr 21 07:36 .
drwxrwxr-x 3 centos centos 21 Apr 21 07:31 ..
-rwxrwx--x 1 centos centos  3 Apr 21 07:36 sample1.txt
drwxrwx--x 2 centos centos  6 Apr 21 07:36 work
[centos@xxx work]$ 

全ユーザーにすべての権限を与え削除できるのは所有者のみ

全ユーザーがファイルの作成や削除、書き換え、実行ができるディレクトリを作成する。/tmpのようなディレクトリである。その場合は、スティッキービットを使用する。また、ファイルにも設定可能である。コマンドを実行する際は、root及びsuで実行する。

サンプル

サンプルでは、sample/配下のディレクトリ及びファイルにすべてのユーザーに実行権限を付与している。

$ chmod +t sample/

実行結果

[root@xxx /]$ ls -la
total 8388632
dr-xr-xr-x.  18 root root        254 Apr 21 09:51 .
dr-xr-xr-x.  18 root root        254 Apr 21 09:51 ..

drwxr-xr-t    2 root root         25 Apr 21 09:53 sample
drwxrwxrwt.  11 root root       4096 Apr 21 03:32 tmp
drwxr-xr-x.  13 root root        155 Oct  5  2018 usr
drwxr-xr-x.  21 root root       4096 Apr  1 21:47 var
[root@xxx /]$ chmod +t sample/   #スティッキービットを指定して実行
[root@xxx /]$ ls -la
total 8388632
dr-xr-xr-x.  18 root root        254 Apr 21 09:51 .
dr-xr-xr-x.  18 root root        254 Apr 21 09:51 ..

drwxr-xr-t    2 root root         25 Apr 21 09:53 sample
dr-xr-xr-x   13 root root          0 Apr 21 09:51 sys
drwxrwxrwt.  11 root root       4096 Apr 21 03:32 tmp
drwxr-xr-x.  13 root root        155 Oct  5  2018 usr
drwxr-xr-x.  21 root root       4096 Apr  1 21:47 var
[root@xxx /]$