これは私がトレーニングマシンにumaskを使用するようにインスピレーションを与えたものです。
テストユーザーjohnを作成し、johnとしてログインしました。そしてumaskを0200に設定し、vimでテストファイルを生成して保存します。このテストファイルの権限は次のとおりです。
-r--rw-rw-. 1 john john 26 Jun 28 12:25 testfile
これでファイルを再編集しようとしましたが、横説説が出ました。
「:wq」を使って保存しようとすると、エディタはファイルが読み取り専用なので保存できないというメッセージが表示されます。しかし、最後に感嘆符「:wq!」を追加すると、ファイルが保存されます。
何が起こったのですか? ?テストファイルの書き込みビットがオフになっていても
ホストOS = RedHat(rhel)7.2
答え1
"wq" を使用すると、 "!" は Vim に読み取り専用属性を無視するように要求します。 ~から文書:
:wq [++opt] 現在のファイルに書き込んで終了します。ファイルが読み取り専用であるか、バッファーに名前がない場合、書き込みは失敗します。パラメータリストの最後のファイルが編集されていないと、シャットダウンは失敗します。
:うわー! [++opt] 現在のファイルに書き込んで終了します。現在のバッファに名前がない場合、書き込みは失敗します。
違いに注意してください。 「!」がない場合、「ファイルが読み取り専用のときに失敗しました...」は、もはや「!」には適用されません。
技術的にこれが起こる理由は、あなたがファイルの所有者であるため、Vimはその権限を事実上無視する可能性があるためです(最悪の場合、変更して復元できます。)。実際、Vimは読み取り専用ファイルを作成するいくつかの方法をサポートしています。
- ディレクトリが書き込み可能な場合は、既存のファイルの名前を変更し(
~
名前に追加)、新しいファイルを作成し、ファイルに新しいコンテンツを書き込み、元のファイルの権限を復元します(Vimを実行しているユーザーがVimでない場合も同様)。 。ファイル所有者のユーザー) - ディレクトリが書き込み可能でない場合は、ファイルを書き込み可能ディレクトリにバックアップし(
~/tmp
通常は)ファイルの権限を書き込み可能に変更し、ファイルに新しいコンテンツを書き込み、元の権限を復元します(Vimを実行しているユーザーが次の場合のみ動作します)。ファイルの所有者)。
答え2
私の答えによると、私はVimに興味がありませんが、あなたが偶然見つけた基本的なメカニズムを見てください。これはシステム全体のセキュリティに影響を与えるため、これを理解することが重要です。
所有者は独立しています。試してみて、自分に属していないファイルを作成し、書き込むのではなく自分で読んでください。同じ結果が得られます。では、なぜこんな感じですか?
(所有者、ルート、またはCAP_CHOWN、CAP_DAC_OVERRIDE、CAP_FOWNER、またはその他の機能がある場合は可能です。)
これはディレクトリの権限によるものです。ディレクトリは書き込み可能なので、vimはファイルを追加したり削除したりできます。それでそれがすることです。古いものを取り除き、新しいものと交換します。これにより、ファイルのwビットがほとんど推奨事項になります(ディレクトリに何も記録されない場合はそうではありませんが)。
これよりも安全な方法で行うことが可能です。古いアイテムを移動し、新しいアイテムを作成し、古いアイテムを削除します。