Если бы это был обычный двоичный файл, вы могли бы установить setuid, запустив
# chmod u+s /path/to/binary
К сожалению, сценарии не могут быть установлены. (Ну, вы можете, но это игнорируется). Причина этого заключается в том, что первая строка скрипта сообщает ОС, под каким интерпретатором будет запускаться скрипт. Например, если у вас был скрипт с:
#!/bin/bash
Вы на самом деле в конечном итоге работает
/bin/bash /path/to/script
Очевидно, что вам понадобится установить интерпретатор, что будет означать, что все сценарии будут настроены. Это было бы плохо.
Вы можете сделать это с помощью sudo, поместив в файл / etc / sudoers следующую команду, запустив visudo.
ALL ALL=NOPASSWD: /path/to/script
И теперь любой пользователь может запустить
$ sudo /path/to/script
Это позволяет им запускать скрипт без ввода пароля.
Существует альтернатива, которая не требует sudo в команде, которая требует создания небольшого двоичного файла с установленным кодом, который исполняет ваш сценарий, но каждый дополнительный двоичный файл с установленным кодом добавляет еще одну потенциальную проблему безопасности.
ALL
на имя пользователя, чтобы разрешить запуск только одного sudoer без ввода пароля.Мне нужно вставить эту строку КОНЦЕ из / и т.д. / sudoers: По-
ALL ALL = NOPASSWD: <filename>
видимому, позднее%admin ALL=(ALL) ALL
переопределение требуется пароль для администратора пользователей.Нет проблем с безопасностью, позволяющих запускать сценарий от имени пользователя root, если он выполняет четко определенное, безвредное, разрешенное действие и, если значения для каких-либо параметров не могут привести к неправильной работе сценария.
Но есть гоча ...
Всегда используйте полные пути в именах команд и файлов. Если вы напишите что-то вроде
echo Hello world!
inmyrootscript
, кто-то может написать a~/bin/echo script
иmyrootscript
выполнить от имени root все, что находится в нем./bin/echo "Hoping this will keep you safe"
:-)источник
По умолчанию членам
wheel
группы разрешаетсяsudo
любая команда asroot
. Это, вероятно, как вы используетеsudo
на сегодняшний день.Чтобы разрешить другому пользователю вам нужно будет создать
sudoers
правило. Например:Позволит пользователю
mickey.mouse
выполнить команду ,/usr/local/bin/test.sh
как ,root
не требуя дополнительного приглашения пароля.Вы должны прочитать этот документ для получения дополнительной информации.
источник
Используйте,chmod +s <filename>
чтобы увидеть бит suid. Это означает, что когда файл исполняется, он запускается с разрешениями владельца файла (поэтому включите его в root, чтобы он работал так).Однако это может быть ОЧЕНЬ опасно с чем-то вроде скриптов bash, потому что пользователь находит способ изменить его, он может легко получить корневую оболочку. Убедитесь, что он не может быть записан никем, кроме root.Linux не позволяет вам настраивать скрипты, для этого вам нужно скомпилировать его как программу. Вместо этого вы можете использовать файл sudoers (/ etc / sudoers) и добавить такую строку.
<username> ALL = NOPASSWD: /path/to/script
источник
Другой вариант: вы можете сделать небольшую оболочку setuid C вокруг этого скрипта, которая
Вроде как ваше собственное подмножество множества возможностей
sudo
.источник