Назад | Перейти на главную страницу

What is causing visudo to fail with: “visudo: can't stat <filename>: Неверный номер файла »?</filename>

Мы используем #include в файле sudoers для организации наших правил sudo для каждого приложения.

Наши настройки sudoers выглядят примерно так:

/etc/sudoers
 -> #include /usr/local/etc/sudo/sudoers.master
     -> #include /usr/local/etc/sudo/app1.sudo
     -> #include /usr/local/etc/sudo/app2.sudo
     -> #include /usr/local/etc/sudo/<...etc...>.sudo

/usr/local/etc это каталог, который мы синхронизируем на всех наших серверах.

Иногда нам нужны правила sudo для конкретного хоста, поэтому мы помещаем их прямо в / etc / sudoers. Все глобальное попадает в эти централизованно синхронизируемые файлы.

Когда я бегу visudo для редактирования локальных sudoers он открывается /etc/sudoers в vi без проблем. Когда я сохраняю свои изменения, я получаю запрос:

"/etc/sudoers.tmp" XX lines, XXXX characters 
press return to edit /usr/local/etc/sudo/sudoers.master: 
visudo: can't stat /usr/local/etc/sudo/sudoers.master: Bad file number

И тогда visudo просто существует (код выхода 1).

Синтаксис для sudoers.master и appX.sudo файлы все проверить.

Что заставляет visudo не доводить дело до конца с открытием sudoers.master файл, который был включен через #include в конце базы sudoers?

Я наблюдаю такое поведение в AIX, Linux и Solaris.

В качестве обходного пути есть способ сказать visudo просто не следовать никаким #include директивы, и редактировать только основной файл?

Если вы используете #includedir скорее, чем #include visudo не будет пытаться редактировать включенные файлы, если в них нет синтаксических ошибок.