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の形式で表している。
上記、sample.txtのアクセス権限は、オーナーがrwであるため「読み取り」と「書き込み」が可能、次にグループはrwであるため「読み取り」と「書き込み」が可能、その他は、rであるため「読み取り」となっている。
ファイルの種類
記号 | 意味 | 説明 |
---|---|---|
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 |
–x | 1 |
-w- | 2 |
-wx | 3 |
r– | 4 |
r-x | 5 |
rw- | 6 |
rwx | 7 |
サンプル
$ 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となります。
権限の操作
権限の操作
操作 | 説明 |
---|---|
+ | 権限を追加する |
– | 権限を削除する |
= | 権限を指定する |
アクセス権の指定
対象 | 説明 | |
---|---|---|
u | user | 所有者 |
g | group | 所有グループ |
o | other | その他のユーザー |
a | all | すべてのユーザー |
許可条件
記号 | 絶対値 | アクセス権限 |
---|---|---|
r | 読み込み可能 | |
w | 書き込み可能 | |
x | 実行可能 | |
s | 4000 | set uid(実行時に UDIを設定する) |
g | 2000 | set gid(実行時に GDIを設定する) |
t | 1000 | スティッキービット |
サンプル
すべてに実行権限を付与する。
$ 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 /]$