Linuxのアクセス許可と、ファイルにアクセスできるユーザーを制御する方法を理解することは、システム管理の基本的なスキルです。
この記事では、標準のLinuxファイルシステムのアクセス許可について説明し、特別なアクセス許可についてさらに掘り下げ、 umaskを使用したデフォルトのアクセス許可の説明で締めくくります。 。
lsコマンドの出力を理解する
権限を変更する方法について説明する前に、権限を表示する方法を知る必要があります。 ls 長いリスト引数を指定したコマンド( -l </ strong> )ファイルに関する多くの情報を提供してくれます。
$ ls -lAh
total 20K
-rwxr-xr--+ 1 root root 0 Mar 4 19:39 file1
-rw-rw-rw-. 1 root root 0 Mar 4 19:39 file10
-rwxrwxr--+ 1 root root 0 Mar 4 19:39 file2
-rw-rw-rw-. 1 root root 0 Mar 4 19:39 file8
-rw-rw-rw-. 1 root root 0 Mar 4 19:39 file9
drwxrwxrwx. 2 root root 4.0K Mar 4 20:04 testdir
これが何を意味するのかを理解するために、権限に関する出力を個々のセクションに分けてみましょう。各セクションを個別に参照する方が簡単です。
上記の出力の最終行の各コンポーネントを見てください:
drwxrwxrwx. 2 root root 4.0K Mar 4 20:04 testdir
d | rwx | rwx | rwx | 。 | ルート | ルート |
セクション1(左側)は、ファイルの種類を示しています。
d | ディレクトリ |
- | 通常のファイル |
l | ソフトリンク |
lsの情報ページ さまざまなファイルタイプの完全なリストがあります。
各ファイルには3つのアクセスモードがあります:
- 所有者
- グループ
- その他すべて
セクション2、3、および4は、ユーザー、グループ、および「その他のユーザー」の権限について説明しています。また、各セクションには rの組み合わせを含めることができます (読む)、 w (書き込み)、および x (実行可能)権限。
各権限には数値も割り当てられます。これは、権限の8進表現について話すときに重要です。
読む | 4 |
書き込み | 2 |
実行 | 1 |
セクション5では、SELinuxやファイルアクセス制御リスト(FACL)などの代替アクセス方法について詳しく説明します。
他の方法はありません | - |
SELinux | 。 |
FACL | + |
メソッドの任意の組み合わせ | + |
セクション6と7は、それぞれ所有者とグループの名前です。
chownとchmodの使用
chown (所有権の変更)コマンドは、ファイルのユーザーとグループの所有権を変更するために使用されます。
ファイルのユーザーとグループの両方の所有権を変更するにはfoo ルートへ 、次のコマンドを使用できます:
$ chown root:root foo
$ chown root: foo
ユーザーの後にコロン(:)を付けてコマンドを実行する )ユーザーとグループの両方の所有権を設定します。
ファイルのユーザー所有権のみを設定するにはfoo ルートへ ユーザー、次のように入力します:
$ chown root foo
ファイルのグループ所有権のみを変更するにはfoo 、グループの前にコロンを付けます:
$ chown :root foo
chmodコマンド
chmod (モードの変更)コマンドは、所有者、グループ、およびファイルに関連付けられている所有者でもグループの一部でもない他のすべてのユーザーのファイル権限を制御します。
chmod コマンドは、8進数(例:755、644など)と記号(例:u + rwx、g-rwx、o =rw)の両方の形式で権限を設定できます。
8進表記は、読み取りに4つの「ポイント」を割り当てます 、2から書き込み 、および1から実行 。ユーザーを読む割り当てたい場合 アクセス許可では、最初のスロットに4を割り当てますが、書き込みを追加する場合は 権限を追加する必要があります。2を追加する必要があります。実行を追加する場合 、次に1を追加します。これは、所有者、グループ、その他の権限タイプごとに行います。
たとえば、読み取りを割り当てたい場合 、書き込み 、および実行 ファイルの所有者に送信しますが、読み取りのみ および実行 メンバーと他のすべてのユーザーをグループ化するには、8進数形式で755を使用します。これは、所有者(4 + 2 + 1)のすべての許可ビットですが、グループおよびその他(4 + 1)の場合は4と1のみです。
その内訳は次のとおりです。4+2+ 1 =7; 4 + 1 =5;および4+1=5。
読み取りを割り当てたい場合 および書き込み ファイルの所有者に送信されますが、読み取りのみです グループのメンバーと他のすべてのユーザーには、 chmodを使用できます。 次のように:
$ chmod 644 foo_file
以下の例では、さまざまなグループで記号表記を使用しています。 uの文字に注意してください 、 g 、および o ユーザーを表す 、グループ 、およびその他 。 uを使用します 、 g 、および o +と組み合わせて 、- 、または = パーミッションビットを追加、削除、または設定します。
実行を追加するには 所有権セットのビット:
$ chmod u+x foo_file
読むを削除するには 、書き込み 、および実行 グループのメンバーから:
$ chmod g-rwx foo_file
他のすべてのユーザーの所有権を読むに設定するには および書き込み :
$ chmod o=rw
特殊ビット:UIDの設定、GIDの設定、およびスティッキービット
標準のアクセス許可に加えて、いくつかの便利な利点がある特別なアクセス許可ビットがいくつかあります。
ユーザーID(suid)を設定します
suidの場合 がファイルに設定されている場合、操作はファイルを実行しているユーザーではなく、ファイルの所有者として実行されます。この良い例は、 passwdです。 指図。 suidが必要です パスワードの変更がroot権限で実行されるように設定するビット。
$ ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd
suidの設定例 ビットは次のようになります:
$ chmod u+s /bin/foo_file_name
グループID(sgid)を設定します
sgid ビットはsuidに似ています コマンドを実行するユーザーではなく、ディレクトリのグループ所有権の下で操作が実行されるという意味でビット。
sgidの使用例 複数のユーザーが同じディレクトリで作業していて、ディレクトリに作成されたすべてのファイルが同じグループ権限を持っている必要がある場合です。以下の例では、 collab_dirというディレクトリを作成します 、 sgidを設定します ビットし、グループの所有権を webdevに変更します 。
$ mkdir collab_dir
$ chmod g+s collab_dir
$ chown :webdev collab_dir
これで、ディレクトリに作成されたファイルはすべて、 webdevのグループ所有権を持つことになります。 ファイルを作成したユーザーの代わりに。
$ cd collab_dir
$ touch file-sgid
$ ls -lah file-sgid
-rw-r--r--. 1 root webdev 0 Jun 12 06:04 file-sgid
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
スティッキービットは、グループのアクセス許可で許可されている場合でも、ファイルの所有者のみがファイルを削除できることを示します。この設定は通常、 / tmpなどの共通ディレクトリまたは共同ディレクトリで最も効果的です。 。以下の例では、 t 実行で その他すべての列 権限セットは、スティッキービットが適用されたことを示します。
$ ls -ld /tmp
drwxrwxrwt. 8 root root 4096 Jun 12 06:07 /tmp/
これは、誰かがファイルを編集することを妨げるものではないことに注意してください。ディレクトリの内容が削除されないようにするだけです。
スティッキービットを次のように設定します:
$ chmod o+t foo_dir
自分でディレクトリにスティッキービットを設定し、完全なグループ権限を付与して、複数のユーザーが同じグループに属しているため、ディレクトリで読み取り、書き込み、実行できるようにします。
そこから、各ユーザーとしてファイルを作成し、他のユーザーとしてそれらを削除してみてください。
すべてが正しく構成されている場合、一方のユーザーがもう一方のユーザーからユーザーを削除できないようにする必要があります。
これらの各ビットは、SUID =4、SGID =2、およびSticky=1の8進形式で設定することもできることに注意してください。
$ chmod 4744
$ chmod 2644
$ chmod 1755
大文字または小文字
特殊ビットを設定していて、大文字の Sが表示されている場合 またはT (これまで見てきたように)小文字ではなく、基になる実行ビットが存在しないためです。実例を示すために、次の例では、スティッキービットが設定されたファイルを作成します。次に、実行ビットを追加/削除して、大文字と小文字の変更を示します。
$ touch file cap-ST-demo
$ chmod 1755 cap-ST-demo
$ ls -l cap-ST-demo
-rwxr-xr-t. 1 root root 0 Jun 12 06:16 cap-ST-demo
$ chmod o-x cap-X-demo
$ ls -l cap-X-demo
-rwxr-xr-T. 1 root root 0 Jun 12 06:16 cap-ST-demo
ここまで、実行を設定しました 小文字のxを使用してビット 、質問せずに設定します。別のオプションがあります:大文字の Xを使用する 小文字の代わりに実行を設定します パーミッショングループのどこかにすでに存在する場合にのみビット。これは説明するのが難しい概念かもしれませんが、以下のデモはそれを説明するのに役立ちます。ここで、実行を追加しようとした後に注意してください グループ特権にビット、それは適用されません。
$ touch cap-X-file
$ ls -l cap-X-file
-rw-r--r--. 1 root root 0 Jun 12 06:31 cap-X-file
$ chmod g+X cap-X-file
$ ls -l cap-X-file
-rw-r--r--. 1 root root 0 Jun 12 06:31 cap-X-file
この同様の例では、小文字の x を使用して、最初に実行ビットをグループ権限に追加します。 次に、大文字の Xを使用します 他のすべてのユーザーの権限を追加します。今回は大文字のX 権限を設定します。
$ touch cap-X-file
$ ls -l cap-X-file
-rw-r--r--. 1 root root 0 Jun 12 06:31 cap-X-file
$ chmod g+x cap-X-file
$ ls -l cap-X-file
-rw-r-xr--. 1 root root 0 Jun 12 06:31 cap-X-file
$ chmod g+x cap-X-file
$ chmod o+X cap-X-file
ls -l cap-X-file
-rw-r-xr-x. 1 root root 0 Jun 12 06:31 cap-X-file
umask ファイルまたはディレクトリのアクセス許可を定義するために、デフォルトのアクセス許可セットからビットをマスク(または「ブロックオフ」)します。たとえば、 umaskの2 出力は、書き込みをブロックしていることを示します 少なくともデフォルトでは、ファイルからのビット。
umaskを使用する 引数なしのコマンドを使用すると、現在の umaskを確認できます。 設定。 4つの列があります。最初の列は特別なsuid、sgid、またはスティッキービット用に予約されており、残りの3つは所有者、グループ、およびその他の権限を表します。
$ umask
0022
これが何を意味するのかを理解するために、 umaskを実行できます。 -Sを使用 (以下に示すように)ビットをマスキングした結果を取得します。たとえば、 2のため 3番目の列の値書き込み ビットはグループおよび他のセクションからマスクされます。 読むのみ および実行 それらに割り当てることができます。
$ umask -S
u=rwx,g=rx,o=rx
ファイルとディレクトリのデフォルトの権限セットを確認するには、 umaskを設定しましょう。 すべてゼロに。これは、ファイルを作成するときにビットをマスクしないことを意味します。
$ umask 000
$ umask -S
u=rwx,g=rwx,o=rwx
$ touch file-umask-000
$ ls -l file-umask-000
-rw-rw-rw-. 1 root root 0 Jul 17 22:03 file-umask-000
これで、ファイルを作成すると、デフォルトの権限が読み取りであることがわかります。 (4)および書き込み (2)すべてのセクションで、8進数表現で666に相当します。
ディレクトリに対しても同じことができ、デフォルトの権限は777であることがわかります。実行が必要です。 ディレクトリを少しずつ調べて、ディレクトリをトラバースできるようにします。
$ mkdir dir-umask-000
$ ls -ld dir-umask-000
drwxrwxrwx. 2 root root 4096 Jul 17 22:03 dir-umask-000/
管理者がシステム上のファイルへのアクセスを制御できる方法は他にもたくさんあります。これらの権限はLinuxの基本であり、これらの基本的な側面に基づいて構築できます。あなたの仕事がFACLまたはSELinuxにあなたを連れて行くなら、あなたはそれらがファイルアクセスのこれらの最初のルールにも基づいているのを見るでしょう。