Запуск скрипта с правами администратора в OS X

Я изо всех сил старался найти решение с помощью множества вопросов о сценариях, касающихся переполнения стека и Интернета, но, похоже, я не могу найти нужного мне решения.

То, что я хочу сделать, - это создать более автоматизированное и менее кликающее решение для удаления всех кэшированных учетных записей пользователей Mobile в системе. Я входил в систему и вручную заходил в учетные записи пользователей и удалял пользователей по одному, нажимая кнопку "-", затем нажимая "Немедленно удалить" для данных пользователя. Это работает, но занимает много времени, и у меня есть дела поважнее. Так что я знал, что должен быть способ сделать это с помощью сценария.

Я наткнулся на этот код:

for cuser in `dscl . -list /Users AuthenticationAuthority | grep LocalCachedUser | awk '{print $1}' | tr '/n' ' '`; do
    dscl . -delete /Users/$cuser
done

Если я запускаю это в терминале, я получаю ошибки разрешения. Поэтому я решил, что мне нужно запустить его с помощью sudo. Поэтому я начал изучать создание сценариев AppleScripts для запуска сценария, но я не могу найти правильный способ сделать это.

Есть идеи? Кстати, я новичок в написании сценариев для Mac, поэтому, пожалуйста, прокомментируйте свой код, чтобы я знал, что происходит, и поэтому я не просто запускаю код сценария, не зная, что он будет делать.:)

Спасибо

3 ответа

Решение

Чтобы выполнить сценарий оболочки с sudo или добавляются привилегии администратора with administrator privileges до конца вашего do shell script линия. Например:

do shell script "/path/to/script/file.sh" user name "adminusershortname" password "password" with administrator privileges

Вы можете найти больше на техно Apple, посвященной do shell script

Тем не менее, сохранение этого как сценария оболочки и запуск сценария оболочки с использованием sudo будет работать так же хорошо.

#! /bin/sh

for cuser in `/usr/bin/dscl . -list /Users AuthenticationAuthority | grep LocalCachedUser | awk '{print $1}' | tr '/n' ' '`; do
    /usr/bin/dscl . -delete /Users/$cuser
done

Сохраните, как, скажем, removeUser.sh, используйте chmod установить его как исполняемый (chmod 755 а затем запустить его (sudo ./removeUser.sh)

Вы можете сделать это, отредактировав файл sudoers вашей системы. Это позволит учетной записи, которую вы используете для запуска этого скрипта (через cron и т. Д.), Возможность запускать sudo без пароля.

Для редактирования файла sudoers вы используете visudo, но он должен запускаться с разрешения администратора. Пытаться:

$ sudo visudo

Добавьте строку, подобную следующей, в конец файла, заменив user_name на пользователя, который будет запускать ваш скрипт. Обратите внимание, используйте вкладки между каждым полем.

user_name    ALL=(ALL)     NOPASSWD:ALL

Теперь user_name должен иметь возможность вводить sudo и не будет запрашивать пароль.

Также обратите внимание, что visudo - это текстовый редактор, который отражает редактор vi и использует те же команды, что и vi.

У меня нет под рукой Mac, поэтому я не могу проверить, сработает ли это.

Попробуйте запустить su -

Затем запустите ваш скрипт. Если это работает, попробуйте crontab -e

и добавление записи для запуска вашего сценария.

Вы знакомы с crontab? хорошо, если не Google, если это необходимо. Но в основном, чтобы запускать его каждый день в полночь, вы должны иметь что-то вроде 0 * * * * /path/to/script

Смотрите: http://en.wikipedia.org/wiki/Cron

Другие вопросы по тегам