В предыдущих заявлениях есть половина правды. Вы можете настроить скрипт так, чтобы он не читался пользователем, но оставался исполняемым. Процесс немного затягивается, но его можно выполнить, сделав исключение в / etc / sudoer, чтобы пользователь мог временно запускать сценарий от своего имени без запроса пароля. Пример ниже:
Некоторый скрипт, которым я хочу поделиться с пользователем:
me@OB1:~/Desktop/script/$ chmod 700 somescript.pl
me@OB1:~/Desktop/script/$ ls -l somescript.pl
-rwx------ 1 me me 4519 May 16 10:25 somescript.pl
Создайте скрипт оболочки, который вызывает somescript.pl, и сохраните его в / bin /:
me@OB1:/bin$ sudo cat somescript.sh
[sudo] password for me:
#!/bin/bash
sudo -u me /home/me/Desktop/script/somescript.pl $@
ДОПОЛНИТЕЛЬНЫЙ ШАГ Создайте символическую ссылку на somescript.sh в / bin /:
sudo ln -s /bin/somescript.sh /bin/somescript
Убедитесь, что сценарий оболочки доступен для чтения / исполнения пользователю (нет прав на запись):
sudo chmod 755 /bin/somescript.sh
me@OB1:/bin$ ls -l somescript*
lrwxrwxrwx 1 root root 14 May 28 16:11 somescript -> /bin/somescript.sh
-rwxr-xr-x 1 root root 184 May 28 18:45 somescript.sh
Сделайте исключение в / etc / sudoer, добавив следующие строки:
# User alias specification
User_Alias SCRIPTUSER = me, someusername, anotheruser
# Run script as the user 'me' without asking for password
SCRIPTUSER ALL = (me) NOPASSWD: /home/me/Desktop/script/somescript.pl
Доказательство в пудинге:
someuser@OB1:~$ somescript
***You can run me, but can't see my private parts!***
someuser@OB1:~$ cat /home/me/Desktop/script/somescript.pl
cat: /home/me/Desktop/script/somescript.pl: Permission denied
Этот метод должен быть лучше, чем пытаться запутать Filter::Crypto
или, PAR::Filter::Crypto
или Acme::Bleach
который может быть изменен, разработанным определенным пользователем. То же самое касается компиляции вашего скрипта в двоичный файл. Дайте мне знать, если вы нашли что-то не так с этим методом. Для более опытных пользователей вы можете полностью удалить раздел User_Alias и заменить SCRIPTUSER на «% groupname». Таким образом, вы можете управлять пользователями вашего скрипта с помощью usermod
команды.