Это поздний ответ, но вы можете выполнить его при каждом входе в систему И запустить его от имени пользователя root (или любого другого пользователя), выполнив следующие действия:
- Напишите ваш скрипт с командами, которые вы хотите запустить от имени пользователя root, и сохраните его, например, как
/path/to/root-script.sh
.
Сделайте root (или нужного пользователя) владельцем скрипта.
chown root:root /path/to/root-script.sh`
Установите бит setuid в сценарии с другими необходимыми разрешениями. (убедитесь, что он не доступен для записи и т. д.)
chmod 4755 /path/to/root-script.sh
4
означает установить бит setuid, который будет запускать скрипт как владельца скрипта. Это то, что sudo
использует для обеспечения выполнения от имени пользователя root.
Чтобы убедиться, что он запускается при каждом входе в систему, запустите sticky-bit-set root-script.sh
из /etc/profile
. /etc/profile
должен запускаться независимо от используемой пользователем оболочки. Обратите внимание, что это будет применяться только к интерактивным входам.
Редактировать Как отметил Скотт в комментариях, это решение обычно НЕ работает на любой современной системе с любым сценарием shebang, кроме Perl <5.12.0. Современные ядра игнорируют сценарии с битом setuid, если они не были исправлены, что не рекомендуется из соображений безопасности.
Скорее всего, setuid обычно работает только с скомпилированными двоичными файлами и [старыми версиями Perl] [ https://stackoverflow.com/questions/21597300/can-i-setuid-for-perl-script], которые можно использовать (Perl <5.12.0) с suidperl
.
Этот вопрос Unix/Linux SE содержит исчерпывающий ответ о том, почему setuid игнорируется для сценариев shebang, с его обобщенным TL; DR:
Сетуид Шебанг небезопасен, но обычно игнорируется. Если вы запускаете программу с привилегиями (либо через sudo, либо через setuid), пишете собственный код или perl, либо запускаете программу с помощью оболочки, которая дезинфицирует среду (например, sudo с опцией env_reset).