Можно проверить способность 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 по умолчанию
  • Сделать sudo запрос пароля
  • почему «sudo -u xxx cmd» не удается, но «sudo -u xxx / path / to / cmd» преуспевает?
  • sudo host field: для чего он используется?
  • Могу ли я настроить сообщение sudo «этот инцидент будет сообщен»?
  • Добавление sudo в команду find: что это значит?
  • Как предоставить все права на пользователя пользователю ubuntu 12.04
  • Запустить команду sudo с пользователем без полномочий root в контейнере Docker
  • One Solution collect form web for “Можно проверить способность sudo до sudo'ing?”

    Согласно странице 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 или ничего, в зависимости от ваших потребностей.

    Linux и Unix - лучшая ОС в мире.