将 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。这是一个运行最新 Mainline 版本 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。

相关内容