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

Проверьте, существует ли файл, используя другого пользователя (sudo -u)

Я хочу проверить, существует ли файл [ -f /path/to/file ] используя другого пользователя.

Итак, я добавил:

USER1        ALL=(USER2)     /bin/mkdir, /usr/bin/git, /bin/echo

в файл sudoers.

Проблема в том, что когда я пытаюсь выполнить

USER1:~$ sudo -u USER2 [ -f /path/to/file ] && echo "1"

Получаю следующее:

Sorry, user USER1 is not allowed to execute '/usr/bin/[ -f /path/to/file ]' as USER2 on localhost.

Итак, вопрос: как мне включить это в файле sudoers?


Решение

я добавил /usr/bin/test в файл sudoers и вместо этого:

USER1:~$ sudo -u USER2 [ -f /path/to/file ] && echo "1"

На самом деле я использовал:

USER1:~$ sudo -u USER2 /usr/bin/test -f /path/to/file && echo "1"

Вы пытаетесь выполнить /usr/bin/[ но не дали пользователю разрешения. Есть два способа сделать это.

Первый - позволить пользователю выполнить /usr/bin/[ (какой test программа). Это позволит пользователю выполнить любой тест для любого файла. Вы также можете использовать test вместо того [, что может быть более очевидным относительно того, что происходит.

USER1   ALL=(USER2) /bin/mkdir, /usr/bin/git, /bin/echo, /usr/bin/[, /usr/bin/test

А затем запустите:

sudo -u USER2 [ -f /path/to/file ] && echo "1"

или

sudo -u USER2 test -f /path/to/file && echo "1"

Второй вариант - написать сценарий оболочки и позволить пользователю выполнить его. Например, со следующим в /usr/local/bin/exists:

#!/bin/sh
set -e
[ -f "$1" ]

И это в /etc/sudoers:

USER1   ALL=(USER2) /bin/mkdir, /usr/bin/git, /bin/echo, /usr/local/bin/exists

Пользователь мог запустить:

sudo -u USER2 /usr/local/bin/exists /path/to/file && echo "1"