Я хочу проверить, существует ли файл [ -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"