Як виправити sudo після “chmod -R 777 / usr / bin”?


15

Я увійшов chmod -R 777 /usr/binі зараз судо не працює.

Це говорить sudo must be setuid root.

Деякі поради в Інтернеті сказали виконувати chown root:root /usr/bin/sudo chmod 4755 /usr/bin/sudo.

При введенні chown root:root /usr/bin/sudoвін показує opened in readonly modeпомилку.


1
Ви повинні мати рут, щоб виконати ці команди

Манодж Кумар: А метод в моїй обороні (який ви позначений як загальноприйнятий) вирішити цю проблему для вас? Я переконався, що, як прокоментували Даміен Рош та Олі, цей метод насправді не працює після того, як команда успішно виконана. Мовляв , має бути налаштований корінь для роботи. (Я не впевнений, чому він використовує послугу polkit , але це так.) Однак, я думаю, я чув, що інші люди кажуть, що це спрацювало для них, що цікаво! Ви натискали Ctrl + C до завершення команди chmod? pkexecsudo chmod -R 777 /usr/binsudopkexec777
Елія Каган

Привіт. Цей метод насправді спрацював для мене після випадкового успішного запуску sudo chmod -R 777 /usr/bin, але лише після входу в rootобліковий запис.
iHowell

Відповіді:


10

Не зважаючи на статус, я зараз переконаний, що ця відповідь є неправильною . (Я сподіваюся, що незабаром це буде покращено, після консультацій з ОП щодо прийняття.) Я думаю, що я пригадую, що інші говорили, що це спрацювало, але я вважаю, що їхні проблеми були принаймні дещо іншими. Описаний тут метод залишається цінним у деяких ситуаціях, коли chmod -R 777 /usr/binпереривання з Ctrl+ Cабо іншим чином не завершено. Але як тільки це станеться, pkexecце теж не буде встановлено, і це не спрацює кращеsudo , як правильно сказали Деміен Рош та Олі.

У настільній системі Ubuntu встановлений PolicyKit , тому pkexecйого можна використовувати для відновлення зламаного sudoвиконуваного файлу або sudoersфайлу . Вам не потрібно завантажуватися в режим відновлення, і вам не потрібно завантажуватись з живого компакт-диска. Вам навіть не потрібно перезавантажувати.

У цьому випадку виконайте такі команди:

pkexec chown root:root /usr/bin/sudo
pkexec chmod 4755 /usr/bin/sudo

Дивіться це запитання для отримання додаткової інформації.


9
pkexec must be setuid root! Який кошмар!
Дамієн Рош

1
Як зазначає Демієн, проблема такого підходу pkexecзнаходиться в точно такому ж самому становищі, як і sudo. Він зазвичай налаштований і живе в ньому /usr/bin. Я перевірив це, і після цього це просто не працює chmod -R 777 /usr/bin.
Олі

@DamienRoche, Олі: Вибачте, що раніше не виправили цей шлях ! Ви обоє праві. Я не впевнений, чому pkexecмає бути встановлений root, щоб він працював (чи не він працює через демон polkit, як інші процеси, які не встановлені?), Але це потрібно для цього. Я прокоментував це питання, щоб побачити, чи може ОП (хто прийняв це) пролити світло на те, що, якщо що, є правильним чи корисним у цій відповіді. І я додав тимчасовий банер у верхню частину цієї публікації, щоб більше не вводити в оману. Якщо ця відповідь продовжує існувати, її вдосконалена форма, ймовірно, міститиме деяку інформацію, яка наразі є у цьому банері.
Елія Каган

Ви можете просто скористатися su, яка знаходиться під / bin
FliiFe

@FliiFe Для виправлення дозволів (або власності) на файли /usr/binпотрібні кореневі привілеї, однак ви не можете suвиконувати корінь у більшості систем Ubuntu, оскільки кореневі ввімкнення вимкнено за замовчуванням. В відміну від sudoі pkexec, коли ви використовуєте , suщоб отримати кореневої оболонки або запустити команду з правами адміністратора, ви повинні надати пароль користувача root, а не ваш власний. Але root не має пароля за замовчуванням в Ubuntu (що означає, що аутентифікація на основі пароля для root завжди буде невдалою, не те, що введення порожнього пароля спрацює). Докладніше див. У RootSudo .
Елія Каган

4

Навіть під час запуску з прямого CD / Pendrive, ви повинні префіксувати свою chmodкоманду sudo. Тож ваші кроки будуть такими:

  1. завантаження з живого компакт-диска / Pendrive
  2. перевірте, чи ваш диск вже був автоматизований (і куди його). Якщо ні, встановіть його (див. Нижче)
  3. використовувати sudo chmod 0755 <path>для налаштування дозволів

Як розібратися, де встановлений ваш диск: з вікна терміналу запустіть mount(без аргументів). Тут буде перераховано всі змонтовані пристрої. Перевірте, чи не typeперелічено - ви можете пропустити все, не використовуючи «реальну файлову систему» ​​(ваш диск, ймовірно, використовує або ext3, або ext4 - ви точно можете пропустити такі речі, як proc, sysfs тощо). Якщо щось здається багатообіцяючим (виглядає так /dev/sda1 on /media/sda1 type ext3), перевірте його вміст, ls /media/sda1щоб побачити, чи це так.

Якщо він не встановлений, ви можете перевірити /devзаписи, де міг би бути диск (використовуючи ls /dev/ |grep '/dev/sdдля перевірки наявних пристроїв; ваш диск повинен виглядати /dev/sdaX, /dev/sdbXабо подібне - з X числом). Порівняйте це зі списком встановлених пристроїв. Якщо його немає, спробуйте встановити його та перевірте його вміст (як показано вище). Щоб встановити його, спочатку створіть точку кріплення, наприклад sudo mkdir /mnt/mydisk, потім спробуйте встановити пристрій за допомогою mount /dev/sda1 /mnt/mydiskта перевірити його вміст за допомогою ls /mnt/mydisk.

Як тільки ви знайдете потрібний диск там, ви можете перейти до зміни дозволів на вашому usr dir : sudo chmod 0755 /mnt/mydisk/usr.

Тепер у вас все ще можуть виникнути проблеми, якщо ви спочатку виконували chmodкоманду рекурсивно, використовуючи -Rпараметр. У такому випадку ви можете спробувати виправити кожен запис вручну - або ви можете перейти безпосередньо до нового встановлення ...


Я спробував створити точку монтування, але я отримав помилку , яка прочитати точку монтування мнта / mydisk не існує в mydisk бути замінений деякими речами , і тільки для запису я писав mount /dev/sda /mnt/mydiskзroot@Ubuntu:/dev#
Vin

Ви зробили: а) створили цю точку монтажу (каталог) перед тим, як випустити команду mount (як описано), і b) подбали також про провідну косу рису? Спробуйте mkdir -p /mnt/mydisk && mount /dev/sda1 /mnt/mydisk(я не думаю, що у вас немає жодних розділів /dev/sda, тому ви, мабуть, також пропустили номер розділу. Переконайтесь, що ви вказали правильний пристрій (або змонтується помилка).
Izzy

1

Я думаю, що Мат правильно, ви повинні мати root, щоб додати біт до / usr / bin, але, звичайно, судо порушено. Якщо у вас є пароль root, ви можете використовувати це для входу як root, а потім виправити дозволи за допомогою наведеної вище команди. Якщо ви цього не зробите, (а я і не), мабуть, найкраще буде:

  • завантаження з живого компакт-диска Linux
  • вкоренитися там
  • змонтуйте перегородку вищевказаною системою
  • потім випряміть дозволи в цій файловій системі за допомогою терміналу.

Корінь - це завжди номер користувача 0, тому root у будь-якій системі може вносити зміни до кореневих файлів в інших файлових системах.


1

Я не маю багато знань. Але ці кроки вирішили мою проблему навіть без перезавантаження машини. Виконайте такі дії:

su root
<enter root password>
cd /usr
chmod -R 755 *

1
Вам не вистачає принаймні команди "cd". Якщо ви робите це так, ви робите "chmod" на домашній dir для root. Це погіршить ситуацію.
Rinzwind

thaks ... відредагував мою відповідь ... я був у папці / usr
Ману Мохан Теккедат

2
Це працює лише в тому випадку, якщо встановлено пароль root, що не є конфігурацією Ubuntu за замовчуванням.
Девід Фоерстер

1

Намагаючись встановити дозволи для моїх локальних сценаріїв, я зламав дозвіл sudo і помилково змінив право власності. Мені вдалося змінити право власності на sudo на root, зробивши наступне:

Крок 1: Перехід у режим відновлення ubuntu . Якщо ви не знаєте про процес, ви можете надіслати відповідь тут: /ubuntu//a/172346/223901

Крок 2: Опинившись у режимі відновлення, виберіть корінь - Відкрийте підказку кореневої оболонки

Крок 3: Виконайте наступні команди

mount -o remount,rw /
chown root:root /usr/bin/sudo
chmod 4755 /usr/bin/sudo
reboot

Зачекайте, поки ваша система завантажиться нормально, і ви побачите право власності на sudo назад до root.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.