Выполнить скрипт оболочки без ввода пароля

Я хочу выполнить скрипт, который требует привилегий суперпользователя без ввода пароля. Есть похожие вопросы / ответы, но, похоже, не работает для меня.

Я поместил свой скрипт в /home/kf/bin (я сам добавил каталог bin) и включил этот каталог в свой путь, чтобы я мог запускать его из любого места.

Сценарий: trim.sh:

#! /bin/sh
sudo fstrim -v /

Я изменил владельца сценария на root:

 sudo chown root:root /home/kf/bin/trim.sh

и сделал его исполняемым

sudo chmod 700 /home/kf/bin/trim.sh

Затем я добавил строку в мой файл sudoers с visudo:

kf   ALL=(ALL) NOPASSWD: /home/kf/bin/trim.sh

Когда я снова войду в систему и выполню скрипт с trim Мне все еще нужно ввести свой пароль. Я знаю, что могу сделать cron для этого, но я также хочу иметь возможность выполнять скрипт вручную, не вводя мой пароль. Любая помощь приветствуется.

редактировать:

Мой файл sudoers выглядит так:

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin: /usr/bin:/sbin:/bin"

root    ALL=(ALL:ALL) ALL
kf   ALL=(ALL) NOPASSWD: /home/kf/bin/trim.sh

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

2 ответа

Решение

Измените строку в файле sudoers на:

kf   ALL=(ALL) NOPASSWD: /sbin/fstrim

Я не рекомендую добавлять скрипт в /etc/sudoersпотому что сценарий может быть изменен и каждая команда (весь сценарий) будет выполняться с правами суперпользователя.

Вам нужен бит setuid, он позволяет пользователям запускать программу с разрешениями ее владельца.

/! \ Будьте осторожны с этим, это часто плохое решение из-за проблем с безопасностью, которые оно выставляет.

Другие вопросы по тегам