Чому я не маю пароль для "su"? Проблеми з "судо"


34

Я встановив Ubuntu за допомогою GUI, давши собі пароль і все. Я не дуже хитро пам’ятаю процес. Однак мене хвилює те, що я не знаю наступного пароля:

$ su
Password: <the only password I've ever created on this machine>
su: Authentication failure

Я просто не знаю, що робити. Я не в біді, але просто хочу знати, що тут відбувається. Я також можу заблокувати себе з каталогів:

starkers@ubuntu:~/Desktop$ mkdir foobs
starkers@ubuntu:~/Desktop$ sudo chmod 777 -R foobs
sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700
[sudo] password for starkers: <the only password I've ever created on this machine> 
starkers@ubuntu:~/Desktop$ cd foobs
bash: cd: foobs: Permission denied

Я просто трохи розгублений. Як я можу замкнути себе таким чином? Я думаю sudo, що тут є ключовою командою. Але я роблю foobsфайл настільки відкритим, наскільки це можливо, через chmod, так чому він мене блокує?


6
Ви майже ніколи не повинні робити цього chmod -R 777 whatever, якщо ви не хочете викликати величезний ризик для безпеки.

1
@BroSlow Дякую за верх. Поза цим питанням, але як би один набір читав привілеї для запису в каталог в безпеку? 666?
Старкерс

1
Однозначно краще, але залежить від того, що ви намагаєтеся зробити. наприклад, чи дійсно вам потрібні всі користувачі, щоб мати доступ до всього. Якщо ні, ви можете зробити щось на кшталт 644 (читати лише для всіх, крім вас). І взагалі, я був би дуже обережний, коли робив рекурсивний характер, chmodщо це лише зміна файлів, які ви задумали.

1
@broslow Ви високі? 666 - це 1) все ще доступний для запису в світі і, таким чином, такий же ступінь ризику для безпеки, і 2) видаляє виконуваний біт, а це означає, що він більше не зможе ввійти в цей каталог.
Шадур

@Starkers Справжня проблема безпеки, яку я бачу тут, полягає в тому, що з якоїсь божевільної причини /var/lib/sudoвін налаштований на світовий запис. Це не повинно відбуватися, і ви повинні спробувати з’ясувати, чому це сталося.
Шадур

Відповіді:


49

За замовчуванням rootобліковий запис суперпользователя ( ) вимкнено і не має пароля. Ви можете створити його, запустивши:

$ sudo passwd root

Після цього ви зможете увійти як root, запустивши suцей пароль.

Щодо chmodправильної команди, було б:

$ chmod 777 -R foobs

Ви також можете використовувати:

$ sudo -i

увійти як root за допомогою свого пароля (без створення пароля root, як описано вище).


4
@Oli Можливо, ви можете відредагувати своє запитання, щоб додати sudo su. Це також дає постійні права су на термінал.
пробудження

13
не користуйтеся sudo su, так як це буде накручувати навколишнє середовище і все зламається. замість цього використовувати sudo -i.
strugee

20
Не встановлюйте кореневий пароль. Ви НЕ встановили пароль адміністратора.
wchargin

4
chmod 777 майже завжди поганий (липкий біт вилучається; як використовується з / tmp). Ця відповідь є ризиком для безпеки. Плюс встановлення кореневого пароля - це не спосіб використання Ubuntu; знову запрошуючи ризик безпеки. Будь ласка, дотримуйтесь відповіді neon_overload.
Rinzwind

4
@WChargin Чому ви пропонуєте не мати кореневий обліковий запис / пароль? Мені справді цікаво, як користувач Archlinux.
Роб

67

1. Чому у вас немає пароля root

Хоча ви можете створити пароль для облікового запису суперпользователя, що дозволяє вам увійти як root з допомогою su, варто згадати, що це не звичайний спосіб робити з Ubuntu (або все частіше й іншими дистрибутивами). Ubuntu вирішив не наводити кореневих логін та пароль за замовчуванням з причини. Натомість установка Ubuntu за замовчуванням використовуватиметься sudoдля надання пільг суперпользователя. В установці Ubuntu за замовчуванням особі, яка встановила ОС, надається дозвіл "sudo" за замовчуванням.

Будь-хто з повним дозволом "судо" може виконати щось "як суперпользователь", попередньо очікуючи sudoна їх командування. Наприклад, для запуску apt-get dist-upgradeв якості суперпользователя ви можете використовувати:

sudo apt-get dist-upgrade

Ви побачите це використання судо майже де завгодно, коли ви прочитаєте навчальний посібник про Ubuntu в Інтернеті. Це альтернатива зробити це.

su
apt-get dist-upgrade
exit

За допомогою sudo ви заздалегідь вибираєте, які користувачі мають доступ до sudo. Не потрібно запам’ятовувати кореневий пароль, оскільки вони використовують власний пароль. Якщо у вас є декілька користувачів, ви можете відкликати доступ суперпользователя, просто видаливши їх дозвіл sudo, не потребуючи зміни кореневого пароля та повідомляти всіх про новий пароль. Ви навіть можете вибрати, які команди користувачеві дозволено виконувати за допомогою sudo, а які команди заборонені для цього користувача. І нарешті, якщо є порушення безпеки, в деяких випадках він може залишати кращий аудиторський слід, який показує, який обліковий запис користувача був порушений.

Судо полегшує виконання однієї команди з привілеями суперрусера. Завдяки цьому suви назавжди потрапляєте на оболонку суперрузера, яку потрібно вийти за допомогою exitабо logout. Це може призвести до того, що люди перебувають у оболонці суперрусера довше, ніж потрібно, лише тому, що це зручніше, ніж виходити з системи та знову пізніше.

З судо у вас все ще є можливість відкрити постійну (інтерактивну) оболонку суперрузера з командою:

sudo su

... і це все ще можна зробити без будь-якого кореневого пароля, оскільки sudoнадає пільги суперпользователя suкоманді.

І так само замість su -оболонки для входу можна використовувати sudo su -або її ярлик sudo -i.

Однак, виконуючи це, вам просто потрібно усвідомлювати, що ви виступаєте як супер-користувач для кожної команди. Це хороший принцип безпеки - не залишатися суперпользователем довше, ніж потрібно, аби лише зменшити можливість випадкового заподіяння певної шкоди системі (без цього ви можете лише пошкодити файли, якими володіє ваш користувач).

Для уточнення ви можете , якщо вирішите, надати користувачеві root пароль, що дозволяє входити в систему як корінь, як описано у відповіді @ Oli, якщо ви хочете робити щось саме так. Я просто хотів повідомити вам про конвенцію про перевагу Ubuntu, sudoа також повідомити, що існує альтернатива.


2. Проблеми з вашою командою chmod 777 -R

Ваше запитання також має другу частину до нього: ваші проблеми з командою sudo chmod 777 -R foobs.

По-перше, наступне попередження вказує на потенційно серйозну проблему безпеки на вашому пристрої:

sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700

Це означає, що на певному етапі ви налаштувались /var/lib/sudoна світовий запис. Я думаю, ви зробили це на якомусь етапі, використовуючи таку команду sudo chmod 777 -R /. На жаль, зробивши це, ви, мабуть, значно зламали всі дозволи файлів у вашій системі. Навряд чи це буде єдиний важливий системний файл, дозволи якого були змінені на світовий доступ. По суті, у вас зараз легко зламану систему, і єдиний простий спосіб її повернути - це повторна інсталяція.

По-друге, команда, яку ви використовували:

sudo chmod 777 -R foobs

Під час маніпулювання файлами у вашому домашньому каталозі, у цьому випадку в ~/Desktop, вам не доведеться користуватися sudo. Усі файли, створені у вашому домашньому каталозі, у будь-якому випадку повинні бути змінені вами (а якщо ні, то відбувається щось смішне).

Крім того, вам слід повністю усвідомити наслідки зміни масових прав файлів масово, наприклад, робити це рекурсивно або на величезній кількості файлів. У цьому випадку ви ретельно змінюєте дозволи на файли, щоб вони були доступними для запису у всьому світі. Будь-який інший користувач або будь-яке програмне забезпечення серверного програмного забезпечення на пристрої може мати простий доступ для перезапису всіх цих файлів і каталогів.

Майже напевно, що chmod 777 -R [dir]це не підходяще рішення для будь-якої проблеми, яку ви намагалися вирішити (і як я вже згадував вище, є свідчення того, що ви це робили і для системних файлів в / var / lib, і я припускаю, що багато інших місця).

Кілька основних правил:

  • Якщо ви просто возилися зі своїми власними файлами у вашому домашньому каталозі, на робочому столі тощо, вам ніколи не потрібно використовувати sudoабо користуватися правами суперпользователя. Якщо ви це зробите, це попереджувальний знак, що ви робите щось не так.

  • Ніколи не слід вручну змінювати системні файли, що належать пакетам. Виняток: якщо ви не робите це конкретно способами, задокументованими цими пакетами, наприклад, змінивши їх конфігурацію в /etc. Це стосується також зміни дозволів на файли. Якщо підручник або спроба виправити проблему вимагає sudoабо прав супервайзера, а це не просто зміна конфігурації в / etc /, це попереджувальний знак, що ви робите щось не так.


Дивовижне пояснення .. Великі пальці вгору .. :)
Саурав Кумар

7
Я думаю, що "sudo -i" - це "офіційний" спосіб отримати кореневу оболонку, а не "sudo su"
Макс

3
Так, ви повинні використовувати sudo -iбільше sudo su.
Сет

sudo -i(або sudo su -) не є універсально кращими, а просто різними - вони запускають оболонку входу, яка імітує середовище входу кореневого користувача, яка виконує, наприклад, .profileфайл або .loginфайл кореневого користувача. Це краще, якщо ви хочете, щоб оточення в оболонці було більше схожим на оболонку входу в корінь, ніж на інтерактивну оболонку, яка трапляється з привілеями суперпользователя. Можливо, краще використовувати оболонки на основі входу, якщо використовуєш оболонку, але це суперечка: сенс відповіді полягає в тому, що Ubuntu в основному призначений для використання sudoдля запуску команд з привілеями суперрусера.
thomasrutter
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.