將 Ubuntu 20.04 升級到 Ubuntu 22.04 後使用 nano 進行編輯時,“/etc/nginx/nginx.conf 是唯讀的”

將 Ubuntu 20.04 升級到 Ubuntu 22.04 後使用 nano 進行編輯時,“/etc/nginx/nginx.conf 是唯讀的”

我最近將 Ubuntu Server 20.04 升級到 Ubuntu Server 22.04。它是一個運行最新主線版本 Nginx 的 LEMP 伺服器。升級後,當我嘗試使用 nano 編輯器修改 /etc/nginx/nginx.conf 檔案時,nano 顯示紅色警告:

/etc/nginx/nginx.conf 是唯讀的

這個錯誤是什麼意思,從什麼時候開始我的 nginx.conf 檔案變成唯讀的?這是 nginx 問題、nano 問題還是檔案系統權限問題,還是以上所有問題?我可以做什麼來修復這個錯誤?請參閱下面的螢幕截圖。

Nginx.conf 是唯讀的

答案1

這不是一個實際的錯誤,您仍然可以寫入該文件。

nano正在測試檔案是否設定了u+wg+wo+w權限位。當這些位元均未設定時,系統上的任何人都沒有被明確授予對該檔案的寫入存取權限。然而,root 使用者(您可能已透過 提升至 root 使用者sudo)否決了這一點,並且可以隱式寫入任何檔案。

換句話說,警告的意思是:您可以寫入此文件,因為您是 root,但從技術上講,任何使用者都沒有對該文件的寫入權限。

新行為來自提交為的增強請求錯誤#58685解釋理由:

目前,nano 很樂意寫入權限為 444 [ r--r--r--] 的檔案。

通常,此類文件出於某種原因是唯讀的,最好提示用戶並詢問他們是否真的想要這樣做。


為了回答這個問題,我查閱了nanognu.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

檔案:當所有寫入位元遺失時警告 root 用戶
Root 擁有全權讀取不可讀檔案和寫入不可寫檔案的權限——檔案系統不會阻止這種情況。因此,在開啟唯讀檔案時請提醒 root。

相關內容