Чому я маю використовувати судо майже для всього?


64

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

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

Також я бачив, як деякі люди показують команди, для яких потрібні sudoпривілеї без sudo. Чи налаштована їх система таким чином, що sudoце не потрібно?


25
Вам потрібно використовувати sudoщо-небудь, пов’язане зі зміною системи, якщо ви просто працюєте над власними файлами / робочим столом, ви ні на кого не впливаєте, тому не потребуєте підвищених привілеїв. Якщо ви виконуєте привілейовані команди без sudo, ви, мабуть, вже супер користувач (тобто root), і це, як правило, менш доцільно, ніж використовувати sudo для конкретних загальносистемних завдань
Ерік Реноф

75
"установка програми з джерела ... все, що робить звичайний користувач" --- Я думаю, ви переоцінили технічні навички постійних користувачів.
Джонатан Каст

7
Ви використовуєте, sudoколи не слід? Звичайні команди користувача Unix повинні складатися здебільшого з cd, lsпереміщення, копіювання, видалення та редагування файлів, до яких вони мають доступ. Якщо ваші звичайні команди не складаються з цього, ви, ймовірно, не є звичайним користувачем Unix.
користувач530873

20
Невелика порада: Якщо ви робите щось, що вимагає sudo, але забули поставити sudo у вашій команді, ви можете використовувати sudo !!для повторного запуску останньої команди, яку ви набрали з sudo попереду.
асфальв

6
Ви не проводите більшу частину часу, використовуючи встановлене програмне забезпечення? Це не повинно включати судо. Якщо ні, то чому ви її встановлюєте?
OrangeDog

Відповіді:


75

Ви згадали про ці функції адміністрування системи

управління пакетами, редагування конфігураційних файлів, установка програми з джерела

як речі, які

все, що робить звичайний користувач

У типовій багатокористувацькій системі це не звичайні дії користувача; системний адміністратор буде хвилюватися з цього приводу. Звичайні користувачі (не "під привілеєм") можуть користуватися системою, не турбуючись про її обслуговування.

Так, у домашній системі вам доводиться керувати системою, а також користуватися нею.

Чи справді такі труднощі використовувати sudo? Пам’ятайте, що якщо це лише ваша система, немає жодної причини, чому ви не можете або потрапити в rootоболонку ( sudo -s- див. Цей пост для огляду різних способів отримання кореневої оболонки) та / або налаштувати sudoне вимагати отримання пароля.


47
немає жодної причини, чому ви не можете [...] налаштувати sudo, щоб не запросити пароль. Я б не рекомендував, що якщо ви запустите шкідливий скрипт, він зможе діяти як root у вашій системі.
AL

5
Якщо введення пароля sudo дратує вас настільки, що ви в основному автоматично пілотуєте введення пароля, це також не допоможе. Потрібно врівноважувати розум із безпекою. Я автопілот судо хоча б раз видалив основні шматки ОС.
Нельсон

33
Особисто я люблю sudo- це як перевірка здоровості.
Макс Вільямс

6
@MaxWilliams, так, це маленька чітка пластмасова кришка на великій червоній кнопці, яка запитує, а ти впевнений, що ти знаєш, що робиш?
KlaymenDK

15
@AL: Якщо я буду запускати невідомий сценарій, краще не бути зловмисним, або я накручений, чи не працює він sudo. На моєму персональному робочому столі важливі власні (некореневі) дані, а не коренева конфігурація машини.
jrw32982

31

Sudo / Root використовується, коли ви робите щось, що стандартний користувач не повинен робити для ризику пошкодження / зміни конфігурації системи таким чином, якби адміністратор системи зазвичай не дозволяв.

чи я керую пакетами, редагую конфігураційні файли, встановлюю програму з джерела чи що у вас є.

Всі вони технічно є адміністративними функціями і можуть різко пошкодити вашу систему, якщо буде зроблено щось неправильне. У корпоративному середовищі, як Sysadmin, це речі, які я НЕ дозволяв би моєму користувачеві без моїх явних знань, отже, судо.

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

Він дуже схожий на UACвікна, адже насправді там виникла ідея Windows UAC.

Цитата, яку ви отримуєте при першому використанні судо, дуже підходить і дуже важлива:

Ми віримо, що ви отримали звичайну лекцію від місцевого системного адміністратора. Зазвичай зводиться до цих трьох речей:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

Особливо №2, подумайте, перш ніж вводити текст. Це важлива причина, коли судо існує, коли ви вводите команду, і вона відбивається назад "повинна виконувати корінь для виконання цієї дії", вона змушує вас зупинитися і думати про те, що ви насправді робите.


19

Також я бачив, як деякі люди показують команди, для яких потрібні sudoпривілеї без sudo. Чи налаштована їх система таким чином, що sudoце не потрібно?

Ви повинні виконувати ці команди як суперпользователь, але не потрібно їх виконувати за допомогою sudo. Наприклад, замість цього можна використовувати suабо doas(заміну OpenBSD sudo), або ви можете просто увійти як root.

Тож якщо вони показують свої команди тут, не sudoвважаючи, що читач просто використає свій улюблений спосіб виконання цих команд як суперпользователь.
Це, звичайно, не означає, що вони можуть виконувати ці команди як звичайний користувач.


4
ви також можете скористатися sudo -iабо подібним, щоб отримати кореневу оболонку, а потім почати виконувати свої кореневі команди, не потрібно попередньо виконувати кожну з нихsudo
cas

2
Зазвичай кроки , які потрібно запустити , як корінь показаний з коренем швидкої , наприклад , # vi /etc/hostsзамість непривілейованої рядки $ vi /etc/hosts(Bash буде дотримуватися угоди , якщо ви використовуєте \$в PS1)
Герт ван ден Берг

16

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

Інший аспект - більш чітке управління привілеями. Подумайте про make; sudo make installте, make; make installяк ви робите як root. Багато речей може піти не так make. Погано налаштований інструмент може спробувати замінити важливий системний файл, «очистити» /libзамість поточного каталогу, споживати всю доступну оперативну пам’ять та повісити систему тощо. make installЦе невелика проста дія з набагато меншою ймовірністю фатальної помилки.


1
І навіть якщо кореневий пароль налаштовано, він дозволяє надати користувачеві доступ до команд, що вимагають привілеїв root, не даючи їм корінний пароль, а це означає, що якщо це сервер компанії і вони звільняються, вам потрібно лише відключити їх користувача , не змінюючи пароля root.
Герт ван ден Берг

13

Справа в тому, що історично ця система дійсно призначена для спільного використання декількома користувачами, які просто входять у систему, роблять деякі матеріали, а потім виходять із системи. Таким чином, різниця між адміністратором і звичайним користувачем. Такі системи все ще існують в університетських лабораторіях, і ви різко відчуєте різницю, якщо використовуєте такі комп'ютери. Домашній ПК, на якому ви є єдиним користувачем, і, мабуть, також повинен діяти як адміністратор, це набагато пізніша розробка.


6
"Все ще існують в університетських лабораторіях" ... так, і кожна корпорація, орієнтована на технологію на планеті, і більшість також нетехнічних. І все-таки +1 за точну відмінність, що ОП, очевидно, відсутня і що більшість інших відповідачів не зазначили.
Wildcard

@Wildcard Lol впевнений. Просто поставте той приклад, який негайно вискочив у мене в голові.
xji

10

Комп'ютер - це інструмент. Спробуємо аналогію з іншим інструментом, скажімо, сковороду. Іноді вам доведеться подбати про свою сковороду. Наприклад, вам доведеться чистити його мильним посудом. Ви б сказали, що мильне блюдо - необхідний інгредієнт будь-якого рецепту, для якого ви використовуєте сковорідку? Ви ніколи не побачите "мило для посуду", вказане в якості інгредієнта в кулінарних книгах. Це потрібно, але підготовка інструменту - інша справа, тому кулінарні книги не згадують про це. Сковороду потрібно очистити, але це не для чого вона зроблена.

Це так само і для вашого комп’ютера. Це потрібно налаштувати і доглядати, але це не для чого він створений. Ви дбаєте про нього, налаштовуєте його, щоб він міг нормально працювати. Після цього ви зможете використовувати його не як системний адміністратор, а як користувач. Ось для чого він зроблений. Коли ви користувач, вам більше не потрібно судо . Просто скористайтеся інструментом, який ви заздалегідь підготували. Звичайно, час від часу вам доведеться користуватися кореневими привілеями, так само, як ви повинні чистити сковороду так часто, як ви використовуєте її для приготування.

Тож, не надто перебільшуючи, ми можемо сказати, що ніколи не потрібен sudo (або корінний пароль) для використання комп'ютера. Тільки для підготовки комп'ютера.


2
Прекрасна аналогія, але іноді вам потрібно це мило, щоб вийняти з каструлі кілька неприємних обвуглених залишків, перш ніж посмажити яєчню, тобто обидва речі досить легко з’єднатись. З комп'ютером, який у вас є, ви можете «мити» / «обсмажувати» його майже одразу, sudoабо ви просто ходите майстра-шеф-кухаря та займаєтесь su.
Armfoot

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

6

Б'юсь об заклад, тому що ви використовуєте програмне забезпечення GUI для всіх, крім системних адміністративних завдань, або ви говорите про сервери Linux, і в такому випадку найбільше доступу, звичайно, матиме системне адміністрування. Тому може здатися, що взагалі потрібно щось робити в оболонці sudo.

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

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

Я не думаю, що це налаштування sudoне вимагати пароля. Це дозволяє занадто легко зіпсувати всю вашу систему за допомогою однієї помилкової команди або зловмисного сценарію.

Якщо вам потрібно постійно виконувати завдання, які абсолютно потребують root, чому б не залишити стійку sudo -sкореневу оболонку, що працює у вікні терміналу? Тоді він буде доступний без необхідності вводити пароль, і його не так просто використати випадково. Я навіть встановив, що мої оболонки підказують бути яскраво-червоними, коли в кореневій оболонці.


5

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

Під прикметником, що стосується всього цього, є те, що вони є загальносистемними або глобальними змінами. Ви повинні розглядати джерела Unix як багатокористувацьку систему 1, де кілька користувачів віддалено використовували одну і ту ж установку. Не було б сенсу для одного користувача непростого дозволити змінювати глобальні налаштування для всіх користувачів. Це було, систематичне, корінне, привілей та відповідальність.

У налаштуваннях для багатьох користувачів у вас є попередньо встановлене програмне забезпечення та їх конфігурація в межах системи відповідно /usrта /etcвідповідно. Дотик до цих місць потребує кореневих прав. Але оскільки програмне забезпечення Unix написано з урахуванням багато користувачів, ви можете збирати та встановлювати програмне забезпечення під $HOME каталогом 2 та мати власні файли конфігурації під своїм домом, де ви можете вільно редагувати файли, не будучи суперкористувачем.

На додаток до встановлення власного програмного забезпечення вдома, більшість програмного забезпечення для всієї системи буде читати конфігурацію для користувача $HOMEправоруч після того, як вони вперше прочитали конфігурацію /etc. Це дозволяє вам налаштувати більшість нічого, навіть коли-небудь не збираючись root.

Завдяки домашньому ПК в одному головному користувальницькому налаштуваннях ви можете використовувати sudoі викорінювати свій шлях до речей, які вам подобаються. Але звичайно не торкатися конфігурації програми, /etcа натомість завжди надавати конфігурацію для користувача в домашніх умовах. Таким чином, ви можете дозволити менеджеру пакунків скидати конфігурації для всієї системи під час оновлення. Встановлення нового програмного забезпечення в цілому в системі для користувачів досить добре; дистрибутивні пакети не передбачають альтернатив, тому це простий вихід.

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

Якщо у вас є файли даних, що зберігаються поза вами $HOME, не соромтесь chownабо chgrpдо каталогів свого імені, щоб ви могли отримати доступ до файлів без sudo.

[1] (злегка іронічно, оскільки Unix мав бути версією "єдиного користувача" операційної системи Multics)

[2] (якщо система дозволяє це, не встановлюючи домашні розділи як noexec)


2

У різновидах багатокористувацьких систем, для яких був розроблений UNIX (і, за походженням, Linux), це не звичайні дії користувача . Системний адміністратор може виконувати їх, але не типових користувачів, і тому система просить переконатися, що sysadmin насправді хоче це зробити.

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

Чому це має значення? Оскільки «однокористувальницький» є неправильним: ви не єдиний користувач комп'ютера, навіть якщо ви могли б бути його єдиним людиною користувача . Навіть у типовій домашній інсталяції Linux багато програм створені для використання машини різними способами, часто імітуючи те, що може зробити людина, якби у них було часу та уваги: ​​резервні копії, оновлення, сканування зловмисного програмного забезпечення та подібно до. Здебільшого ці способи використання є абсолютно доброякісними, але навіть для деяких із них все-таки доцільно переконатися, що користувач дійсно хоче це зробити. І коли виникають ці випадки, саме це і sudoє. Комп'ютер просто перевіряється, щоб переконатися, що саме ви хочете зробити те, що хтось (можливо, ви, можливо, програма) сказав, що ви зробили. І це навіть не потрапляє у можливість зловмисного програмного забезпечення, яке ви, звичайно, не хочете маскувати під себе.


1

Це, мабуть, не так часто, як представлене, але, як правило, трапляється тоді, коли для досягнення свого результату щось випадкове внутрішньо вимагає набагато більш загального привілейованого системного виклику:

  • Від'єднайте та несіть USB-накопичувач. umountце серйозна команда, оскільки за допомогою неї можна відкрутити багато речей.
  • Підключіться до локальної бездротової мережі. Нічого надзвичайного, але конфігурація мережі ( ifupтощо) призначена лише для суперпользователя.
  • Програми, що самостійно оновлюються, які відмовляються запускатись, якщо не оновлюються. Оновлення = установка, і це може встановити багато речей, включаючи речі, які ви не хочете.

Системи, як правило, розвиваються для зменшення кількості таких випадків. USB-накопичувачі зараз налаштовані користувачем, а мережі - для підключення користувачів. Але не завжди було так.


0

Припущення: це ваша система та ваші дані.

Вам просто потрібно зважити ризик випадкового стирання даних або примноження вашої ОС порівняно з простотою виконувати завдання, не вводячи sudoкожен раз.

Я регулярно входжу в систему і працюю як root на своїх домашніх серверах, оскільки я можу легше.

Вам скажуть, що ви можете запустити ядерну зброю, якщо ви не будете ходити на сакра-святого, sudoале реальність така, що сьогодні люди мають rootповноваження (*) на безлічі пристроїв (телевізора, телефону, тостера, вашої Windows (як ви згадали)). Тут Linux не відрізняється, хоча багато хто любить думати інакше.

BTW UACне була змодельована після того, sudoяк її чоловіча роль (окрім того, щоб зробити ваше життя нещасним), щоб переконатися, що ви побачите, коли зловмисне програмне забезпечення хоче робити щось від вашого імені.

(*) rootПовноваження визначаються як здатність видаляти важливі дані. Застосування "З великою силою приходять великі проблеми" (або що б там не було)

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


1
кореневі повноваження - це не здатність виводити важливі дані. Ви завжди можете rm -rf ~/без особливих дозволів. З іншого боку, ви не можете цеглити свій мобільний телефон чи телевізор, не спершу вкорінюючи його.
Дмитро Григор’єв

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

1
Дійсно, називати це "кореневою силою" - це неправильне використання. Слово "root" вже перевантажено, щоб означати щонайменше три різні речі (користувач root, / каталог та / root каталог), і додавати ще одне не корисно. На машині для одного користувача, навіть якщо непривілейований користувач вже може видаляти власні файли, його нездатність виконувати певні адміністративні завдання без використання sudo все ще захищає його від різних поганих речей.
Monty Harder

1
Ваша телевізійна аналогія не є хорошою. Видалення налаштувань телевізора - це схоже на стирання файлів налаштувань користувача в Linux, але це, як правило, просто змушує систему працювати згідно з певним набором для цього користувача і зазвичай не завдає шкоди системі. Root дозволяє вам змінювати саму систему - на телевізорі це було б як зміна мікропрограмного забезпечення, і в цьому випадку ви можете порушити її здатність реально працювати.
JBentley

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

0

На захист людини, яка написала початкове запитання, у мене було те саме питання в минулі роки, але я застосував інший підхід.

Більшість відповідей тут можна просто відтворити на циклі, тому що всі вони продовжують наголошувати на тому ж самому пункті щодо sudo та root. Дозвольте додати іншу точку зору до цієї теми:

Те, як я навчився Unix AND Linux всередині, був за допомогою одного з моїх комп'ютерів як «морської свинки». Я б встановив SCO Linux, а згодом і Solaris, а потім Linux набагато пізніше, весь час радісно експериментуючи як root, щоб я міг читати та / або досліджувати ієрархію каталогів та всі файли з необмеженим доступом, а також створювати "звичайні облікові записи користувачів" у себе вдома -Вросла багатокористувацька скринька, хоча я був єдиним користувачем. І я радий, що зробив це саме так. Я так багато дізнався про "філософію Unix" і те, як Unix мав використовуватись під час експериментів.

У мене вибух дізнався про безпеку, а також запустив небезпечні команди, ввівши rm -rf / * в терміналі як root. (НЕ РОБИТИ ЦЕ! ЦЕ СИСТЕМУ БУДЕ ВАША СИСТЕМА !!) Я робив такі дії, як ця та багато інших команд, просто щоб побачити, що буде в реальному часі. Я робив такі речі, знаючи наслідки, але все ще багато чого навчився, роблячи це. Я використовував SCO Unix LONG ще до того, як мережа існувала (так, я така стара!), І експериментувати таким чином було безцінним для мого навчання.

Тож, про що я говорю, якщо ви не заперечуєте робити перевстановлення, коли щось піде не так, використовуйте su або login як корінь все, що вам потрібно, і налаштувати / зламати! Ви багато чого навчитесь пекла.

Пам’ятайте лише, що поради, які тут багато разів повторювались, були повторені з поважної причини: протоколи найкращої практики еволюціонували протягом десятиліть, коли есес розвивався, і ви ДОЛЖЕ звернути на них увагу, навіть як домашній / єдиний користувач вашої системи . Тим самим хороша гігієна / звички систематину стануть для вас другою природою.

Просто трохи їжі для роздумів на тему су і судо. Щасливий злом!

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