基本的な Linux ファイルのアクセス許可とは?
Linux は、UNIX と同様にマルチユーザー システムであり、ファイル アクセス許可は、悪意のある改ざんからシステムを保護する 1 つの方法です。許可を拒否されたときにエントリを取得する 1 つの方法は、root に su することです。 root パスワードを知っている人は誰でも完全にアクセスできることに注意してください。ただし、スーパーユーザーに切り替えると、間違いを犯したり、重要な構成ファイルを変更したりしやすいため、スーパーユーザーへの切り替えは必ずしも便利ではなく、推奨されるわけでもありません。すべてのファイルとディレクトリは、それらを作成した人によって「所有」されます。たとえば、リストでは:
-rw-rw-r-- 1 john sap 150 Mar 19 08:08 file1.txt
ファイル file1.txt は john が所有または所有しています。つまり、ファイルの読み取り、ファイルへの書き込み、または (テキスト ファイルではなくアプリケーションの場合) ファイルの実行を許可するユーザーを指定できます。同様の方法でディレクトリへのアクセスを制御することもできます。
読み取り、書き込み、および実行は、パーミッションの 3 つの主な設定です。ユーザーはアカウントの作成時にグループに配置されるため、特定のグループがファイルの読み取り、書き込み、または実行を実行できるかどうかを指定することもできます。上記の file1.txt の例を使用すると、多くの詳細が提供されていることがわかります。ファイルの読み取り (r) およびファイルへの書き込み (w) ができるユーザー、ファイルの作成者 (john)、および所有者が属するグループ (sap) を確認できます。ただし、デフォルトでは、グループの名前はログイン名と同じであることを覚えておいてください。
グループの右側にあるその他の情報には、ファイル サイズ、ファイルの作成日時、およびファイル名が含まれます。最初の列は現在の権限を示しています。 10 個のスロットがあります。最初のスロットは、ファイルのタイプを表します。残りの 9 つのスロットは、実際には 3 つの異なるカテゴリのユーザーに対する 3 つのアクセス許可セットです。例:
-rw-rw-r--
これら 3 つのセットは、ファイルの所有者、ファイルが属するグループ、およびその他すべてのユーザーを意味する「その他」です。
- (rw-) (rw-) (r--) 1 john sap | | | | type owner group others
ファイルの種類を指定する最初の項目は、通常、次のいずれかを示します:
- d — ディレクトリ
- – (ダッシュ) — 通常のファイル (ディレクトリやリンクではなく)
- l — システム上の他の場所にある別のプログラムまたはファイルへのシンボリック リンク
次の 3 つのセットのそれぞれで、最初の項目を超えて、次のいずれかが表示されます。
- r — ファイルを読み取ることができます
- w — ファイルに書き込むことができます
- × — ファイルを実行できます (プログラムの場合)
所有者、グループ、またはその他にダッシュが表示されている場合は、特定の権限が付与されていないことを意味します。 file1.txt の最初の列をもう一度見て、その権限を確認してください。
# ls -l file1.txt -rw-rw-r-- 1 john sap 150 Mar 19 08:08 file1.txt
ファイルの所有者 (この場合は john) には、ファイルの読み取りと書き込みのアクセス許可があります。グループ sap にも、file1.txt に対する読み取りと書き込みの権限があります。これはプログラムではないため、所有者にもグループにも実行権限はありません。他のすべてのユーザーはファイルの読み取りのみ可能です。
ファイル許可ビットは chmod に提供される値にどのように対応しますか?
ファイル システム オブジェクトに適用されるパーミッション ビットは、次のコマンドで chmod ユーティリティに提供される 4 桁のタプルで指定できる値に直接対応します:
chmod abcd [file system object]
数字セット abcd の各値は、値 1 2 および 4 の合計で構成されます。数字ごとにこれらの値を加算することにより、すべてのファイル オブジェクト属性を設定する値を生成できます。
- あ – この桁は、特別な属性設定を制御します。値 1 は setuid ビットを設定し、値 2 は setgid ビットを設定し、値 4 はオブジェクトのスティッキー ビットを設定します
- b 、c そしてd – これらの数字は、ファイル所有者、ファイル所有者の 1 次グループ、およびその他すべてのユーザーの読み取り/書き込みおよび実行許可を制御します。値 4 は読み取り許可を有効にし、値 2 は書き込み許可を有効にし、値 1 は実行許可を有効にします。
例
ファイル file をスティッキー、所有者による読み取りおよび書き込み可能、プライマリ グループによる読み取り可能、その他のユーザーによるアクセス不可に設定するには:
# chmod 4610 filename
システム上の全員にすべての許可を与えるには:
# chmod 0777 filename
chmod の詳細については、chmod のマニュアル ページを参照してください。
chown と chmod を使用してファイルとディレクトリのアクセス許可を設定する方法
chownを使う ファイルの所有者やグループを変更するコマンド。構文は単純です。 chown と入力し、その後にファイルを所有するユーザーを入力し、オプションでコロン (":") とグループ名を入力します。ユーザー名やグループ名がシステムに存在している必要があることに注意してください。例:
# chown john:sap file1.txt
# ls -l file1.txt -rw-rw-r-- 1 john sap 150 Mar 19 08:08 file1.txt
ユーザー john がファイルを所有することになります。ファイルのグループ所有者も sap である john のグループに設定されます。
権限を変更するには、chmod コマンドを使用します。この例は、chmod コマンドを使用して file1.txt のアクセス許可を変更する方法を示しています。ファイルの所有者であるか、root アカウントにログインしている場合は、所有者、グループ、およびその他の権限を変更できます。現在、所有者とグループはファイルの読み取りと書き込みを行うことができます。グループ外のユーザーは、ファイルを読み取ることしかできません (r–)。
注意 注:ファイルのアクセス許可はセキュリティ機能であることを忘れないでください。ファイルの読み取り、書き込み、および実行を他のユーザーに許可すると、ファイルが改ざん、変更、または削除されるリスクが高まります。原則として、読み取りと書き込みのアクセス許可は、本当に必要な人にのみ付与する必要があります。簡略表記を使用してファイル/ディレクトリのアクセス許可を変更する方法
次の例では、すべてのユーザーがファイルへの書き込みを許可して、ファイルの読み取り、メモの書き込み、および保存を行えるようにします。つまり、ファイルのアクセス許可の「その他」セクションを変更する必要があります。まずはファイルを見てください。シェル プロンプトで、次のように入力します。
# ls -l file1.txt -rw-rw-r-- 1 john sap 150 Mar 19 08:08 file1.txt
ここで、次のように入力します:
# chmod o+w file1.txt
上記のコマンドは、ファイル file1.txt への書き込み権限を他のユーザーに与えることをシステムに伝えます。結果を確認するには、ファイルの詳細をもう一度一覧表示します。ファイルは次のようになります:
-rw-rw-rw- 1 john sap 150 Mar 19 08:08 file1.txt
これで、誰もがファイルを読み書きできるようになりました。 file1.txt から読み取りと書き込みのアクセス許可を削除するには、chmod コマンドを使用して、読み取りと書き込みの両方のアクセス許可を削除します。
# chmod go-rw file1.txt
go-rw と入力する 、ファイル file1.txt からグループと他のグループの読み取りと書き込みのアクセス許可を削除するようにシステムに指示しています。
結果は次のようになります:
-rw------- 1 john sap 150 Mar 19 08:08 file1.txt
これらの設定は、chmod を使用してパーミッションを変更する場合の省略形と考えてください。実際に必要なのは、chmod コマンドでいくつかの記号と文字を覚えておくことだけだからです。略記が表すもののリストは次のとおりです:
アイデンティティ
u - the user who owns the file (that is, the owner) g - the group to which the user belongs o - others (not the owner or the owner's group) a - everyone or all (u, g, and o)
権限
r - read access w — write access x — execute access
アクション
+ — adds the permission - — removes the permission = — makes it the only permission
chmod で使用できる設定の一般的な例を次に示します。
g+w - adds write access for the group o-rwx - removes all permissions for others u+x - allows the file owner to execute the file a+rw - allows everyone to read and write to the file ug+r - allows the owner and group to read the file g=rx - allows only the group to read and execute (not write)
短縮表記を使用してすべてのユーザーのすべての権限を削除する方法
アクセス許可のスキルをテストしたいですか?すべてのユーザーに対して、file1.txt からすべての権限を削除します。
# chmod a-rwx file1.txt
次に、コマンド cat file1.txt を使用してファイルを読み取れるかどうかを確認します。コマンドは次を返すはずです:
cat: file1.txt: Permission denied
自分の権限を含むすべての権限を削除すると、ファイルが正常にロックされました。ただし、ファイルはあなたのものであるため、次のコマンドを使用していつでもアクセス許可を元に戻すことができます:
# chmod u+rw file1.txt
ファイルのアクセス許可を 8 進形式で一覧表示する方法
ファイルのパーミッションを 8 進形式で一覧表示するには、stat を使用します coreutils によって提供されるコマンド パッケージ。現在の作業ディレクトリ内のすべてのファイルとディレクトリの 8 進数のアクセス許可を取得するには、次のコマンドを実行します:
$ stat -c "%a %n" *
/usr/share などの特定のディレクトリ内のコンテンツの 8 進数のアクセス許可を取得するには、次のコマンドを実行します:
$ stat -c "%a %n" /usr/share/* 755 /usr/share/aclocal 755 /usr/share/alsa 755 /usr/share/anaconda 755 /usr/share/appdata ...
/usr/share などのディレクトリに対してのみ 8 進数のアクセス許可を取得し、その中のコンテンツは取得しない場合は、次のコマンドを実行します。
$ stat -c "%a %n" /usr/share/ 755 /usr/share/
すべてのファイル権限が 777 に変更された場合に、すべてのシステム ファイル権限をデフォルトにリセットする方法
次のコマンドを誤って実行しました。
# chmod -R 777 /
元の権限に戻す方法はありますか?
次のコマンドを実行して、元の権限に戻します。
# rpm -a --setperms
これによりいくつかのエラーが表示されますが、それらは無視できます。
ネットワーク経由で特定の権限を持つファイルをコピーする方法
特定の権限でファイルをコピーするには、rsync ユーティリティを使用できます:
# rsync --chmod=u+rwx,g+rx,o+rx testfile [email protected]:/tmp/
これにより、テストファイルがユーザーのホーム ディレクトリにコピーされ、コピーされたファイルへのアクセス許可は 755 になります。