
LinuxおよびUnixでは、セキュリティはファイルのアクセス許可から始まります。非常に基本的なレベルでは、ファイルとディレクトリのアクセス許可は、システムのセキュリティにおいて重要な役割を果たします。 Linuxシステムでファイルまたはディレクトリを作成すると、デフォルトの権限が付与されます。
ファイルのアクセス許可は、次の3つのレベルで適用されます。owner
、group members
およびothers
。 Linuxではchmodコマンドを使用して、これらの権限を変更します。
このチュートリアルでは、chmodコマンドを使用してLinuxでファイルのアクセス許可を変更する方法について説明します。
1)数値(8進数)メソッドを使用して権限を変更する
いくつかの演算子(-、+、または=)を使用して、特定のユーザー(u、g、o、またはa)にアクセス許可(r、w、またはx)を割り当てることにより、chmodコマンドでアクセス許可(アクセスモード)を変更できます。このコマンドは、数値(8進数)または記号によるアクセスモードの指定を受け入れます。
数値による方法は、ファイルとディレクトリのアクセス許可を設定するために最も一般的に使用される方法です。これを行うには、chmod numeric_permission filename
を入力します 。
各権限は数字で表され、特定のエンティティの権限は最終的に3つの列のセットで表されます。

上の図では、
「ユーザー」には、ユーザーが読み取り、書き込み、実行を行う権限(4 2 1)が付与されます。
「グループ」には、グループメンバーが読み書きできる(4 2 0)権限が与えられます。
「その他(世界)」には、他の人だけが読むことができる(4 0 0)権限が与えられます。
数値法では、すべての権限が一度に変更されます。
たとえば、
755
:user
に読み取り+書き込み+実行権限を設定します 、group
に読み取り+実行権限を設定します others
に読み取り+実行権限を設定します 。
# chmod 755 asciiquarium.tar.gz
# ls -l asciiquarium.tar.gz
-rwxr-xr-x 1 linoadmin linoadmin 15436 Mar 9 2013 asciiquarium.tar.gz
476
:user
に読み取り権限のみを設定します 、group
に読み取り+書き込み+実行権限を設定します 読み取りと書き込みの権限をothers
に設定します 。
# chmod 476 bootstrap
# ls -l bootstrap
-r--rwxrw- 1 root root 5747 Apr 25 01:45 bootstrap
500
:user
に読み取り+実行権限を設定します 、group
に権限を設定しない others
に権限を設定しない 。
# chmod 500 asciiquarium_1.1/
# ls -ld asciiquarium_1.1/
dr-x------ 2 linoadmin linoadmin 4096 Mar 9 2013 asciiquarium_1.1/
数値法を使用する場合は、常に3つの値(所有者、グループ、その他)を指定する必要があります。
2)シンボリックモードを使用して権限を変更する
数値アクセスモードは、ほとんどのLinuxユーザーに好まれています。ただし、シンボリックフォームを使用することを好む人もいます。これは、通常、既存のモードを完全に置き換えるのではなく変更するためです。
シンボリックモードはchmod entity=permissions filename
として使用されます 。シンボリックモードの仕様には3つの部分があり、個々の文字で構成され、文字を使用して部分を識別します。
Entity
:ユーザー所有者= u 、グループ所有者= g 、その他= o 、およびすべて= aOperation
: + 追加するには、- 削除する、または = 割り当てる(他の既存の権限を削除する)Permissions to set
: r =読む、 w =書き込み、および x =実行
理解してもらうためのいくつかの例。
chmod +x
:すべてのエンティティユーザー、グループ、その他の実行権限を追加します。スクリプトまたはプログラムを実行するために実行可能にするために使用されます
# chmod +x hello.sh
# ls -l hello.sh
-rwxr-xr-x 1 root root 66 May 15 20:12 hello
これで、次のようにスクリプトを実行できます
# ./hello
Hello... How are you ?
u+x
:ユーザーのみの実行権限を追加
# chmod u+x backupdb.sh
# ls -l backupdb.sh
-rwxr--r-- 1 linoadmin linoadmin 15436 Mar 9 2013 backupdb.sh
go-w
:グループおよび他のクラスからのみ書き込み権限を削除してください。
# chmod go-w script-test/
# ls -ld script-test/
drwxr-xr-x 3 root root 4096 Apr 25 02:21 script-test/
a=rw
:すべてのユーザーに読み取りと書き込みの権限を設定しますが、実行は許可しません。
# chmod a=rw bootstrap
# ls -l bootstrap
-rw-rw-rw- 1 root root 5747 Apr 25 01:45 bootstrap
g-x,o-rx
:group
の実行権限を削除します others
の読み取り+実行権限を削除します 。
注:カンマの後にスペースを使用しないでください(、 )
# chmod g-x,o-rx baba/
lsコマンドを使用して権限を確認しましょう:
# ls -ld baba/
drwxr----- 2 root root 4096 Apr 13 01:35 baba/
シンボリックメソッドを使用すると、組み合わせていくつかのエンティティを同時に操作することができます。
シンボリックモードを使用する場合、指定していない権限は、chmodコマンドを実行する前の状態のままであることに注意してください
3)権限を再帰的に変更する
オプションを指定せずにディレクトリでchmodコマンドを使用しても、そのサブディレクトリの権限には影響しません。これは、権限がディレクトリ自体にのみ適用されることを意味します。
ディレクトリとそのサブディレクトリのアクセス許可を(再帰的に)変更するには、-R
を使用できます。 オプション。
たとえば、500
を適用した'asciiquarium_1.1'ディレクトリを見てください。 権限。
'asciiquarium_1.1'ディレクトリ内のファイルとディレクトリのアクセス許可を一覧表示すると、'500'に設定できません。
# ls -l asciiquarium_1.1/
total 60
-rw-rw-r-- 1 linoadmin linoadmin 27679 Mar 9 2013 asciiquarium
-rw-rw-r-- 1 linoadmin linoadmin 228 Mar 9 2013 CHANGES
-rw-rw-r-- 1 linoadmin linoadmin 18092 Mar 9 2013 gpl.txt
-rw-rw-r-- 1 linoadmin linoadmin 45 Mar 9 2013 MANIFEST
-rw-rw-r-- 1 linoadmin linoadmin 1060 Mar 9 2013 README
それでは、chmod -R
を使用しましょう。 次のコマンドを使用して、「asciiquarium_1.1」ディレクトリに対して同じ権限を持つコマンド:
# chmod -R 500 asciiquarium_1.1/
次に、ファイルとディレクトリのアクセス許可を次のように確認しましょう。
# ls -l asciiquarium_1.1/
total 60
-r-x------ 1 linoadmin linoadmin 27679 Mar 9 2013 asciiquarium
-r-x------ 1 linoadmin linoadmin 228 Mar 9 2013 CHANGES
-r-x------ 1 linoadmin linoadmin 18092 Mar 9 2013 gpl.txt
-r-x------ 1 linoadmin linoadmin 45 Mar 9 2013 MANIFEST
-r-x------ 1 linoadmin linoadmin 1060 Mar 9 2013 README
ファイルとサブディレクトリに権限が設定されていることがわかります。
4)特別なビット権限
パーミッションで完了するタスクのほとんどは、読み取り、書き込み、および実行のパーミッションです。ただし、ファイルシステム内のファイルとディレクトリに割り当てることができる他のいくつかの特別なアクセス許可があります。これらの特別な権限は、ファイルまたはディレクトリのモードの先頭に追加される追加の数字として参照されます。
Linuxファイルシステムで使用できる特別なビットは次のとおりです。
- SUID :ユーザーIDの設定権限により、ユーザーはプログラムのユーザー所有者であるかのようにプログラムを実行できます。ほとんどの場合、ユーザー所有者はrootユーザーです。この権限セットの数値は4XXXです(「XXX」は前述の3つのセットの数値に置き換えられます)。
- SGID :ディレクトリに設定すると、グループIDの設定権限により、ディレクトリに作成されたすべての新しいファイルのグループ所有権がディレクトリのグループ所有者に自動的に付与されます(数値=2XXX)。ファイルに設定すると、SGIDを使用すると、ユーザーはファイルのグループ所有者であるかのようにプログラムを実行できます。
- スティッキービット:t 彼の権限セットは、「非所有者」が共通ディレクトリ(numeric =1XXX)内のファイルを削除しないようにするために使用されます。スティッキービットディレクトリでは、ファイルの所有者またはディレクトリの所有者のみがファイルを削除できます(rootは常にファイルも削除できます)。
理解するために、1つの例を挙げましょう:
次のコマンドを使用して、ファイルにSUID権限を適用します。
# chmod 4755 bootstrap
# ls -l bootstrap
-rwsr-xr-x 1 root root 5747 Apr 25 01:45 bootstrap
結論
権限を変更するときは、常に数値法または記号法のいずれかを使用できます。数値のアクセス許可が最も頻繁に使用され、毎回表示されます。原則として、権限に小さな変更を加えるのではなく、数値モードを使用してオブジェクトに権限を設定または強制することをお勧めします。他のユーザーが所有するファイルとディレクトリのアクセス許可を変更するには、rootまたはsudoユーザーアクセス権が必要です。そうでない場合は、自分が所有するファイルとディレクトリのアクセス許可を変更することしかできません。