ファイルを変更不可にするにはどうすればよいですか?


35

ログイン中に、次のことができます。

mkdir foo
touch foo/bar
chmod 400 foo/bar 
chmod 500 foo

次にroot、(ではなく)vimを開き、編集しbar、で強制的に書き込みw!、ファイルが変更されます。

オペレーティングシステムでファイルの変更を禁止するにはどうすればよいですか?

2017年3月2日更新

  1. chmod 500 foo赤いニシンです。ディレクトリに対する書き込み権限は、ファイルの内容を変更する機能とは関係ありません。ファイルを作成および削除する機能のみです。

  2. chmod 400 foo/bar実際、ファイルの内容が変更されるのを防ぎます。ただし、ファイルのアクセス許可が変更されるのを防ぐことはできませ -ファイルの所有者は、常にファイルのアクセス許可を変更できます(ファイルにアクセスできる場合、つまりすべての祖先ディレクトリでアクセス許可を実行できる場合)。実際、strace(1)は、これがvim(7.4.576 Debian Jessie)が行っていることを明らかにしています-vimはchmod(2)を呼び出してファイルの所有者に書き込み許可を一時的に追加し、ファイルを変更してからchmod( 2)再度書き込み許可を削除します。それが、chattr +iworks を使用する理由です。root のみがを呼び出すことができますchattr -i。理論的には、vim(または任意のプログラム)は、rootとして実行された場合、不変ファイルでchmodを使用するのと同じことをchattrで実行できます。


3
内部でvimは、実際に権限を変更してから元に戻していると思います。
ヨルダン

として実行されていませんrootか?
アルビンウォン

アルビン、私はこれを非rootユーザーとして行います。投稿を編集して明確にしました。
user2141130

回答:


49

Linuxのほとんどのファイルシステムで「不変」属性を設定できます。

chattr +i foo/bar

不変の属性を削除するには、-代わりにを使用します+

chattr -i foo/bar

ファイルの現在の属性を表示するには、lsattrを使用できます。

lsattr foo/bar

chattrは(1)マンページは、すべての利用可能な属性の記述を提供します。の説明はi次のとおりです。

   A  file with the `i' attribute cannot be modified: it cannot be deleted
   or renamed, no link can be created to this file  and  no  data  can  be
   written  to  the  file.  Only the superuser or a process possessing the
   CAP_LINUX_IMMUTABLE capability can set or clear this attribute.

3
Linuxでは、その不変フラグが多くのファイルシステムで提供されていないだけではext2 / 3/4(最低のbtrfs、hfsplus、JFS、NILFS2、XFS、OCFS2、UBIFS、GFS2、コードを簡単に見てからAFAICTをReiserFSの時)
ステファンChazelas

@StephaneChazelas chattrコマンドがe2fsprogs私のシステムのパッケージの一部であるのを見ました。それが私がその声明を発表した理由です。コメントに基づいて回答を更新しました。
ヨルダン

シンボリックリンクでは機能しません:-(。このソリューションは、シンボリックリンクがrootを含むすべてのユーザーによって誤って変更されることを回避したいので、素晴らしいでしょう。
natenho15年

不変はxattrではなくinodeフラグが正しいですか?ioctlフラグは正確ですか?
イッピライ

1

あなたはできる:

  1. ファイルの所有者rootまたはダミーの新しく作成されたユーザーに変更します
  2. 正しいグループを維持します。
  3. chmod 440グループ(あなた)による読み取りを許可するために使用します。

正しいユーザーがこのグループの唯一のユーザーではない場合、新しいグループを作成し、そのユーザーのみを追加して、このグループを使用する必要があります。ただし、あなたはviファイルの所有者ではないため、ファイルの所有者を変更することはできません。


3
親ディレクトリに書き込むことができる場合、vimはファイルを削除して新しいファイルを作成できます(実行すると実行されます:w!)。ただし、vimはディレクトリのアクセス許可を一時的に変更するだけではありません。したがって、ディレクトリを書き込み不可にすると安全です。
ステファンシャゼル

0

ディレクトリツリー全体を読み取り専用にするには:

cd <directory>
find ./ -print0 | sudo xargs -I {} -0 chattr +i {}

読みやすくするには、に変更+i-iます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.