Intereting Posts
Как заменить текущее слово под курсором в Emacs Как установить аппаратные зависимости в .deb-пакеты? Идеальное оборудование для ноутбуков GNU / Linux Получите полные размеры окна (включая украшения) в Unity Как найти значения полей в ls -l Установите Arch Linux на внешний жесткий диск с помощью виртуальной машины? Как настроить zkbd (привязки клавиатуры zsh) на сервере? Настройка доступа SCP для входа без локальной учетной записи Удалите последовательные строки в CSV с повторяющимися значениями в одном поле, но сохраните последнюю строку Лучший и короткий способ запуска программы, если другой не установлен Объединение нескольких команд в одну строку Быстрое шифрование для домашнего каталога с Scientific Linux (ala 'RedHat) Удалить все «nohup.out» в рекурсивном каталоге Построить Хром из источника Страница вырезается в половине, если я печатаю из Chrome или Google Cloud, но с Firefox не

Можно проверить способность sudo до sudo'ing?

Я пишу небольшую служебную программу. Я бы хотел, чтобы он попытался что-то сделать, если потребуется.

То есть: если разрешения на доступ к файлам не позволяют текущему пользователю работать с определенным файлом (и это разрешат правила sudo ), я хотел бы, чтобы моя утилита sudo -run что-то использовала в качестве владельца файла.

Я надеюсь проверить эту возможность заранее, потому что я бы предпочел, чтобы системные журналы не заполняли шум от неудачных попыток sudo . Как sudo сам сообщает о неудаче: «Этот инцидент будет сообщен».

Итак, я надеюсь программно проверить: может ли user <x> выполнить command <y> через sudo ?.

Вот проблема: в то время как /etc/sudoers содержит это сопоставление, оно принадлежит root и не читается обычными пользователями.

Я рассматривал возможность создания подпроцесса для запуска sudo -l (который выводит команды, которые текущий пользователь может выполнить sudo-run). Затем я проанализирую вывод этого. Однако это кажется немного хрупким. Результат содержит информацию, которую я хочу, но, похоже, она была предназначена для людей, чтобы читать (не для программного потребления). Я не знаю, есть ли какая-либо гарантия, что вывод будет следовать в том же формате в будущем или на разных платформах.

Является ли программный синтаксический анализ sudo -l считается безопасным? Если нет, есть ли лучшие варианты, чтобы заранее определить, удастся ли выполнить команду sudo?


(справочная информация по X / Y: эта утилита предназначена для использования учетной записью роли с ограниченным доступом. Я ожидаю, что некоторые другие пользователи смогут эффективно разрешить учетной записи с ограниченным доступом работать с файлами по правилам sudo. Однако я выиграл заранее не знаю, какой из этих других пользователей имеет соответствующее правило sudo)

Согласно странице sudo man:

  -l, --list If no command is specified, list the allowed (and forbidden) commands for the invoking user (or the user specified by the -U option) on the current host. A longer list format is used if this option is specified multiple times and the security policy supports a verbose output format. If a command is specified and is permitted by the security policy, the fully-qualified path to the command is displayed along with any command line arguments. If command is specified but not allowed, sudo will exit with a status value of 1. 

так что это будет

 if sudo -l -U $USER shutdown > /dev/null then ## $USER can else ## $USER cannot fi 

Как указано Муру, используйте либо -U $USER либо -U $USERTOTEST или ничего, в зависимости от ваших потребностей.