Це питання є загальним і не стосується лише моєї ситуації, але ... У мене є невеликий пристрій для зайнятих ящиків, де я хочу, щоб користувач, який не має root, мав змогу виконувати певний скрипт із root правами. Наприклад, щось на зразок цього невеликого сценарію для включення DHCP, де єдиною змінною ( $1
) для надсилання на cmdline (!!) є те, що ім'я хоста надсилати:
#!/bin/bash
udhcpc -b -i eth0 -h $1
як працює такий udhcpc, потрібен кореневий доступ, тому для цього я планую змінити, /etc/sudoers
щоб містити цей рядок:
joe ALL = NOPASSWD: /path/to/enable_dhcp.sh
який повинен дозволити "joe" легко запускати цей скрипт з привілеями root, просто запустивши:
sudo /path/to/enable_dhcp.sh
і не запитувати пароль (що я хочу, оскільки я хочу, щоб Джо міг це сценарій).
Тепер я знаю (або, принаймні, думаю, що я роблю), що використання $1
в скрипті, який можна легко запустити з привілеями root, - ХОРОБА ідея, оскільки ви можете вводити в це все, що хочете.
Отже ... який найкращий спосіб впоратися з цим? Як я можу дозволити Джо робити те, що я хочу з привілеями root, дозволити йому переходити в змінну (або ефективно робити так, як із змінною оточення), не будучи широко відкритим для ін'єкційних атак?