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 フラグが設定されています。setuid の場合 またはsetgid 実行可能ファイルにフラグが設定され、ファイルはファイルの所有者またはグループ、あるいはその両方の特権で実行されます。 | |
S | s と同じ しかし、x フラグが設定されていません。このフラグがファイルで使用されることはめったにありません。 | |
t | others で見つかった場合 トリプレットsticky を設定します ビット。これは、 x も意味します フラグが設定されます。このフラグはファイルでは役に立ちません。 | |
T | t と同じ しかし、x フラグが設定されていません。このフラグはファイルでは役に立ちません。 |
ディレクトリ(フォルダ)に対する権限の影響
Linuxでは、ディレクトリは他のファイルやディレクトリを含む特殊なタイプのファイルです。
許可 | キャラクター | ディレクトリでの意味 |
---|---|---|
読む | - | ディレクトリの内容を表示できません。 |
r | ディレクトリの内容を表示できます。 (例: ls を使用してディレクトリ内のファイルを一覧表示できます 。) | |
書き込み | - | ディレクトリの内容は変更できません。 |
w | ディレクトリの内容は変更できます。 (例:新しいファイルの作成、ファイルの削除など) | |
実行 | - | ディレクトリをに変更することはできません。 |
x | ディレクトリはcd を使用してナビゲートできます 。 | |
s | user で見つかった場合 トリプレット、setuid を設定します 少し。 group で見つかった場合 トリプレットsetgid を設定します 少し。また、x フラグが設定されます。 setgid の場合 フラグはディレクトリに設定され、その中に作成された新しいファイルは、ファイルを作成したユーザーのプライマリグループIDではなく、ディレクトリグループID(GID)を継承します。setuid ディレクトリには影響しません。 | |
S | s と同じ しかし、x フラグが設定されていません。このフラグはディレクトリでは役に立ちません。 | |
t | others で見つかった場合 トリプレットsticky を設定します ビット。これは、 x も意味します フラグが設定されます。ディレクトリにスティッキービットが設定されている場合、ファイルの所有者、ディレクトリの所有者、または管理者ユーザーのみが、ディレクトリ内のファイルを削除または名前変更できます。 | |
T | t と同じ しかし、x フラグが設定されていません。このフラグはディレクトリでは役に立ちません。 |
chmod
の使用 #
chmod
コマンドは次の一般的な形式を取ります:
chmod [OPTIONS] MODE FILE...
chmod
コマンドを使用すると、シンボリックモードまたは数値モードまたは参照ファイルを使用してファイルのアクセス許可を変更できます。モードについては、この記事の後半で詳しく説明します。このコマンドは、スペースで区切られた1つ以上のファイルやディレクトリを引数として受け入れることができます。
ファイルの権限を変更できるのは、root、ファイル所有者、またはsudo権限を持つユーザーのみです。 chmod
を使用するときは特に注意してください 、特に権限を再帰的に変更する場合。
シンボリック(テキスト)メソッド#
chmod
の構文 シンボリックモードを使用する場合のコマンドの形式は次のとおりです。
chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE...
フラグの最初のセット([ugoa…]
)、usersフラグは、ファイルへのアクセス許可を変更するユーザークラスを定義します。
-
u
-ファイルの所有者。 -
g
-グループのメンバーであるユーザー。 -
o
-他のすべてのユーザー。 -
a
-すべてのユーザー、ugo
と同じ 。
ユーザーフラグを省略した場合、デフォルトのフラグはa
です。 また、umaskによって設定された権限は影響を受けません。
フラグの2番目のセット([-+=]
)、操作フラグは、権限を削除、追加、または設定するかどうかを定義します。
-
-
指定された権限を削除します。 -
+
指定された権限を追加します。 -
=
現在の権限を指定された権限に変更します。=
の後に権限が指定されていない場合 シンボル、指定されたユーザークラスからのすべての権限が削除されます。
権限(perms...
)は、ゼロまたは次の1つ以上の文字を使用して明示的に設定できます:r
、w
、x
、X
、s
、およびt
。セットu
から1文字を使用します 、g
、およびo
あるユーザークラスから別のユーザークラスに権限をコピーする場合。
複数のユーザークラスに権限を設定する場合([,…]
)、シンボリックモードを区切るには、コンマ(スペースなし)を使用します。
以下は、chmod
の使用方法の例です。 シンボリックモードのコマンド:
-
グループのメンバーにファイルの読み取りを許可しますが、書き込みと実行は許可しません:
chmod g=r filename
-
すべてのユーザーの実行権限を削除します:
chmod a-x filename
-
他のユーザーの書き込み権限を再帰的に削除します:
chmod -R o-w 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 [OPTIONS] NUMBER FILE...
数値モードを使用する場合、3つのユーザークラスすべて(所有者、グループ、およびその他すべて)の権限を同時に設定できます。
NUMBER
3桁または4桁の数字にすることができます。
3桁の数字を使用する場合、最初の数字はファイルの所有者の権限、2番目の数字はファイルのグループ、最後の数字は他のすべてのユーザーの権限を表します。
各書き込み、読み取り、および実行のアクセス許可には、次の数値があります。
-
r
(読み取り)=4 -
w
(書き込み)=2 -
x
(実行)=1 - 権限なし=0
特定のユーザークラスのアクセス許可番号は、そのグループのアクセス許可の値の合計で表されます。
数値モードでファイルの権限を確認するには、すべてのユーザークラスの合計を計算するだけです。たとえば、ファイルの所有者に読み取り、書き込み、実行のアクセス許可を与えるには、ファイルのグループに読み取りと実行のアクセス許可を与え、他のすべてのユーザーにのみ読み取りのアクセス許可を与えるには、次のようにします。
- 所有者:rwx =4 + 2 + 1 =7
- グループ:r-x =4 + 0 + 1 =5
- その他:r-x =4 + 0 + 0 =4
上記の方法を使用すると、754
という番号になります。 、これは必要な権限を表します。
setuid
を設定するには 、setgid
、およびsticky bit
フラグは4桁の数字を使用します。
4桁の数字を使用する場合、最初の桁は次の意味になります。
- setuid =4
- setgid =2
- sticky =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
へ
chmod --reference=file1 file2
ファイルのアクセス許可を再帰的に変更する#
指定されたディレクトリの下にあるすべてのファイルとディレクトリを再帰的に操作するには、-R
を使用します。 (--recursive
)オプション:
chmod -R MODE DIRECTORY
たとえば、/var/www
の下にあるすべてのファイルとサブディレクトリの権限を変更するには 755
へのディレクトリ 使用するもの:
chmod -R 755 /var/www
シンボリックリンクには常に777
があります 権限。
デフォルトでは、シンボリックリンクの権限を変更する場合、chmod
リンクが指しているファイルの権限を変更します。
chmod 755 symlink
ターゲットの所有権を変更する代わりに、「「シンボリックリンク」にアクセスできません:アクセスが拒否されました」というエラーが表示される可能性があります。
ほとんどのLinuxディストリビューションではデフォルトでシンボリックリンクが保護されており、ターゲットファイルを操作できないため、エラーが発生します。このオプションは、/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のマンページにアクセスしてください。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。