Запуск скрипта с правами администратора в OS X
-
21-09-2019 - |
Вопрос
Я изо всех сил старался найти решение с помощью множества скриптовых вопросов о переполнении стека и Интернете, но, похоже, я не могу найти то решение, которое мне нужно.
Что я хочу сделать, так это создать более автоматизированное и менее щелкающее решение для удаления всех мобильных кэшированных учетных записей пользователей в системе.Я входил в систему и вручную переходил к учетным записям пользователей и удалял пользователей по одному, нажимая кнопку "-", затем нажимая "Удалить немедленно" для пользовательских данных.Это работает, но отнимает много времени, а у меня есть дела поважнее, чем тратить свое время.Так что я знал, что должен быть способ сделать это с помощью сценария.
Я наткнулся на этот код:
for cuser in `dscl . -list /Users AuthenticationAuthority | grep LocalCachedUser | awk '{print $1}' | tr '/n' ' '`; do
dscl . -delete /Users/$cuser
done
Если я запускаю это в терминале, я получаю ошибки разрешения.Поэтому я решил, что мне нужно запустить его с помощью sudo.Итак, я начал изучать возможность создания AppleScripts для запуска скрипта, но, похоже, не могу найти правильный способ сделать это.
Есть какие-нибудь идеи?Кстати, я новичок в написании сценариев на Mac, поэтому, пожалуйста, прокомментируйте свой код, чтобы я знал, что происходит, и чтобы я не просто запускал какой-то код скрипта, не зная, что он будет делать.:)
Спасибо
Решение
Чтобы выполнить сценарий оболочки с sudo
или добавить права администратора with administrator privileges
до конца вашего do shell script
линия.Например:
do shell script "/path/to/script/file.sh" user name "adminusershortname" password "password" with administrator privileges
Вы можете найти больше в technote от 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 ALL=(ALL) NOPASSWD:ALL
Теперь имя_пользователя должно иметь возможность вводить sudo и не будет запрашиваться пароль.
Также обратите внимание, что visudo - это текстовый редактор, который отражает редактор vi и использует те же команды, что и vi.
У меня нет под рукой Mac, поэтому я не могу проверить, сработает ли это.
Попробуй убежать су -
Затем запускаем ваш скрипт.Если это сработает, попробуйте crontab -e
и добавление записи для запуска этого вашего скрипта.
Вы знакомы с crontab?хорошо, если нет, погуглите это, если понадобится.Но в принципе, чтобы запускать его каждый день в полночь, у вас было бы что-то вроде 0 * * * * / path/to/script