Комп'ютерні уроки

Використання sudo в Ubuntu для користувачів-початківців. Користуємося командами sudo su Параметри привілеїв груп

Sudo- це програма, яка дозволяє адміністраторам давати обмежені root права користувачам і вести журнал root активності. Базова філософія полягає в тому, щоб дати так мало прав, як це можливо, але при цьому дозволити людям нормально виконувати свої завдання. На відміну від команди su в тому, що користувач вводить пароль від свого облікового запису, а не пароль користувача root.

Sudo в Debian має п'ятнадцятихвилинний (можливо) тайм-аут після введення пароля. Це означає, що коли ви ввели пароль рута, то у вас є 15 хвилин протягом яких ви можете виконати наступну команду без введення пароля. Таймаут може бути негайно скинутий за допомогою команди sudo -k.

Встановлення sudo у Debian 7

aptitude install sudo

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

Параметри команди sudo

-k- дозволяє скинути таймаут до моменту, коли необхідно знову вводити пароль. Якщо вказати команду, яка може вимагати введення пароля, тайм-аут буде скинутий конкретно для цієї команди.
-h- буде виведено невелику підказку на стандартний вихід.
-V- Відобразиться версія sudo та плагінів. Якщо запустити від root, будуть виведені всі налаштування.
-g group - дозволяє задати від якої групи буде запущено команду.
-H- задає директорію, яка буде вказана у змінній оточенні HOME.
-i- Симулює початковий вхід. Якщо команда не вказана, то буде зроблено вхід до системи, таким чином можна зробити рутом замість використання sudo su.
-l[l]- якщо команда не вказана, то буде виведено список доступних команд для користувача (або користувача вказаного з параметром -U). Якщо вказана команда і доступна, то буде виведений повний шлях до команди і доступні параметри. Якщо команда не доступна, sudo закриється зі статусом 1. Якщо використовувати параметр -ll або вказати -l двічі, то буде використано більш докладний формат виведення.
-s- буде запущена оболонка, зазначена в змінній оточенні SHELL. Якщо вказана команда, вона буде передана виконання запущеної оболонці.
-U user- разом із параметром -l дозволяє відобразити привілеї певного користувача. Доступ до списків привілеїв за промовчанням є у root та користувачів з усіма привілеями (ALL).
-u user- Вказана команда буде запущена від імені вказаного користувача, а не від root.
-v- дозволяє продовжити таймаут на 15 хвилин або на той, який вказаний у sudoers), але не виконувати будь-які команди.

Тут вказано більшість доступних параметрів, але не все. Щоб переглянути повний список, використовуйте команду man sudo.

Налаштування sudo у Debian 7

Рекомендується всі налаштування користувача задавати у файлах в директорії /etc/sudoers.d, а не в основному файлі /etc/sudoers. Тобто можна створити файл із будь-якою назвою в директорії /etc/sudoers.dі вже в ньому перерахувати необхідні налаштування.

Файл /etc/sudoersрекомендується правити за допомогою утиліти visudo, оскільки вона блокує файл та здійснює перевірку правильності написання директив під час закриття. visudoвикористовує текстовий редактор за умовчанням, який можна перевизначити в sudoersдирективою виду:

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

Як працює sudo?

Перед тим, як переходити до налаштування доступу до утиліти sudo, давайте розглянемо як вона працює. У Linux є два способи отримати права адміністратора. Ви можете перейти на користувача root за допомогою команди su або можете передати у параметрі потрібну команду утиліти sudo, яка виконає її з правами адміністратора. Причому другий спосіб краще, тому що ви не забудете, що використовуєте права root і не наробите нічого зайвого.
Ім'я команди означає substitute user doабо super user do.Утиліта дозволяє запускати програми від імені іншого користувача, але найчастіше від імені кореневого. Утиліта була розроблена ще 1980 року Бобом Когшелом та Кліффом Спенсером. За цей час змінилося багато розробників та було додано багато функцій.
Працює sudo завдяки прапору доступу SUID. Якщо цей прапор встановлений для програми, то вона виконується не від імені користувача, який її запустив, а від імені власника, враховуючи що файл sudo належить, то утиліта виконується від імені root. Потім вона читає свої налаштування, запитує пароль користувача і вирішує, чи можна йому дозволяти виконання команд від імені адміністратора. Якщо так, то виконується передана у параметрі команда.
Тепер, коли ви знаєте теорію, розглянемо як налаштувати sudo в Linux.

Налаштування sudo в Linux

Усі параметри sudo знаходяться у файлі /etc/sudores. Тут можна налаштувати багато параметрів, починаючи від кого буде дозволено виконувати команди від імені суперкористувача і закінчуючи обмеженням набору доступних команд.
Щоб відкрити файл для редагування, наберіть таку команду від імені суперкористувача:

Ви також можете вказати текстовий редактор, в якому ви хочете редагувати файл налаштування:

# EDITOR = nano visudo

Далі ми розглянемо найцікавіші налаштування, які можна задати в цьому файлі. Але спочатку розглянемо основний синтаксис файлу. Він складається з двох типів рядків, це псевдоніми, які дозволяють створювати списки користувачів та прапорів, а також самі правила, які задають як поводитиметься команда sudo. Синтаксис аліасів виглядає так:
тип ім'я_аліасу = елемент1, елемент2, елемент3
Тип вказує якого типу потрібно створити аліс, ім'я - ім'я, яке буде використано, а список елементів - ті елементи, які будуть матися на увазі при зверненні до цього імені.
Опис дозволів для користувачів має трохи інший синтаксис:
користувач хост = (інший_користувач:група)команди
Користувач вказує користувача або групу, для яких ми створюємо правило, хост – комп'ютер, для якого діятиме це правило. Інший користувач - у вигляді якого користувача перший може виконувати команди, і останнє - дозволені команди. Замість будь-якого з параметрів можна використовувати аліас. А тепер налаштування sudo у Debian та інших дистрибутивах.

Основні параметри

Аліас Defaults дозволяє встановити стандартні параметри для роботи утиліти, їх ми і розглянемо в цьому розділі. Починається такий аліас зі слова Defaults, далі йде ім'я прапора. Якщо перед ім'ям є символ!, це означає, що прапор потрібно ввімкнути, інакше вимкнути:
Вимикаємо вступ при першому використанні:

Defaults !lecture


Суперкористувач не може виконувати sudo:

Defaults !root_sudo



Тепер якщо ви спробуєте виконати sudo sudo нічого не спрацює:


Змінювати домашню директорію для цільового користувача, за замовчуванням залишається папка поточного користувача як домашня директорія:

Defaults set_home



Зберігати список груп поточного користувача:

Defaults !preserve_groups



Запитувати пароль суперкористувача замість пароля користувача:



Далі розглянемо змінні, яким можна задати значення, щоб встановити потрібні налаштування:
Задати кількість спроб введення пароля перед тим, як sudo припинить роботу, за замовчуванням - 3:

Defaults passwd_tries=5





Кількість хвилин, яке пройде перед тим, як sudo запитуватиме пароль знову, за замовчуванням 5. Якщо встановити значення в 0, то пароль запитуватиметься завжди, незалежно від того як давно ви використовували утиліту:

Defaults timestamp_timeout=10



Наступний параметр задає кількість хвилин, поки sudo чекатиме повторного введення пароля при неправильному введенні:

Defaults passwd_timeout=10



Ви можете змінити повідомлення, яке буде виводитись при запиті пароля:

Defaults passprompt="Ваш пароль:"


Можна вказати іншого користувача, не root, від якого будуть виконуватись всі команди, для цього використовуйте:

Defaults runas_default="користувач"

Ви можете записувати в лог всі спроби підключення до sudo:

Defaults logfile=/var/log/sudo



Потім пробуємо перевірити роботу лога:

$ sudo cat /var/log/sudo



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

Налаштування користувачів sudo

Ми вже розглядали вище синтаксис налаштування дій для користувачів, тут все складніше, ніж із псевдонімами, але розібратися можна. Наприклад, дозволимо будь-якому користувачеві використовувати sudo, від будь-якого хоста і виконувати будь-які команди:

ALL ALL = (ALL) ALL



Така команда дуже небезпечна, вона дозволяє всім і все. Перше ALL – дозволити всім користувачам, друге ALL – для всіх хостів, третє ALL – дозволити вхід під будь-яким користувачем і четверте – дозволити виконувати будь-яку команду. Але куди частіше використовується інша конструкція:

%wheel ALL = (ALL) ALL


Означає те саме, що й попереднє, тільки тут ми дозволяємо використовувати sudo не всім користувачам, а лише тим, які складаються в групі wheel.

%wheel ALL = (root) ALL

Тут ми обмежили можливий вибір користувачів тільки користувачем root. Також можна вказати групу користувача, від якого він може виконувати команди:

%wheel ALL = (root:admins) ALL



Це означає, що можна виконати команду від імені root або іншого користувача групи admins. Ще ми можемо вказати команди, які може виконувати користувач. Наприклад:
  • Runas_Alias- псевдонім користувачів, від імені яких виконуватимуться команди;
  • Host_Alias- псевдонім хоста;
  • Cmnd_Alias- псевдонім команд;
  • Наприклад, створимо чотири псевдоніми і застосуємо їх у нашому правилі:

    User_Alias ​​Users = user1,user2,user3
    Runas_Alias ​​Admins = root,admin
    Host_Alias ​​Hosts = host1, host2
    Cmd_Alias ​​Cmds = /bin/mount,/bin/umount

    Users Hosts = (Admins) Cmds

    Це означає, що користувачі зі списку Users зможуть виконувати команди Cmds від імені користувачів Amdins на хостах Hosts.
    Ще залишилося сказати кілька слів про прапори. Прапор NOPASSWD говорить, що не потрібно запитувати пароль під час виконання цього правила. Наприклад, дозволити всім користувачам виконувати команду mount із sudo без пароля:

    ALL ALL = (root) NOPASSWD: /bin/mount

    Також можна заборонити виконувати саме цю команду взагалі за допомогою прапора NOEXEC:

    ALL ALL = (root) NOEXEC /bin/mount

    Ви можете перевірити, чи правильно було налаштовано файл /etc/sudores і переглянути всі створені правила за допомогою команди:


    Тут відображено всі встановлені прапори та налаштування, а також повноваження користувача.

    Висновки

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

    Будучи Linux адміністратором, я завжди використовував і sudo, і su. І системному адміністратору дуже важливо, щоб ви знали різницю між ними. Для тих, хто не має спільного уявлення про різницю між цими двома або завжди плутає їх - ось список з 12 Q&A (питань та відповідей), які спрямовані, щоб допомогти вам розібратися в тонкощах sudo та su.

    ПРИМІТКА- Ця стаття є специфічною лише для Ubuntu. Хоча деякі відомості можуть бути застосовні до більшості популярних дистрибутивів.

    Sudo vs Su

    Ця серія запитань та відповідей має прояснити деякі особливості sudo vs su для багатьох користувачів Ubuntu.

    Q1. Як використовуються sudo та su? У чому різниця між ними?

    Відповідь.Sudo використовується для запуску тієї чи іншої команди з роздільною здатністю кореня. Цікаво те, що коли ви використовуєте sudoДля певної команди система запросить у вас пароль поточного користувача. Після введення пароля команда запускається з привілеями суперкористувача.

    Ось приклад:

    $ apt-get install skype E: Ви не можете відкрити lock file /var/lib/dpkg/lock - Open (13: Permission denied) E: Неможливо підключити керівну службу (/var/lib/dpkg/), будь-яка root ? $ sudo apt-get install skype password for mylinuxbook: Reading package lists.

    Як бачите, спочатку я спробував встановити Skype, використовуючи команду apt-get, але я отримав permission denied error. Тоді я використав sudo разом з такою ж системою команд та системою пароля для користувача mylinuxbook. Після введення правильного пароля команда виконана успішно.

    З іншого боку, su використовується для перемикання будь-якого користувача. Встановлений пароль відповідного користувача увімкнено. Якщо su використовується без опцій, відбувається перехід до кореневого облікового запису користувача. У цьому випадку система запитує пароль суперкористувача.

    Ось приклад:

    $ su mylinuxbook Password: mylinuxbook@mylinuxbook-Inspiron-1525:~$

    У наведеному вище прикладі я використав suдля перемикання на обліковий запис користувача mylinuxbook та після введення пароля для mylinuxbook, я зміг зробити це.

    Ось ще один приклад:

    $ su Password: su: Authentication failure

    У наведеному вище прикладі, я виконав на su, щоб включити кореневі права обліковий запис звичайному користувачеві, але він не міг, тому що у мене неналаштований пароль суперкористувача. У дистрибутивах, таких як Ubuntu, паролі для користувача не налаштовані за замовчуванням. Як тільки його налаштують, ви можете використовувати цей пароль.

    Q2. Що робити, якщо я не хочу налаштовувати пароль адміністратора в моїй Ubuntu, але все ж таки хочу переключитися на суперкористувача?

    Відповідь. У цьому випадку ви можете спробувати команду " sudo su". Ось приклад:

    $ sudo su password for mylinuxbook: root@mylinuxbook-Inspiron-1525:/home/mylinuxbook#

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

    Q3. Що робити, якщо я хочу використовувати su для переходу до інших облікових записів користувачів, але не хочу пам'ятати кожного та кожного пароля користувача?

    Відповідь. Ну, у такому разі, просто використовуйте команду su, введіть пароль адміністратора та перейдіть на обліковий запис. Звідси, використовуючи su, можна перейти на будь-який обліковий запис користувача без використання паролів.

    Q4. Якщо sudo використовується, щоб виконати щось із привілеями суперкористувача, тоді чому потрібен пароль поточного користувача, а не пароль суперкористувача?

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

    Тепер постає питання про sudoers. Як стати користувачем sudoer? Користувач може стати sudoer, якщо його додали до групи sudo. Ось приклад:

    $ sudo adduser sudo

    Просто замініть фактичне ім'я користувача для облікового запису. Зверніть увагу, що раніше (до Ubuntu 12.04) група мала називатися adminАле зараз це не обов'язково.

    Ви можете використати команду " group", щоб перевірити всі групи, в яких є цей користувач. Ось приклад:

    $ groups mylinuxbook mylinuxbook: mylinuxbook adm cdrom sudo dip plugdev lpadmin sambashare

    Таким чином, ви бачите, що користувач " mylinuxbookвходить до складу всіх цих груп, включаючи групи sudo, і, отже, sudoer.

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

    Відповідь. Ubuntu пам'ятає пароль для sudo близько 15 хвилин. Це означає, що як тільки ви використовували sudo для виконання команди, система не запитуватиме пароль, якщо ви запускаєте інші команди, які вимагають привілеїв суперкористувача для запуску. Хоча вам доведеться використовувати " sudoперед кожною командою.

    Q6. Які переваги sudo над su?

    Відповідь. Sudo має багато переваг у порівнянні з su.

    Ось список:

  • Sudo гарантує, що привілеї існують для конкретної команди (або протягом певного періоду часу), а не для всієї сесії, оскільки це може призвести до випадкового зловживання привілеями суперкористувача.
  • Ви можете використовувати sudo, щоб обмежити права користувача. Це корисно, коли ви не хочете, щоб користувач мав контроль над усіма правами суперкористувача, працюючи з suda.
  • Існує журнал журналу (auth.log), який підтримується для кожного sudoer. Цей файл містить інформацію про команди, які були виконані за допомогою sudo, час їх виконання. Це допомагає адміністратору відстежувати навіть довірених користувачів (sudoers).
  • Найголовніша перевага в тому, що для входу в suda потрібен власний пароль користувача, а не пароль користувача. Це допомагає зберігати особистий кореневий пароль і немає необхідності змінювати його навіть тоді, коли користувач (sudoer) йде.
  • Q7. Будь-який користувач може виконувати операції sudo?

    Відповідь.Ні, тільки довірені користувачі або sudoers можуть виконувати операції sudo. Ось офіційна сторінка , яка описує, як і що може робити користувач sudoer.

    Q8. Я цікавлюсь su. Як я можу налаштувати використання su таким чином, щоб досягти функціональність, аналогічну suda?

    Відповідь. Якщо ви працюєте з su, це означає, що у вас вже є пароль суперкористувача. Досягнення функціональності, аналогічної sudo, тобто. для запуску тільки однієї команди з привілеями суперкористувача використанням su, все, що вам потрібно використовувати опцію -cвід команди su.

    Ось приклад:

    $ su -c "apt-get install skype" Password:

    Просто введіть пароль, і тільки ця команда працюватиме з привілеями суперкористувача. Хоча це так само, як sudo, але з тією різницею, що вам потрібно ввести пароль суперкористувача замість пароля поточного користувача.

    Q9. Я працюю з sudo. Як я можу налаштувати використання sudo таким чином, щоб досягти своєї функціональності аналогічне su?

    Відповідь.Для досягнення функціональності su через sudo, спробуйте опцію -iкоманди sudo.

    Ось приклад:

    $ sudo -i password for mylinuxbook: root@mylinuxbook-Inspiron-1525:~#

    Ви бачите, що за допомогою " sudo -i", був виконаний перехід на кореневий обліковий запис, хоча пароль, введений для поточного користувача (mylinuxbook в даному випадку).

    Q10. Кореневий пароль мого облікового запису ще не активовано. Чи можу я використовувати sudo, щоб активувати пароль користувача?

    Відповідь.Для активації пароля для суперкористувача ви можете використовувати команду passwdнаступним чином:

    $ sudo passwd root

    Ця команда вимагає права суперкористувача, так що вам доведеться використати sudo.

    Q12. Чи можу я використати sudo, щоб надати особливі права користувачам?

    Відповідь.Конфігураційний файл для sudo - /etc/sudoers. Його не можна редагувати вручну за допомогою редактора. Для цього рекомендується використовувати команду visudo.

    Ось точна команда:

    $sudo visudo

    і ось що ви отримаєте:

    Ця команда відкриє тимчасовий файл /etc/sudoers.tmp в редакторі нано для редагування. Visudo переконується, що немає жодного конфлікту, коли кілька екземплярів одного файлу вдається відредагувати.

    Щоб зрозуміти, як надати обмежені права, зрозуміти дизайн цього конфігураційного файлу, .

    У будь-якій Linux-системі обов'язково є один привілейований користувач – root. Цей користувач має право на виконання будь-яких дій, видалення будь-яких файлів та зміну будь-яких параметрів. Якось обмежити свободу дій root практично неможливо. З іншого боку, решта користувачів системи зазвичай не мають більшості необхідних прав, наприклад, прав на встановлення програм, оскільки це є адміністративною операцією, права на яку є тільки у root. Ще однією поширеною операцією, доступною тільки суперкористувачу, є копіювання та зміна файлів у системних папках, куди звичайний користувач доступу не має.

    Раніше ця проблема вирішувалася досить просто: при володінні паролем root можна було зайти в систему під його обліковим записом або тимчасово отримати його права, використовуючи команду su. Потім виконати всі необхідні операції та повернутися назад під звичайного користувача. У принципі, така схема працює непогано, проте має багато істотних недоліків, зокрема, неможливо ніяк (точніше, дуже складно) обмежувати адміністративні привілеї лише певним колом завдань.

    Тому в сучасних дистрибутивах Linux замість root облікового запису для адміністрування використовується утиліта sudo.

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

    Що таке sudo

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

    Де використовується sudo

    sudo використовується завжди, коли ви запускаєте щось із меню Адміністрації системи. Наприклад, під час запуску Synaptic вас попросять ввести пароль. Synaptic - це програма управління встановленим ПЗ, тому для її запуску потрібні права адміністратора, які ви отримуєте через sudo вводячи свій пароль.

    Однак не всі програми, що потребують адміністративних привілеїв, автоматично запускаються через sudo. Зазвичай запускати програми із правами адміністратора доводиться вручну.

    Запуск графічних програм із правами адміністратора

    Для запуску графічних програм з правами адміністратора можна скористатися діалогом запуску програм, що викликається за замовчуванням клавішами Alt + F2 .

    Припустимо, нам необхідно запустити файловий менеджер Nautilus із правами адміністратора, щоб через графічний інтерфейс якось змінити вміст системних папок. Для цього необхідно ввести в діалог запуску програм команду

    Gksudo nautilus

    Замість gksudo можна підставити gksu, крім того, користувачі KDE повинні замість gksudo писати kdesu. У вас попросять ввести свій пароль, і, якщо ви маєте потрібні права, Nautilus запуститься від імені адміністратора. Запуск будь-якого графічного програмного забезпечення можна проводити з правами адміністратора, просто написавши в діалозі запуску

    Gksudo<имя_команды>

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

    Запуск програм з правами адміністратора у терміналі

    Для запуску в терміналі команди з правами адміністратора просто наберіть перед нею sudo:

    Sudo<команда>

    У вас попросять ввести пароль. Будьте уважні, пароль під час введення ніякне відображається, це нормально і зроблено з метою безпеки, просто вводьте до кінця та натискайте Enter . Після введення пароля команда виконається від імені root.

    Система якийсь час пам'ятає введений пароль (зберігає відкриту sudo-сесію). Тому при наступних виконаннях sudo введення пароля може не знадобитися. Для гарантованого припинення сесії sudo наберіть у терміналі

    Крім того, часто зустрічаються помилки, пов'язані з каналами в Linux. Під час виконання команди

    Sudo cat test.txt | grep text > result.txt

    з правами root виконається тільки cat, тому файл result.txtможе не записатися. Потрібно або писати sudo перед кожною командою, або тимчасово переходити під суперкористувача.

    Отримання прав суперкористувача для виконання кількох команд

    Іноді виникає необхідність виконати кілька команд з правами адміністратора. У цьому випадку можна тимчасово стати суперкористувачем однієї з наступних команд:

    Sudo -s sudo -i

    Після цього ви перейдете до режиму суперкористувача (з обмеженнями, накладеними через налаштування sudo), про що говорить символ # в кінці запрошення командного рядка. Дані команди по дії схожі на su, проте: - sudo -s- не змінює домашній каталог на /root, домашнім залишається домашній каталог користувача sudo -sщо зазвичай дуже зручно. - sudo -i- Змінить так само і домашній каталог на /root.

    Для виходу назад у режим звичайного користувача наберіть exit або просто натисніть Ctrl+D.

    Використання традиційного root облікового запису та команди su

    Розблокування облікового запису root призводить до невиправданих ризиків (працюючи постійно під рутом ви маєте 100500 способів «відстрілити собі ногу»), а також спрощує отримання доступу до вашого комп'ютера зловмисником.

    Ubuntu 11.04 та молодше

    Для входу під root достатньо задати йому пароль:

    Sudo passwd root

    Потім на екрані входу натисніть Інший… і введіть логін (root) та пароль, який ви задали.

    Ubuntu 11.10 та старше

    Починаючи з версії 11.10 був встановлений менеджер входу lightdm, і справа з входом під root трохи складніша.

    1. Встановлюємо пароль root. Введіть у термінал:

    Sudo passwd root

    2. Включаємо пункт "Введіть логін". Введіть у термінал:

    Gksu gedit /etc/lightdm/lightdm.conf

    Наприкінці файлу допишіть:

    Greeter-show-manual-login=true

    3. Перезавантажуємо lightdm. Введіть у термінал:

    Sudo service lightdm restart

    Все, на екрані входу з'явиться пункт Логін. У полі логін вводимо «root», у полі пароль – пароль, який ми задали на першому етапі.

    Для зворотного блокування облікового запису root вам потрібно відкотити зміни в налаштуваннях lightdm, а також заблокувати обліковий запис root командою в терміналі:

    Sudo passwd -l root

    Налаштування sudo та прав доступу на виконання різних команд

    sudo дозволяє дозволяти чи забороняти користувачам виконання конкретного набору програм. Усі налаштування, пов'язані з правами доступу, зберігаються у файлі /etc/sudoers. Це зовсім простий файл. Для його редагування необхідно(з метою безпеки) використовувати команду

    Sudo visudo

    За умовчанням, в ньому написано, що всі члени групи adminмають повний доступ до sudo, про що говорить рядок

    %admin ALL=(ALL) ALL

    Докладніше про синтаксис та можливості налаштування цього файлу можна прочитати виконавши

    Man sudoers

    Якщо ви припуститесь помилки при редагуванні цього файлу, то цілком можливо повністю втратите доступ до адміністративних функцій. Якщо таке трапилося, необхідно завантажитися в recovery mode, при цьому ви автоматично отримаєте права адміністратора і зможете все виправити. Крім того, можна відредагувати цей файл із LiveCD.

    Дозвіл користувачу виконувати команду без введення пароля

    Для того, щоб система не запитувала пароль при певних командах необхідно в sudoers після рядка # Cmnd або specificationдодати рядок, де через кому перерахувати бажані команди з повним шляхом (шлях команди можна дізнатися, виконавши which ім'я_команди:

    # Cmnd alias specification Cmnd_Alias ​​SHUTDOWN_CMDS = /sbin/shutdown, /usr/sbin/pm-hibernate, /sbin/reboot

    І до кінця файлу дописати рядок

    Ім'я_користувача ALL=(ALL) NOPASSWD: SHUTDOWN_CMDS

    Увага! Вищеописані дії не скасовують необхідності введення команди sudo перед вашою командою

    Створення синонімів (alias`ів)

    Для того, щоб не тільки не вводити пароль для sudo, а й взагалі не вводити sudo, зробіть таке: відкрийте файл.bashrc, що знаходиться у вашому домашньому каталозі

    nano ~/ bashrc

    та додайте в кінець файлу рядки

    alias reboot = "sudo reboot" alias poweroff = "sudo poweroff" alias pm-hibernate = "sudo pm-hibernate" alias hibernate = "sudo pm-hibernate" alias shutdown = "sudo shutdown"

    Час дії введеного пароля

    Можливо, ви хочете змінити проміжок часу, протягом якого sudo діє без введення пароля. Цього легко досягти додавши в /etc/sudoers (visudo) приблизно таке:

    Defaults:foo timestamp_timeout=20

    Тут sudo для користувача fooдіє без необхідності введення пароля протягом 20 хвилин. Якщо ви хочете, щоб sudo завжди вимагав введення пароля, зробіть timestamp_timeout 0.

    sudo не запитує пароль

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

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

    ALL ALL=(ALL) NOPASSWD:ALL

    Швидше за все, цей катастрофічний рядок був доданий під час встановлення програми типу Connect Manager від МТС або Мегафону. У такому разі, її потрібно поміняти на рядок, що дозволяє з правами root запускати тільки цей Connect Manager приблизно так:

    Користувач ALL= NOPASSWD: /шлях/до/програмі

    Є й інші варіанти вирішення проблеми, невелике обговорення.

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

    $ sudo su

    І це - навіть в Ubuntu'ідах, де root-акаунта як би і немає; точніше, за замовчуванням немає пароля. Але використання sudo робить його непотрібним навіть для команди su. Але й задати пароль суперкористувача не забороняється – адже для цього достатньо дати команду

    $ sudo passwd

    щоб надалі використовувати su звичайним чином. І навіть за бажання авторизуватися root'ом при реєстрації в системі.

    Втім, і тут команда sudo передбачає "ідеологічно правильний" метод і навіть не один. Це - опції -s і -i, що пролонгують, хоча й дещо по-різному, дія команди sudo на невизначений термін, аж до завершення «вторинного сеансу» командою exit.

    Опція -s відкриваючи вторинний сеанс root'а, зберігає всі змінні оточення початкового користувача. Однак, якщо до неї додати опцію -H , то ці змінні будуть заново зчитані з профільних файлів домашнього каталогу адміністратора, тобто /root, як при запуску інтерактивного екземпляра шелла. Однак каталог, що був поточним у момент введення команди, при цьому не зміниться, як не зміниться і запрошення командного рядка.

    Опція ж -i повністю відтворює root-оточення, запускаючи його командну оболонку як реєстраційну (login shell). Зрозуміло, при цьому і поточний каталог змінюється на /root, а запрошення командного рядка набуває вигляду, описаного у відповідній змінній профільного файлу адміністраторського шелла (в bash - PS1).

    На практиці різниця між обома формами набуття перманентних прав адміністратора не велика, особливо в bash. Але в zsh відповідними налаштуваннями профільних файлів за бажання можна досягти суттєво різного оточення в кожному з цих випадків. Щоправда, наскільки це потрібно користувачеві, — велике питання. А ось те, що при використанні опцій -H перебування в перманентно-адміністративному режимі ніяк зовні не вявляється, загрожує помилками. І робить здебільшого застосування опції -i кращим.

    До речі, можливості sudo не обмежуються запуском команд від імені адміністратора: задавши опцію -u username , їх можна виконати і від імені того користувача, чий логін заданий як її значення. Це може бути корисним при перегляді або копіюванні dot-файлів та dot-каталогів іншого користувача, часто відкритих для читання та зміни лише їхньому господарю.

    До речі, команду sudo можна запустити так, щоб вона запитувала пароль користувача, від імені якого виконуватиметься команда (наприклад, адміністратора), а не того, хто вимагає його повноважень. І тому існує опція -targetpw . А щоб зробити вимогу root'ового пароля постійною, достатньо визначити, наприклад, псевдонім типу

    Alias ​​sudo -targetpw

    Вимога введення root'ового пароля при запуску sudo - поведінка її за замовчуванням у деяких дистрибутивах, наприклад, як кажуть, у Suse.

    Команда sudo має ще чимало опцій – вище я навів лише ті, які мені доводилося використовувати. Інші легко подивитися в man sudo. З не перерахованих згадаю ще опцію -b, що наказує запускати «підсудну» команду у фоновому режимі. Вона може бути корисною при виконанні довготривалих дій, наприклад, при копіюванні образів USB на флешку командою dd.

    Як ми тільки що побачили, команда sudo дає користувачеві практично необмежені повноваження для будь-яких як загальносистемних дій, так і для маніпуляції чужими даними користувача. У зв'язку з цим поставимо запитання:

    • чи будь-який користувач може отримати права адміністратора через команду sudo , та
    • чи всі дії з адміністрування може її за допомогою виконати?

    Якщо говорити про сімейство Ubuntu, в якому цей механізм був вперше задіяний «із коробки» - то «із коробки» відповідь на перше питання буде негативною, на друге — позитивною. А взагалі це залежить від налаштувань програми sudo, які описуються у файлі /etc/sudoers. І в ньому можна задати правила, що допускають до виконання певних команд лише окремих користувачів. В узагальненому вигляді це виглядає так:

    Username host = command

    Тут, як неважко здогадатися, username – ім'я користувача, для якого встановлюється дане правило, host – ім'я машини, з якої він може до цього правила вдатися, command – конкретна команда, використання якої дозволяється даному користувачеві з цієї машини. Команда повинна бути дана із зазначенням повного абсолютного шляху (тобто /sbin/fdisk, а не fdisk). Поле опису команд може включати кілька значень, розділених комами, наприклад:

    Username ALL = /sbin/fdisk,/bin/mount

    В Ubuntu'ідах за умовчанням правила доступу користувачів до адміністративних привілеїв описуються так:

    # User privilege specification root ALL=(ALL) ALL # Members of admin group may gain root privileges %admin ALL=(ALL) ALL

    Тобто користувач root, як і належить, може виконувати будь-які команди з будь-яких хостів. А ось отримати права його можуть тільки користувачі, що входять до групи admin (аналог групи wheel, про яку йшлося в ). Користувач, створюваний під час звичайної установки, автоматично стає членом цієї групи — і тому всі адміністративні права доступні йому без будь-яких подальших налаштувань. Однак інші користувачі, чиї облікові записи будуть створені надалі, цього привілею позбавлені. Якщо, звичайно, вони були спеціально включені в групу admin .

    У інших дистрибутивах, не використовують sudo «з коробки», потрібно редагування її конфігураційного файлу — того самого /etc/sudoers , про яке згадувалося вище.

    Файл /etc/sudoers - звичайний текстовий, і, відповідно, його можна редагувати в будь-якому текстовому редакторі (або, скажімо, засобами ed або sed). Однак при цьому існує певний ризик щось напортачити (за рахунок звичайних друкарських помилок), аж до того, що повністю закрити самому собі доступ до привілеїв суперкористувача. Звичайно, ситуації ці можна виправити — наприклад, через перезавантаження в однокористувальному режимі. Однак краще в них не потрапляти. І тому надійнішим засобом модифікації /etc/sudoers буде використання спеціально призначеної для того утиліти - visudo.

    Утиліта visudo не робить нічого надприродного - вона просто відкриває /etc/sudoers в текстовому редакторі, що описується змінною EDITOR суперкористувача (якщо така не визначена, їм буде знову ж таки класичний vi - звідси і назва) і дозволяє його відредагувати звичайним чином, після чого вийти з редактора із збереженням результатів штатними його засобами. Однак перед цим результат редагування перевіряється на коректність. І якщо виявляється порушення синтаксису, прийнятого для /etc/sudoers, видається відповідне попередження. Після якого можна повернутися до редагування, відмовитися від змін або все-таки прийняти їх (зрозуміло, під особисту відповідальність).

    Утиліта visudo не гарантує стовідсоткового успіху редагування. Оскільки перевіряє лише відповідність синтаксису, але з “правильність самих правил”. Тобто якщо помилку буде допущено у вказівці шляху до потрібної для цього правила команди — ця команда через sudo не спрацює.

    Втім, насправді це зазвичай виглядає набагато простіше і зовсім не страшно. Так, у Fedora 11 мені у зразково-показовому конфізі /etc/sudoers довелося лише розкоментувати рядок

    %wheel ALL=(ALL) ALL

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

    # %wheel ALL=(ALL) NOPASSWD: ALL

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

    Defaults timestamp_timeout=10

    де значення таймауту вказано у хвилинах. До речі, якщо змінити його на нуль

    Defaults timestamp_timeout=0

    то пароль буде запитуватися щоразу при зверненні до команди sudo.

    Можна, навпаки, відключити тайаут на дію sudo , вдавши йому негативне значення:

    Defaults timestamp_timeout=-1

    У цьому випадку пароль буде запитано лише при першому виклику цієї комани.

    Більше пильне вглядання у файл /etc/sudoers легко підкаже можливості дати певним користувачам чи групам лише обмежений набір прав. Втім, тут уже починаються тонкощі справжнього адміністрування. Я ж просто позбавив свого двійника-експериментатора доступу до будь-яких адміністративних дій, щоб припинити всі його наміри на цій ниві. Втім, навіть це не завжди дозволяє мені з ним справлятися — подібно до того, як Тимур Шаов не в змозі впоратися зі своїм ліричним героєм.