Запуск скрипта с правами администратора в 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