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

Разрешения файла Sudoers

Я пытаюсь запустить следующую команду без использования sudo:

echo 1 | sudo tee -a /sys/block/$hd/device/delete

Переменная $ hd динамически изменяется с sdb -> sdi для каждого из моих жестких дисков в отсеке для дисков.

Я добавил в файл sudoers следующую строку:

operator ALL=/sys/block/sdb/device/delete

Но это не имело значения, он все еще запрашивает пароль sudo, даже если я запускаю:

echo 1 | sudo tee -a /sys/block/sdb/device/delete

В sudoers строка может указывать только на команду, которую вы собираетесь запустить, а не на выходной файл назначения. Что-нибудь под этим /sys это специальное устройство, на которое записываются символы.

Что вы хотите сделать, так это создать сценарий, который будет делать echo 1 > /sys/block/$hd/device/delete где $ hd проверяется на соответствие регулярному выражению /sd[b-i]/. Направляйте команду sudo на этот сценарий, а не там, где он у вас.

К тому же Майкл Хэмптон прав: кто-то воля запустите команду удаления, которую вы не хотите испортить. Если у вас нет надлежащих резервных копий, ваши данные никогда не существовали.

Поместите свой код в сценарий (вы пишете сценарий, верно?) И предоставьте пользователю sudo доступ к скрипту.

Скорее всего, это будет выглядеть примерно так:

#!/bin/bash
for kill_this_disk in /sys/block/sd[b-i]/device/delete
do
    echo 1 > $kill_this_disk
done

И, надеюсь, у вас хорошие резервные копии.

Я не думаю, что ** operator ALL = / sys / block / sdb / device / delete ** позволит вам получить доступ к этому устройству, даже если он не является root. Sudoers позволяет вам указывать команды, которые не будут запрашивать пароль при запуске от имени sudo (здесь, например, «tee»). Ваша проблема связана с разрешениями на / sys / block / $ hd / device / delete ...

Возможно, вам нужно использовать параметр NOPASSWD в файле конфигурации sudoers. Я считаю, что синтаксис примерно такой:

operator ALL=NOPASSWD:/sys/block/sdb/device/delete