最近、Ubuntu Server 20.04をUbuntu Server 22.04にアップグレードしました。これは、最新のメインラインバージョンのNginxを実行しているLEMPサーバーです。アップグレード後、nanoエディタで/etc/nginx/nginx.confファイルを変更しようとすると、nanoに赤い警告が表示されます。
/etc/nginx/nginx.confは読み取り専用です
このエラーの原因は何ですか? また、いつから nginx.conf ファイルが読み取り専用になったのですか? これは nginx の問題ですか、nano の問題ですか、ファイルシステムのアクセス許可の問題ですか、それともこれらすべてですか? このエラーを修正するにはどうすればよいですか? 以下のスクリーンショットを参照してください。
答え1
これは実際のエラーではありません。ファイルに書き込むことは可能です。
nano
は、ファイルにu+w
、g+w
、または のo+w
許可ビットが設定されているかどうかをテストしています。これらのビットがいずれも設定されていない場合、システム上の誰にもファイルへの書き込みアクセスが明示的に許可されていません。ただし、root ユーザー ( で昇格されている可能性がありますsudo
) はこれを無効にして、暗黙的に任意のファイルに書き込むことができます。
言い換えると、この警告は次のように言っています: あなたは root なのでこのファイルに書き込むことができますが、技術的にはどのユーザーにもこのファイルへの書き込み権限はありません。
この新しい動作は、以下の機能強化リクエストから生まれました。バグ #58685根拠を説明する:
現在、nano は権限 444 [ ] を持つファイルに問題なく書き込みます
r--r--r--
。多くの場合、このようなファイルは何らかの理由で読み取り専用になっており、ユーザーにプロンプトを表示して、本当に読み取り専用にしたいかどうかを尋ねるとよいでしょう。
この質問に答えるために、私はnano
gnu.orgのコード(Ubuntuのリポジトリに同梱されている正確なコードが必要な場合は、発射台.) でsrc/files.c
次のメッセージを見つけました:
#elif defined(HAVE_GETEUID)
if (new_one && !(fileinfo.st_mode & (S_IWUSR|S_IWGRP|S_IWOTH)) &&
geteuid() == ROOT_UID)
statusline(ALERT, _("%s is meant to be read-only"), realname);
#endif
これらの行はgit blame
、コミットすることを示しています180a53cc0:
ファイル: 書き込みビットがすべて欠落している場合にルートユーザーに警告する
ルートには、読み取り不可能なファイルを読み取ることも、書き込み不可能なファイルを書き込むことも自由に行うことができます。ファイル システムはこれを阻止しません。したがって、読み取り専用のファイルを開くときは、ルートに警告してください。