Як включити "sudo" в OSX 10.12 Sierra


2

Коли я набираю "sudo some_command", термінал показує:

sudo: unable to stat /etc/sudoers: Permission denied
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

моїм обліковим записом є обліковий запис адміністратора, а / etc / sudoers містить:

root        ALL = (ALL) ALL
%admin      ALL = (ALL) ALL

Як це виправити?


1
Додайте вихідні дані ls -l /etc/sudoers
nohillside

@patrix вихідний -r--r-----+ 1 root wheel 1563 Jan 11 10:42 /etc/sudoers
Desmond Chen

1
Uhh, ls -le /etc/sudoers і ls -led /etc а потім, будь ласка
nohillside

@patrix -rw-rw-r--+ 1 root wheel 1563 Jan 11 10:42 /etc/sudoers 0: group:admin allow read,write,append,readattr,writeattr,readextattr,writeextattr,readsecurity і lrwxr-xr-x@ 1 root wheel 11 Dec 10 21:13 /etc -> private/etc
Desmond Chen

Чи вона коли-небудь працювала? ACL здається трохи дивним (у мене немає цього файлу), але я не впевнений, що це викликає будь-які проблеми (і я неохоче спробувати його тут).
nohillside

Відповіді:


6

Відкрийте термінал і ввімкніть root за допомогою:

dsenableroot -u <your_admin_username> -p <your_password> -r <root_password> #choose some root password here 

Якщо пошкоджений sudoer, ви все одно не зможете sudo - але ви зможете su і відповідно виправити дозволи:

su #when asked afterwards enter the above <root_password>
chown root:wheel /etc/sudoers
chmod 440 /etc/sudoers
chmod -a "admin allow read,write,append,readattr,writeattr,readextattr,writeextatt‌​r,readsecurity" /etc/sudoers
exit

Назад в обліковому записі адміністратора вимкнути кореневу систему:

dsenableroot -d -u <your_admin_username> -p <your_password>

У разі, якщо вищенаведене не допоможе, знову ввімкніть обліковий запис root, виконуючи те ж, що й вище, logut вашого облікового запису, ввійдіть як root (так, дійсно):

Відкрийте термінал і введіть тип chmod g+x /, закрийте термін, logout і tada, sudo працює знову :) Ця проблема відбувається в основному, коли ви монтуєте свій / через linux у режимі rw (для hfsplus в режимі r / w використовуйте запобіжник і bindfs )


До речі admin Здається, ACL не завдає шкоди файлу sudoers!


2
Краще завантажитися в однокористувацький режим для цього не потрібно вмикати root
Mark

І що саме з єдиного входу користувача? Ви повинні знати, як переміщатися launchctl / diskarbitrioned (оскільки ви знаходитесь в ro монтувати) і робити mount -rw / і потім visudo це не вирішить.
PJJ

@mark тоді може бути варто іншої відповіді
nohillside

1
@PJJ OK Я сильно змінив вашу відповідь ;-) - але після другого dsenableroot рядка ви не повинні бути в змозі увійти в якості root. Ви або повинні бігти chmod g+x / у режимі su або ви повинні перемістити останнє речення перед другою лінією dsenableroot. Також: це не повинно бути необхідним у Сьєррі!
klanomath

Правда, правда, підконтрольна тому, що сподіваюся, що це не буде занадто заплутаним;) - більшість разів це chmod g+x / з h4x0rs плутають Дарвіна з linux і карта щасливо свої гіди над darwins розуміючи пізніше, що в darwin guids починаються від 500 замість 1000;)
PJJ

0

Ось кроки високого рівня:

$ dsenableroot -u <user-username> -p <your-user-password> -r <new-password-for-root>

Потім створіть резервну копію файлу sudoers і відредагуйте

$ su
Password:<your-new-root-password>
sh-3.2# cp /etc/sudoers /etc/sudoers.bak
sh-3.2# vi /etc/sudoers.bak
sh-3.2# cp /etc/sudoers.bak /etc/sudoers
sh-3.2# exit

Останній вимкнути кореневий доступ:

$ dsenableroot -d -u abdi -p <root-password>
dsenableroot:: ***Successfully disabled root user.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.