Какой пользователь использует AppleScript при выполнении скриптов - PullRequest
0 голосов
/ 05 мая 2020

• Вот сценарий, который будет выполняться через AppleScript:

bash-3.2$ cd /Users/jack/Desktop/
bash-3.2$ ls -l | grep static
-rwxrwxrwx   1 jack  admin      65  5 May 08:10 static-routes.sh
bash-3.2$ cat static-routes.sh 
#!/bin/bash
sudo route -n add -net 192.168.3.0/24 172.16.254.134
~                                                         

• AppleScript содержит следующее:

do shell script "~/Desktop/static-routes.sh"

• При выполнении сценария из AppleScript, щелкнув на кнопке «Выполнить» появляется всплывающее окно с сообщением:

Ошибка сценария sudo: для чтения пароля требуется терминал; Либо используйте параметр -S для чтения из стандартного ввода, либо настройте помощник askpass enter image description here

• При выполнении сценария с консоли без sudo дополнительные запросы не появляются. :

bash-3.2$: Desktop jack$ ./static-routes.sh 
add net 192.168.3.0: gateway 172.16.254.134

• Вот фрагмент из /etc/sudoers:

bash-3.2$ sudo visudo
# root and users in group wheel can run anything on any machine as any user
root            ALL = (ALL) ALL
%admin          ALL = (ALL) ALL
jack ALL = (ALL) NOPASSWD: /Users/jack/Desktop/static-routes.sh

## Read drop-in files from /private/etc/sudoers.d
## (the '#' here does not indicate a comment)
#includedir /private/etc/sudoers.d
Defaults timestamp_timeout=60

Вопросы:

• Почему появляется эта ошибка, поскольку, я явно добавлен сценарий в файл sudoers, который будет выполняться без запроса пароля через sudo?

• Какого пользователя AppleScript использует для выполнения сценариев? Можно ли его изменить?

1 Ответ

1 голос
/ 05 мая 2020

Для запуска команды, требующей привилегий от AppleScript, вам необходимо указать это, добавив ключ administrator privileges, как в одном из следующих вариантов:

-- this will presented a standard authorization dialog
do shell script "~/Desktop/static-routes.sh" with administrator privileges

-- this will specifies an administrator account and password
-- (though note, the password will be visible as plain text in the script)
do shell script "~/Desktop/static-routes.sh" with administrator privileges user name XXXX password YYYY

Вы не должны использовать sudo в при этом вы используете with administrator privileges; это не нужно и создает дыры в безопасности. Однако, поскольку вы уже изменили файл sudoers, вы можете попробовать следующее:

do shell script "sudo ~/Desktop/static-routes.sh"

Помещение sudo вперед, как это, может указать AppleScript на правильные действия.

См. Technote 2065 для получения дополнительной информации.

...