Как «сделать скрипт оболочки с правами администратора» как обычный пользователь, а не как root? - PullRequest
0 голосов
/ 25 января 2011

Я запускаю applscript, который запускает шеллскрипт через Терминал.

Я хочу иметь возможность использовать «do shell script с правами администратора», но Терминал запускает мой скрипт как root, а не как обычныйпользователь (который является администратором).

Причина, по которой я хочу работать не как root (за исключением очевидных причин), заключается в том, что я использую знак ~, чтобы любой пользователь мог войти в систему и запустить скрипт локально (например,Я записываю файл журнала прямо на рабочий стол пользователя).

Другая причина, по которой я хочу работать не от имени пользователя root, заключается в том, что я использую установщик ViseX во время выполнения сценария оболочки, который не работает как root.

Это яблочный скрипт, который я использую (спасибо regulus6633 за яблочный пирог):

set theFile to "myscriptname.sh"

-- launch the application with admin privileges and get the pid of it
set thePID to (do shell script "/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal > /dev/null 2>&1 & echo $!" with administrator privileges) as integer

-- get the bundle identifier of that pid so we can do something with the application
delay 0.2
tell application "System Events"
 set theProcess to first process whose unix id is thePID
 set bi to bundle identifier of theProcess
end tell

-- runs the Terminal with the shellscript
set theFileAlias to (POSIX file theFile) as alias
tell application id bi
 activate
 open theFileAlias
end tell

Ответы [ 2 ]

3 голосов
/ 14 апреля 2012

К сожалению, with administrator privileges означает «как корень». В Mac OS X, как и в большинстве других производных от Unix операционных систем, нет способа получить привилегии администратора как пользователь без полномочий root. Когда вы запускаете что-либо через sudo, он просто запускает команду от имени пользователя root.

Вам не нужно запускать все окно терминала с правами root. Просто запустите Terminal от имени обычного пользователя и скажите ему (через do script внутри блока tell application "Terminal") выполнить только нужную команду от имени пользователя root. Я не знаю, если do script принимает with administrator privileges, но если нет, вы всегда можете прикрепить sudo спереди.

0 голосов
/ 13 ноября 2015

Я нашел подход, чтобы добиться успеха с:

do shell script "sudo -H -u virtustilus /bin/bash -c \"/bin/bash -c '. ~/.bash_profile; /Users/vis/my_big_script.sh > /Users/vis/someLog.log 2>&1'\"" with administrator privileges

Что здесь происходит:

  • Запуск сценария оболочки с правами пользователя root (права администратора).
  • Измените пользователя на "virtustilus" (мой основной пользователь) и измените также домашний каталог (флаг -H).
  • Загрузка . ~/.bash_profile переменных среды (например, PATH).
  • Запустить скрипт my_big_script.sh с перенаправлением всего вывода в файл someLog.log.

Это работает (сейчас я использую его в приложении автоматизатора).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...