chmod コマンドを使用すると、ファイルのアクセス権を変更できます。ファイルまたはディレクトリの所有者、あるいはスーパーユーザーだけがそのアクセス権を変更できます。
chmod コマンドを使用して、次のどちらかのモードでアクセス権を設定できます。
絶対モード - ファイルのアクセス権を表す数値を使用します。これは、アクセス権を設定するときに最も一般的に使用される方法です。絶対モードを使用してアクセス権を変更するときは、3 つ 1 組のアクセス権を 8 進数で表します。
表 17-5 に、絶対モードでファイルのアクセス権を設定するための 8 進数値を示します。これらの数字を 3 つ組み合せて、所有者、グループ、その他のファイルアクセス権をこの順に設定します。たとえば、値 644 は、所有者に対して読み取り権と書き込み権を設定し、グループとその他に対しては読み取り権だけを設定します。
表 17-5 絶対モードによるファイルのアクセス権の設定
8 進数値 |
ファイルのアクセス権 |
設定されるアクセス権 |
---|---|---|
0 |
--- |
なし |
1 |
--x |
実行権のみ |
2 |
-w- |
書き込み権のみ |
3 |
-wx |
書き込み権と実行権 |
4 |
r-- |
読み取り権のみ |
5 |
r-x |
読み取り権と実行権 |
6 |
rw- |
読み取り権と書き込み権 |
7 |
rwx |
読み取り権、書き込み権、実行権 |
ファイルには、絶対モードまたは記号モードで特殊アクセス権を設定できます。絶対モードでは、3 つ 1 組のアクセス権の左端に新しい 8 進数値を追加して、特殊アクセス権を設定します。表 17-6 に、ファイルに特殊アクセス権を設定する 8 進数値を示します。
表 17-6 絶対モードによる特殊アクセス権の設定
8 進数値 |
特殊アクセス権の設定 |
---|---|
1 |
スティッキビット |
2 |
setguid |
4 |
setuid |
表 17-7 に、記号モードでファイルのアクセス権を設定するための記号を示します。記号では、アクセス権を設定または変更できる対象ユーザー、実行される操作、あるいは割り当てるまたは変更するアクセス権を指定できます。
表 17-7 記号モードによるファイルのアクセス権の設定
記号 |
機能 |
説明 |
---|---|---|
u |
対象ユーザー |
ユーザー (所有者) |
g |
対象ユーザー |
グループ |
o |
対象ユーザー |
その他 |
a |
対象ユーザー |
すべて |
= |
操作 |
割り当て |
+ |
操作 |
追加 |
- |
操作 |
削除 |
r |
アクセス権 |
読み取り |
w |
アクセス権 |
書き込み |
x |
アクセス権 |
実行 |
l |
アクセス権 |
強制ロック、setgid ビットはオン、グループ実行ビットはオフ |
s |
アクセス権 |
setuid または setgid ビットはオン |
S |
アクセス権 |
suid ビットはオン、ユーザー実行ビットはオフ |
t |
アクセス権 |
スティッキビットはオン、その他の実行ビットはオン |
T |
アクセス権 |
スティッキビットはオン、その他の実行ビットはオフ |
機能列の「対象ユーザー」、「操作」、および「アクセス権」を順番に連結した文字列によって、ファイルまたはディレクトリのアクセス権を変更する記号を指定します。
対象ユーザー |
アクセス権を変更する対象となるユーザーを指定する |
操作 |
実行する操作を指定する |
アクセス権 |
変更するアクセス権を指定する |
ファイルまたはディレクトリの所有者でない場合は、スーパーユーザーになります。
現在の所有者またはスーパーユーザーだけが、chmod コマンドを使用してファイルまたはディレクトリのアクセス権を変更できます。
chmod コマンドを使用してアクセス権を絶対モードで変更します。
$ chmod nnn filename |
nnn |
ファイル所有者、ファイルグループ、その他のアクセス権をこの順序で表す 8 進数値を指定する。有効な 8 進数値については、表 17-5 を参照 |
filename |
ファイルまたはディレクトリを指定する |
chmod を使用して ACL エントリを持つファイルのファイルグループアクセス権を変更する場合、ファイルグループアクセス権と ACL マスクの両方が新しいアクセス権に変更されます。新しい ACL マスクアクセス権は、そのファイル上に ACL エントリを持つ追加ユーザーおよびグループの実効アクセス権を変更する場合があるので注意が必要です。getfacl(1) コマンドを使用して、すべての ACL エントリに適切なアクセス権が設定されていることを確認してください。
ファイルのアクセス権が変更されていることを確認します。
$ ls -l filename |
次の例は、公共ディレクトリのアクセス権を 744 (読み取り/書き込み/実行権、読み取り権のみ、読み取り権のみ) から 755 (読み取り/書き込み/実行権、読み取り/実行権、読み取り/実行権) に変更します。
$ ls -ld public_dir drwxr--r-- 1 ignatz staff 6023 Aug 5 12:06 public_dir $ chmod 755 public_dir $ ls -ld public_dir drwxr-xr-x 1 ignatz staff 6023 Aug 5 12:06 public_dir |
次の例は、実行可能シェルスクリプトのアクセス権を読み取り/書き込み権から読み取り/書き込み/実行権へ変更します。
$ ls -l my_script -rw------- 1 ignatz staff 6023 Aug 5 12:06 my_script $ chmod 700 my_script $ ls -l my_script -rwx------ 1 ignatz staff 6023 Aug 5 12:06 my_script |
ファイルまたはディレクトリの所有者でない場合は、スーパーユーザーになります。
現在の所有者またはスーパーユーザーだけが、chmod コマンドを使用してファイルまたはディレクトリの所有者を変更できます。
chmod コマンドを使用して特殊アクセス権を絶対モードで変更します。
$ chmod nnnn filename |
nnnn |
ファイルまたはディレクトリのアクセス権を変更する 8 進数値。左端の 8 進数値で、ファイルの特殊アクセス権を設定する。特殊アクセス権に有効な 8 進数値のリストについては、表 17-6 を参照 |
filename |
ファイルまたはディレクトリを指定する |
chmod を使用して ACL エントリを持つファイルのファイルグループアクセス権を変更する場合、ファイルグループアクセス権と ACL マスクの両方が新しいアクセス権に変更されます。新しい ACL マスクアクセス権は、そのファイル上に ACL エントリを持つ追加ユーザーおよびグループの実効アクセス権を変更する場合があるので注意が必要です。getfacl(1) コマンドを使用して、すべての ACL エントリに適切なアクセス権が設定されていることを確認してください。
ファイルのアクセス権が変更されていることを確認します。
$ ls -l filename |
次の例は、dbprog ファイルに setuid アクセス権を設定します。
$ chmod 4555 dbprog $ ls -l dbprog -r-sr-xr-x 1 db staff 12095 May 6 09:29 dbprog |
次の例は、dbprog2 ファイルに setgid アクセス権を設定します。
$ chmod 2551 dbprog2 $ ls -l dbprog2 -r-xr-s--x 1 db staff 24576 May 6 09:30 dbprog2 |
次の例は、pubdir ディレクトリにスティッキビットアクセス権を設定します。
$ chmod 1777 pubdir |
ファイルまたはディレクトリの所有者でない場合は、スーパーユーザーになります。
現在の所有者またはスーパーユーザーだけが、chmod コマンドを使用してファイルまたはディレクトリの所有者を変更できます。
chmod コマンドを使用してアクセス権を記号モードで変更します。
$ chmod who operator permission filename |
who operator permission |
who では、アクセス権を変更するユーザーを指定し、operator では実行する操作を指定し、permission では変更後のアクセス権を指定する。有効な記号については、表 17-7 を参照 |
filename |
ファイルまたはディレクトリを指定する |
ファイルのアクセス権が変更されていることを確認します。
$ ls -l filename |
次の例は、その他のユーザーの読み取り権を削除します。
$ chmod o-r filea |
次の例は、ユーザー、グループ、その他のユーザーの読み取り権と実行権を追加します。
$ chmod a+rx fileb |
次の例は、グループに読み取り権、書き込み権、および実行権を割り当てます。
$ chmod g=rwx filec |