目次:
- Linuxファイルのアクセス許可
chmod
を使用する- シンボリック(テキスト)メソッド
- 数値法
- 参照ファイルを使用する
- ファイルのアクセス許可を再帰的に変更する
- シンボリックリンクの操作
- ファイルのパーミッションを一括で変更する
- 結論
Linuxでは、ファイルへのアクセスは、ファイルの許可、属性、所有権によって管理されます。 これにより、承認されたユーザーとプロセスのみがファイルとディレクトリにアクセスできます。
このチュートリアルでは、
chmod
コマンドを使用してファイルとディレクトリのアクセス許可を変更する方法について説明します。
Linuxファイルのアクセス許可
先に進む前に、基本的なLinux許可モデルについて説明しましょう。
Linuxでは、各ファイルは所有者とグループに関連付けられ、3つの異なるクラスのユーザーのアクセス許可アクセス権が割り当てられます。
- ファイルの所有者、グループのメンバー、その他(全員)
ファイルの所有権は、
chown
コマンドと
chgrp
コマンドを使用して変更できます。
各クラスに適用される3つのファイル許可タイプがあります。
- 読み取り許可。書き込み許可。実行許可。
この概念により、ファイルの読み取り、ファイルへの書き込み、またはファイルの実行を許可するユーザーを指定できます。
ファイルのアクセス許可は、
ls
コマンドを使用して表示できます。
ls -l filename.txt
-rw-r--r-- 12 linuxize users 12.0K Apr 8 20:51 filename.txt |- | | | | | | | | | | | | | +-----------> 7. Group | | | | | +-------------------> 6. Owner | | | | +--------------------------> 5. Alternate Access Method | | | +----------------------------> 4. Others Permissions | | +-------------------------------> 3. Group Permissions | +----------------------------------> 2. Owner Permissions +------------------------------------> 1. File Type
最初の文字はファイルの種類を示しています。 通常のファイル(
-
)、ディレクトリ(
d
)、シンボリックリンク(
l
)、またはその他の特殊なファイルのいずれかです。
次の9文字はファイル許可を表し、それぞれ3文字の3つのトリプレットです。 最初のトリプレットは所有者の許可を示し、2番目のトリプレットはグループの許可を示し、最後のトリプレットは他の全員の許可を示します。 許可は、ファイルの種類に応じて異なる意味を持つことができます。
上記の例で(
rw-r--r--
)は、ファイル所有者が読み取りおよび書き込み許可(
rw-
)を持ち、グループおよびその他が読み取り許可のみ(
r--
)を持つことを意味します。
3つのアクセス許可トリプレットのそれぞれは、次の文字で構成され、ファイルに設定されているかディレクトリに設定されているかに応じて、異なる効果があります。
ファイルに対する許可の影響
許可 | キャラクター | ファイルの意味 |
---|---|---|
読んだ |
-
|
ファイルは読み込めません。 ファイルの内容を表示することはできません。 |
r
|
ファイルは読み取り可能です。 | |
書く |
-
|
ファイルを変更または変更することはできません。 |
w
|
ファイルは変更または修正できます。 | |
実行する |
-
|
ファイルを実行できません。 |
x
|
ファイルを実行できます。 | |
s
|
user
トリプレットで見つかった場合、
setuid
ビットを設定します。
group
トリプレットで見つかった場合、
setgid
ビットを設定します。 また、
x
フラグが設定されていることも意味します。
実行可能ファイルに
|
|
S
|
s
同じですが、
x
フラグは設定されていません。 このフラグはファイルではほとんど使用されません。 |
|
t
|
others
トリプレットで見つかった場合、
sticky
ビットを設定します。
また、
|
|
T
|
t
同じですが、
x
フラグは設定されていません。 このフラグはファイルに対しては役に立ちません。 |
ディレクトリ(フォルダー)に対するアクセス許可の影響
Linuxでは、ディレクトリは他のファイルとディレクトリを含む特別な種類のファイルです。
許可 | キャラクター | ディレクトリの意味 |
---|---|---|
読んだ |
-
|
ディレクトリの内容は表示できません。 |
r
|
ディレクトリの内容を表示できます。
(たとえば、ディレクトリ内のファイルを
|
|
書く |
-
|
ディレクトリの内容は変更できません。 |
w
|
ディレクトリの内容は変更できます。
(たとえば、新しいファイルを作成したり、ファイルを削除したりすることはできません。など) |
|
実行する |
-
|
ディレクトリを変更することはできません。 |
x
|
ディレクトリは
cd
を使用してナビゲートできます。 |
|
s
|
user
トリプレットで見つかった場合、
setuid
ビットを設定します。
group
トリプレットで見つかった場合、
setgid
ビットを設定します。 また、
x
フラグが設定されていることも意味します。
setgid
フラグが設定されている場合、その中で作成された新しいファイルは、ファイルを作成したユーザーのプライマリグループIDではなく、ディレクトリグループID(GID)を継承します。
|
|
S
|
s
同じですが、
x
フラグは設定されていません。 このフラグはディレクトリでは役に立ちません。 |
|
t
|
others
トリプレットで見つかった場合、
sticky
ビットを設定します。
また、
|
|
T
|
t
同じですが、
x
フラグは設定されていません。 このフラグはディレクトリでは役に立ちません。 |
chmod
を使用する
chmod
コマンドの一般的な形式は次のとおりです。
chmod MODE FILE…
chmod
コマンドを使用すると、シンボリックモードまたは数値モード、または参照ファイルを使用して、ファイルのアクセス許可を変更できます。 モードについては後で詳しく説明します。 このコマンドは、スペースで区切られた1つ以上のファイルやディレクトリを引数として受け入れることができます。
root、ファイル所有者、またはsudo特権を持つユーザーのみがファイルの許可を変更できます。
chmod
を使用する場合、特にアクセス許可を再帰的に変更する場合は特に注意してください。
シンボリック(テキスト)メソッド
シンボリックモードを使用する場合の
chmod
コマンドの構文の形式は次のとおりです。
chmod perms… FILE…
フラグの最初のセット(
)、ユーザーフラグ、ファイルへのアクセス許可が変更されるユーザークラスを定義します。
-
u
ファイルの所有者。g
グループのメンバーであるユーザー。o
他のすべてのユーザー。ugo
すべてのユーザー、ugo
と同一。
usersフラグが省略されている場合、デフォルトのフラグは
a
あり、umaskによって設定される許可は影響を受けません。
フラグの2番目のセット(
)、操作フラグは、許可を削除、追加、または設定するかどうかを定義します。
-
-
指定された権限を削除します。+
指定された権限を追加します。=
現在の許可を指定された許可に変更します。=
記号の後に許可が指定されていない場合、指定されたユーザークラスのすべての許可が削除されます。
許可(
perms…
)は、ゼロ、または
r
、
w
、
x
、
X
、
s
、および
t
1つ以上の文字を使用して明示的に設定できます。 あるクラスから別のユーザークラスにアクセス許可をコピーするときは、セット
u
、
g
、および
o
から1文字を使用します。
複数のユーザークラスのアクセス許可を設定する場合(
)、コンマ(スペースなし)を使用してシンボリックモードを区切ります。
以下に、シンボリックモードで
chmod
コマンドを使用する方法の例を示します。
-
グループのメンバーにファイルの読み取り許可を与えますが、ファイルの書き込みと実行は許可しません。
chmod g=r filename
すべてのユーザーの実行権限を削除します。
chmod ax filename
他のユーザーの書き込み許可を反発的に削除します。
chmod -R ow dirname
ファイルの所有者を除くすべてのユーザーの読み取り、書き込み、実行の許可を削除します。
chmod og-rwx filename
同じことは、次の形式を使用しても実現できます。
chmod og= filename
ファイルの所有者には読み取り、書き込み、実行の許可を与え、ファイルのグループには読み取りの許可を与え、他のすべてのユーザーには許可を与えません。
chmod u=rwx, g=r, o= filename
ファイルの所有者のアクセス許可を、ファイルのグループのメンバーが持つアクセス許可に追加します。
chmod g+u filename
特定のディレクトリにスティッキービットを追加します。
chmod o+t dirname
数値法
数値法を使用するときの
chmod
コマンドの構文は次の形式です。
chmod NUMBER FILE…
数値モードを使用する場合、3つすべてのユーザークラス(所有者、グループ、およびその他すべて)に同時にアクセス許可を設定できます。
NUMBER
は、3桁または4桁の数字にすることができます。
3桁の数字が使用される場合、最初の数字はファイルの所有者の許可を表し、2番目はファイルのグループの許可を表し、最後の許可は他のすべてのユーザーの許可を表します。
書き込み、読み取り、および実行の各アクセス許可には、次の数値があります。
-
r
(読み取り)= 4w
(書き込み)= 2x
(実行)= 1許可なし= 0
特定のユーザークラスのアクセス許可番号は、そのグループのアクセス許可の値の合計で表されます。
数値モードでファイルの権限を調べるには、すべてのユーザークラスの合計を計算するだけです。 たとえば、ファイルの所有者に読み取り、書き込み、実行の許可を与え、ファイルのグループに読み取りおよび実行の許可を与え、他のすべてのユーザーに読み取りのみの許可を与えるには、次のようにします。
- 所有者:rwx = 4 + 2 + 1 = 7グループ:rx = 4 + 0 + 1 = 5その他:rx = 4 + 0 + 0 = 4
上記の方法を使用して、目的のアクセス許可を表す番号
754
します。
setuid
、
setgid
、および
sticky bit
フラグを設定するには、4桁の数字を使用します。
4桁の数字を使用する場合、最初の数字の意味は次のとおりです。
- setuid = 4setgid = 2sticky = 1変更なし= 0
次の3桁は、3桁の数字を使用する場合と同じ意味を持ちます。
最初の桁が0の場合は省略でき、モードは3桁で表すことができます。 数値モード
0755
は
755
と同じです。
数値モードを計算するには、別の方法(バイナリー方法)を使用することもできますが、もう少し複雑です。 ほとんどのユーザーにとって、4、2、および1を使用して数値モードを計算する方法を知っていれば十分です。
stat
コマンドを使用して、数値表記でファイルの権限を確認できます。
stat -c "%a" filename
644
以下に、数値モードで
chmod
コマンドを使用する方法の例を示します。
-
ファイルの所有者に読み取りおよび書き込み権限を付与し、グループメンバーと他のすべてのユーザーに読み取り権限のみを付与します。
chmod 644 dirname
ファイルの所有者に読み取り、書き込み、実行の許可を与え、グループメンバーには読み取りおよび実行の許可を与え、他のすべてのユーザーには許可を与えない:
chmod 750 dirname
読み取り、書き込み、実行の許可を与え、特定のディレクトリにスティッキービットを追加します。
chmod 1777 dirname
ファイル所有者に読み取り、書き込み、実行のアクセス権を再帰的に設定し、特定のディレクトリの他のすべてのユーザーにはアクセス権を設定しません。
chmod -R 700 dirname
参照ファイルを使用する
--reference=ref_file
オプションを使用すると、指定された参照ファイル(
ref_file
)のアクセス許可と同じアクセス許可を設定できます。
chmod --reference=REF_FILE FILE
たとえば、次のコマンドは
file1
のアクセス許可を
file2
割り当てます
ファイルのアクセス許可を再帰的に変更する
指定されたディレクトリの下のすべてのファイルとディレクトリを再帰的に操作するには、
-R
(--
--recursive
)オプションを使用します。
chmod -R MODE DIRECTORY
たとえば、
/var/www
ディレクトリの下のすべてのファイルとサブディレクトリのアクセス許可を
755
するには、次を使用します。
シンボリックリンクの操作
シンボリックリンクには常に
777
アクセス許可があります。
デフォルトでは、シンボリックリンクの許可を変更すると、
chmod
はリンクが指しているファイルの許可を変更します。
chmod 755 symlink
ターゲットの所有権を変更する代わりに、「 'symlink'にアクセスできません:許可が拒否されました」というエラーが表示される可能性があります。
このエラーは、ほとんどのLinuxディストリビューションではデフォルトでシンボリックリンクが保護されており、ターゲットファイルを操作できないために発生します。 このオプションは
/proc/sys/fs/protected_symlinks
指定されて
/proc/sys/fs/protected_symlinks
ます。
1
は有効、
0
無効を意味します。 シンボリックリンク保護を無効にしないことをお勧めします。
ファイルのパーミッションを一括で変更する
ファイルとディレクトリのアクセス許可を一括変更する必要がある場合があります。
最も一般的なシナリオは、Webサイトファイルのアクセス許可を
644
、ディレクトリのアクセス許可を
755
に再帰的に変更することです。
数値法を使用する:
find /var/www/my_website -type d -exec chmod 755 {} ;
find /var/www/my_website -type f -exec chmod 644 {} ;
シンボリックメソッドを使用します。
find /var/www/my_website -type d -exec chmod u=rwx, go=rx {} ;
find /var/www/my_website -type f -exec chmod u=rw, go=r {} ;
find
コマンドは、
/var/www/my_website
下でファイルとディレクトリを検索し、見つかった各ファイルとディレクトリを
chmod
コマンドに渡して権限を設定します。
結論
chmod
コマンドは、ファイルの許可を変更します。 許可は、記号モードまたは数値モードのいずれかを使用して設定できます。
chmod
詳細については、chmodのmanページをご覧ください。