«/etc/nginx/nginx.conf предназначен только для чтения» при редактировании с помощью nano после обновления Ubuntu 20.04 до Ubuntu 22.04

«/etc/nginx/nginx.conf предназначен только для чтения» при редактировании с помощью nano после обновления Ubuntu 20.04 до Ubuntu 22.04

Недавно я обновил Ubuntu Server 20.04 до Ubuntu Server 22.04. Это сервер LEMP, на котором запущена последняя версия Mainline Nginx. После обновления, когда я пытаюсь изменить файл /etc/nginx/nginx.conf с помощью редактора nano, nano показывает предупреждение красным цветом, в котором говорится:

/etc/nginx/nginx.conf предназначен только для чтения

Что это за ошибка, и с каких пор мой файл nginx.conf должен быть доступен только для чтения? Это проблема nginx, nano, файловой системы или всего вышеперечисленного? Что я могу сделать, чтобы исправить эту ошибку? Пожалуйста, посмотрите на скриншот ниже.

Nginx.conf предназначен только для чтения.

решение1

Это не настоящая ошибка, вы все равно можете записывать данные в файл.

nanoпроверяет, установлен ли для файла бит разрешения u+w, g+w, или o+w. Если ни один из этих битов не установлен, никому в системе явно не предоставлен доступ на запись в файл. Однако пользователь 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 при открытии файла, предназначенного только для чтения.

Связанный контент