通常のファイルの読み取り、書き込み、および実行の アクセス許可 に加えて、Linux ファイルには、ファイルの他の特性を制御する別の属性セットがあります。それらを確認し、変更する方法は次のとおりです。
権限と属性
Linux では、誰がファイルにアクセスできるか、またそのファイルに対して何ができるかは、ユーザー中心の権限セットによって制御されます。 ファイルの内容を読み取る ことができるか、ファイルに新しいデータを書き込むことができるか、またはファイルがスクリプトまたはプログラムである場合はファイルを実行できるかどうかは、すべてその権限セットによって決まります。権限はファイルに適用されますが、さまざまなカテゴリのユーザーに対する制限と機能が定義されます。
ファイルの所有者、ファイルのグループ、およびその他、つまり最初の 2 つのカテゴリに属さないユーザーに対するアクセス許可があります。
ls
コマンドを使用できます。
-l
(長いリスト) ファイルまたはディレクトリのアクセス許可を表示するオプション。
権限を変更するには、
chmod
コマンドを
使用します。少なくとも、ファイルへの書き込み権限がある場合、または root ユーザーの場合は可能です。
ファイルのアクセス許可はユーザー レベルでアクセス許可を付与または削除するため、ユーザー中心であることがわかります。対照的に、ファイルの属性はファイル システム中心です。アクセス許可と同様に、これらはファイルまたはディレクトリに設定されます。ただし、一度設定すると、すべてのユーザーに対して同じになります。
属性は、アクセス許可とは別の設定のコレクションです。属性は、不変性やその他のファイル システム レベルの動作などの特性を制御します。ファイルまたはディレクトリの属性を確認するには、
lsattr
コマンドを使用します。属性を設定するには、
chattr
コマンドを使用します。
権限と属性は i ノード内に保存されます。 i ノードは 、ファイルやディレクトリ などのファイル システム オブジェクトに関する情報を保持する ファイル システム構造 です。ハード ドライブ上のファイルの場所、作成日、アクセス許可、属性はすべて i ノード内に保存されます。
ファイル システムが異なれば、基礎となる構造や機能も異なるため、ファイル システムによっては属性が異なる動作をするか、完全に無視される可能性があります。この記事では、多くの Linux ディストリビューションのデフォルト ファイル システムである
ext4
を使用します。
ファイルの属性を確認する
chattr
および
lsattr
コマンドはコンピューター上にすでに存在しているため、何もインストールする必要はありません。
現在のディレクトリ内のファイルの属性を確認するには、
lsattr
を使用します。
lsattr
破線は、設定されていない属性のプレースホルダーです。設定される唯一の属性は
e
(エクステント) 属性です。これは、ファイル システムの i ノードが、ハード ドライブ上のファイルのすべての部分を指すエクステントを使用している、または必要に応じて使用することを示しています。
ファイルがハード ドライブ ブロックの 1 つの連続したシーケンスに保持されている場合、その i ノードはファイルの保存に使用される最初と最後のブロックを記録するだけで済みます。ファイルが 断片化されて いる場合、inode はファイルの各部分の最初と最後のブロックの番号を記録する必要があります。これらのハードドライブのブロック番号のペアはエクステントと呼ばれます。
これは、最も一般的に使用される属性のリストです。
- a : 追加のみ。この属性を持つファイルは追加のみ可能です。ファイルの最後にのみ書き込み可能ですが、書き込みは可能です。ファイル内の既存のデータを上書きすることはできません。
- c : 圧縮されています。ファイルはハード ドライブ上で自動的に 圧縮され 、読み取られるときに解凍されます。ファイルに書き込まれるデータは、ハード ドライブに書き込まれる前に圧縮されます。
-
A
:
atime更新は ありません。atime、ファイルが最後にアクセスされた時刻を記録する i ノード内の値です。 - C : コピーオンライトはありません。 2 つのプロセスがファイルへのアクセスを要求した場合、同じファイルへのポインターを与えることができます。ファイルに書き込もうとした場合にのみ、ファイルの独自のコピーが与えられるため、そのプロセスに固有のコピーが作成されます。
-
d
: ダンプはありません。 Linux
dumpコマンドは、ファイル システム全体のコピーをバックアップ メディアに書き込むために使用されます。この属性によりdumpファイルを無視します。バックアップから除外されます。 - D : ディレクトリの同期更新。ディレクトリに対してこの属性がオンになっている場合、そのディレクトリに対するすべての変更は同期的に、つまり直ちにハード ドライブに書き込まれます。データ操作はバッファリングできます。
-
e
: エクステント形式。
e属性は、ファイル システムがエクステントを使用してハード ドライブ上のファイルの場所をマップしていることを示します。これをchattrで変更することはできません。これはファイル システムの操作の機能です。 - i : 不変。不変ファイルは、名前変更や削除などの変更を行うことができません。この属性を設定または設定解除できるのは root ユーザーだけです。
-
s
: 安全な削除。この属性が設定されたファイルが削除されると、ファイル データを保持していたハード ドライブ ブロックはゼロを含むバイトで上書きされます。これは
ext4ファイル システムでは受け入れられないことに注意してください。 -
S
: 同期更新。
S属性が設定されたファイルへの変更は、同期的にファイルに書き込まれます。 -
u
:
u属性が設定されているファイルを削除すると、ファイルのコピーが作成されます。これは、ファイルが誤って削除された場合にファイルを回復するのに役立ちます。
ファイルの属性の変更
chattr
コマンドを使用すると、ファイルまたはディレクトリの属性を変更できます。
chmod
コマンドや権限と同様に、
+
(設定) 演算子と
-
(設定解除) 演算子を使用して属性を適用または削除できます。
chattr
コマンドには
=
(設定のみ) 演算子もあります。これにより、ファイルまたはディレクトリの属性が、コマンドで指定された属性のみに設定されます。つまり、コマンドラインにリストされていない属性はすべて設定解除されます。
追加専用属性の設定
テキスト ファイルに追加専用属性を設定して、ファイルで実行できる内容にそれがどのような影響を与えるかを見てみましょう。
sudo chattr +テキストファイル.txt
lsattr
を使用して、追加専用ビットが設定されていることを確認できます。
lsattr テキストファイル.txt
文字「
a
」は、属性が設定されていることを示します。ファイルを上書きしてみましょう。単一の山括弧「
>
」を使用して出力をファイルにリダイレクトすると、ファイル内のすべてのコンテンツがリダイレクトされた出力で置き換えられます。
テキスト ファイルには、 lorem ipsum プレースホルダー テキストが プリロードされています。
猫のテキストファイル.txt
ls
からの出力をファイルにリダイレクトします。
ls -l > テキストファイル.txt
sudo ls -l > テキストファイル.txt
sudo
コマンドを
使用しても、この操作は許可されません。
2 つの山括弧「
>>
」を使用して出力をリダイレクトすると、出力はファイル内の既存のデータに追加されます。これは、追加専用のテキスト ファイルでは許容されるはずです。
sudo ls -l >> テキストファイル.txt
エラー メッセージは表示されずにコマンド プロンプトに戻ります。ファイルの中を覗いて、何が起こったのかを見てみましょう。
猫のテキストファイル.txt
ls
からリダイレクトされた出力がファイルの末尾に追加されました。
ファイルにデータを追加することはできますが、ファイルに加えられる変更はこれだけです。削除することも、root化することもできません。
rm テキストファイル.txt
sudo rm テキストファイル.txt
不変属性の設定
新しいデータが追加されないファイルを保護したい場合は、不変属性を設定できます。これにより、データの追加を含むファイルへのすべての変更が防止されます。
sudo chattr +i 2番目のファイル.txt
lsattr 2 番目のファイル.txt
不変属性が設定されていることを示す「
i
」が表示されます。ファイルを不変にすると、root ユーザーでもファイルの名前変更 (
mv
)、削除 (
rm
)、データの追加ができなくなります。
sudo mv 2 番目のファイル.txt 新しい名前.txt
sudo rm 2番目のファイル.txt
sudo ls -l >> 2番目のファイル.txt
ext4 での安全な削除に依存しないでください
すでに指摘したように、一部のオペレーティング システムではすべての属性がサポートされていません。安全な削除属性は、
ext4
を含む
ext
ファミリの
ファイル システム
では受け入れられません。ファイルを安全に削除するためにこれに依存しないでください。
これが
ext4
では機能しないことは簡単にわかります。テキスト ファイルに
s
(安全な削除) 属性を設定します。
sudo chattr +s third-file.txt
これから行うことは、このファイルに関するメタデータを保持する i ノードを見つけることです。 i ノードには、ファイルが占有する最初のハード ドライブ ブロックが保持されます。ファイルには、lorem ipsum プレースホルダー テキストが含まれています。
ハード ドライブからそのブロックを直接読み取り、ハード ドライブの正しい場所を読み取っていることを確認します。ファイルを削除してから、同じハード ダイブ ブロックをもう一度読み取ります。安全な削除属性が尊重されている場合は、ゼロ化されたバイトを読み取る必要があります。
--fibmap
(ファイル ブロック マップ) オプションを指定して
hdparm
コマンドを使用すると、ファイルの i ノードを見つけることができます。
sudo hdparm --fibmap 3 番目のファイル.txt
最初の
dd
ドライブ ブロックは 18100656 です。dd コマンドを使用してそれを読み取ります。
オプションは次のとおりです。
- if=/dev/sda : このコンピュータの最初のハードドライブから読み取ります。
- bs=512 : 512 バイトのハードドライブブロックサイズを使用します。
- Skip=18100656 : ブロック 18100656 より前のすべてのブロックをスキップします。つまり、ブロック 18100656 から読み取りを開始します。
- count=1 : 1 ブロックのデータを読み取ります。
sudo dd if=/dev/sda bs=512 スキップ=18100656 カウント=1
予想どおり、lorem ipsum プレースホルダー テキストが表示されます。ハードドライブ上の正しいブロックを読んでいます。
次に、ファイルを削除します。
rm 3番目のファイル.txt
同じハード ドライブ ブロックを読み取ると、引き続きデータを確認できます。
sudo dd if=/dev/sda bs=512 スキップ=18100656 カウント=1
繰り返しますが、
ext4
で安全に削除するためにこれに依存しないでください。
ファイルを復元できないように削除するためのより良い方法
があります。
便利ですが、使用には注意が必要です
ファイルの属性を設定すると、ファイルを偶発的な災害から守ることができます。ファイルを削除したり上書きしたりできない場合は、非常に安全です。
これらをシステム ファイルに適用して、 Linux インストールをより安全にしたい と考えるかもしれません。ただし、アップデートの発行やアップグレードの適用に応じて、システム ファイルを定期的に置き換える必要があります。そのため、これらの属性は自分で作成したファイルに対してのみ使用するのが最も安全です。





