ファイルには、これまで見てきたパーミッションとは別の方法で表現された属性を含めることもできます。この例は、ファイルを不変にすることです (派手な言葉で、変更できないことを意味します)。不変ファイルには通常の所有権とグループと RWX のアクセス許可がありますが、書き込み可能なアクセス許可が含まれている場合でも、ユーザーはファイルを変更できません。これのもう 1 つの特徴は、ファイルの名前を変更できないことです。
この投稿では、chattr コマンドを使用して Linux でファイル属性を変更し、重要なファイルを不変にする方法について説明します。 chattr は Change Attribute の略です。 chattr コマンドは Linux で非常に便利なツールで、ファイルの属性を変更するために使用されます。不変とは、chattr コマンドを使用して一部のファイルの属性を設定すると、そのファイルへの完全なアクセス権を持っていても、ファイルの移動、ファイルの削除、ファイルのリンクの作成、またはファイルの編集ができなくなることを意味します。 root ユーザーも、属性が適用されるまで、そのファイルに変更を加えることはできません。 chattr コマンドを使用して、ファイルの属性を設定および設定解除できます。 root ユーザーは、chattr コマンドを使用してファイルとディレクトリの属性を設定または設定解除するためのアクセス権のみを持っています。
それでは、ファイル属性を変更するための chattr コマンドの例をいくつか見てみましょう:
「i」属性をファイルに設定
誰でもアクセスできる geek.txt という名前のファイルがあるとします。つまり、すべてのユーザーがそのファイルにアクセスして、削除、移動、または編集できます。以下の出力を参照してください。
# ls -l geek.txt -rwxrwxrwx. 1 root root 0 Apr 24 03:59 geek.txt # Everyone has full access to "geek.txt"
# rm geek.txt # I am able to delete the file rm: remove regular empty file `geek.txt'? y
chattr コマンドを使用して geek.txt ファイルに属性を設定しましょう。属性を設定するには「+」記号を使用する必要があり、属性を設定解除するには「–」記号を使用する必要があります。
# chattr +i geek.txt # Setting Attribute to a file
どこで、
私 – 不変の略。
-V も使用できます ファイルに属性を設定する際に詳細出力をチェックするオプション。
# chattr -V +i geek.txt # Setting attribute to a file with -V chattr 1.41.12 (17-May-2010) Flags of geek.txt set as ----i--------e-
そこで、ファイル geek.txt に属性を設定します。同じことを確認するには、lsattr コマンドを使用できます。以下のサンプル出力を参照してください。ファイルのパーミッション セクションに i (赤色で強調表示) があります。
# lsattr geek.txt # confirm if attribute set or not ----i--------e- geek.txt
それでは、ファイルの削除、削除、移動、およびアクセス許可の変更を試みてみましょう。あなたにはそのどれもできないと確信しています。
1. ファイルを削除します:
# rm geek.txt # Removing the File rm: remove regular empty file `geek.txt'? y rm: cannot remove `geek.txt': Operation not permitted
# You can also try to remove the file forcefully. # rm -rf geek.txt # Removing the file forcefully rm: cannot remove `geek.txt': Operation not permitted
2. ファイルを移動する:
# mv geek.txt test.txt # Move the file mv: cannot move `geek.txt' to `test.txt': Operation not permitted
3. ファイルを編集します:
# cat >> geek.txt bash: geek.txt: Permission denied
4. ファイルのパーミッションを変更する:
# chmod 755 geek.txt chmod: changing permissions of `geek.txt': Operation not permitted
上記のすべての例でわかるように、そのファイルを変更することはできません。
ファイルから -i (不変) 属性を削除する
「i」属性を削除するには、以下のコマンドを使用します。
# chattr -i geek.txt # Unset "i" attribute
属性を削除すると、権限セクションが空白になります。
# lsattr geek.txt --------------- geek.txt
chattr を使用してディレクトリを不変にする
では、chattr コマンドを使用して再帰的に属性を変更して、ディレクトリを保護してみましょう。ここに data という名前のディレクトリがあり、誰もがそのディレクトリに再帰的にフル アクセスできます。以下の出力例を参照してください。
# mkdir data # chmod -R 777 data/ # ls -l total 4 drwxrwxrwx. 2 root root 4096 Apr 24 04:25 data
属性をそのディレクトリに設定します。
# chattr +i data/ # lsattr ----i--------e- ./data
chattr で -R オプションを使用して属性を再帰的に設定することもできます。
# chattr -R +i data/
ディレクトリに属性を設定した後、ファイルを削除、移動、または作成しようとしましたが、そのいずれも許可されていないと確信しています。以下の出力例を参照してください。
# rmdir data/ # Deleting the Directory rmdir: failed to remove `data/': Operation not permitted
# rm -rf data/ # Deletiing the Directory Forcefully rm: cannot remove `data': Operation not permitted
# mv data/ mydata # Moving the Directory mv: cannot move `data/' to `mydata': Operation not permitted
# cd data/ # cat > test.txt # Creating a File in the directory bash: test.txt: Permission denied
chattr コマンドを実際に利用できる場所は?
例を見てみましょう:Linux 管理者として、誰にも構成ファイルにアクセスさせたり、ファイルを変更したり、構成ファイルを削除したり、悪用したりしたくないことは明らかです。セキュリティを確保し、アクセス権限のない悪意のあるユーザーから保護するのはあなたの責任です。 chattr コマンドを使用して、すべての構成要素を保護できます。
Linux では、すべての構成ファイルは /etc ディレクトリに保存されます。属性を /etc ディレクトリに設定すると、どの構成にもアクセスできなくなります。では、そうしましょう。
# chattr +i /etc/ # Setting attribute to /etc directory
それでは、いくつかのタスクを実行してみましょう:
例 :1 グループを作成する
# groupadd g5 groupadd: cannot lock /etc/group; try again later.
例 :2 任意のユーザーのパスワードを設定
# passwd michelle Changing password for user michelle. New password: Retype new password: passwd: Authentication token manipulation error
例 :3 新しいユーザーを作成する
# useradd thegeekdiary useradd: cannot lock /etc/passwd; try again later.
上記のように、新しいユーザーの作成、任意のユーザーのパスワードの設定、新しいグループの作成などのいくつかのタスクを実行できません。新しいユーザーを作成するか、任意のユーザーのパスワードを設定すると、/etc/passwd ファイルと /etc/shadow ファイルが更新されるため、このすべてのタスクを実行することはできません。これは、完全な /etc ディレクトリの属性を設定するため、ここでは不可能です。
注意 :ここでは、例として説明するために、完全な /etc ディレクトリに属性を設定します。ただし、必要に応じてファイル属性を設定できます。たとえば、ユーザーとグループの管理のみを制御する場合は、/etc/passwd と /etc/shadow にのみ設定できる完全な /etc ディレクトリの属性を設定する必要はありません。グループの場合は、/etc/group の属性を設定します。ファイルシステム テーブルを制御する場合は、/etc/fstab などの属性を設定します。別の例を挙げて、ファイルシステムをアンマウントしてみましょう。以下の出力例を参照してください。
例 :4 ファイル システムをアンマウントする
# umount /media/ # Unmounting a File System can't create lock file /etc/mtab~2762: Permission denied (use -n flag to override)
ファイルシステムをアンマウントすることもできません。上記のすべてのタスクを実行するには、/etc ディレクトリに適用した属性の設定を解除する必要があります。
chattr コマンドを使用して属性を設定解除
オプション -i を指定して chattr コマンドを使用すると、属性の設定を解除できます。
# chattr -Vi /etc/ # Removing Attributes from directory chattr 1.41.12 (17-May-2010) Flags of /etc/ set as ----------I--e-
chattr コマンドを使用してファイルを追加できるようにする
オプション +a を指定した chattr コマンドを使用して、ファイルにデータを追加できるようにすることができます。この属性を適用すると、そのファイルへのデータの書き込みのみが許可され、削除と移動は許可されません。
ここでは、ユーザーが geekdiary.txt ファイルにデータを追加できるようにしています。
# chattr +a thegeekdiary.txt # Setting +a Attribute
適用された属性を確認するには、以下のコマンドを使用します。許可セクションがあります。
# lsattr thegeekdiary.txt -----a-------e- thegeekdiary.txt
以下に示すように、ファイルの内容を確認できます。
# cat thegeekdiary.txt Welcome to thegeekdiary.com
それでは、ファイルにデータを追加してみましょう。
# cat >> thegeekdiary.txt # Writing some data Here you will get Linux Tutorials
# ここで cat コマンドを使用して同じことを確認します
# cat thegeekdiary.txt Welcome to thegeekdiary.com Here you will get Linux Tutorials
これで、geekdiary.txt にデータを正常に追加できます。それでは、ファイルを削除してみましょう。
# rm thegeekdiary.txt # Deleting the File rm: remove regular file `thegeekdiary.txt'? y rm: cannot remove `thegeekdiary.txt': Operation not permitted
# rm -rf thegeekdiary.txt # Deleting the File Forcefully rm: cannot remove `thegeekdiary.txt': Operation not permitted
chattr コマンドに関連する詳細については、Linux システムで以下のコマンドを使用できます。
# man chattr # man lsattr
いくつかの便利な chattr コマンドのオプションを見てください:
- +i – +i 属性を持つファイルは、削除、移動、名前変更できません。つまり、変更できません。
- -i – このオプションを使用すると、ファイルから i 属性を削除できます。
- -V – 詳細出力を表示するには
- -a – この属性を使用すると、ファイルにデータを追加することのみが許可され、削除または移動することはできません。