Для виконання цієї команди необхідні привілеї суперкористувача. $ su опції користувач. Вхід під суперкористувачем

Як можна підняти свої привілеї до системних світі Windows. Як виявилося, варіантів для цього більш ніж достатньо. Що вибрати залежить як від ситуації, так і від твоїх переваг. Однак, як ти розумієш, розширювати свої повноваження доводиться не лише для віконців, а й для пінгвінів. Які тут є здібності? Ну що ж, давай подивимося…

Prefase

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

Експлойти

Всі способи отримання прав суперкористувача в Linux можна умовно поділити на дві категорії. Перша - це якраз використання експлойтів. На відміну від Windows, з її механізмом автоматичної установки оновлень, прихильникам пінгвіна доводиться здебільшого самостійно стежити за виходом латок та їх встановленням. У зв'язку з цим шанс зустріти серед Linux-машин не пропатчену до кінця систему набагато вищий. Які переваги даного методуможна виділити? Для початку більшість експлойтів використовують уразливості в ядрі ОС, що дозволяє отримати максимальні привілеї. Знайти код відповідного експлойта не так складно, і ти знаєш пару ресурсів. Плюс до всього, щоб скористатися сплоїтом, часом не потрібно розбиратися у всіх тонкощах вразливості, що використовується - досить просто правильно скомпілювати його і запустити (іноді, правда, доводиться його трохи кастомізувати, але досить часто все буде працювати і без підгонки напилком). У загальному вигляді алгоритм дій виглядає так:

  1. Визначити версію ядра та дистрибутива.
  2. Отримати список доступних інструментів для складання сплоїту.
  3. Доставити сплоїти на цільову машину.
  4. Скомпілювати (при необхідності) та запустити.
  5. Насолоджуватися отриманим root'ом.

Ну а тепер про кожен крок детальніше.

Ідентифікація

Судячи із плану, спочатку треба дізнатися, куди ми взагалі потрапили, що за дистр використовуємо і яка версія ядра. Версію ядра можна витягнути за допомогою всієї відомої команди uname -a або її аналогів. Для того ж, щоб отримати інформацію про дистрибутив, що використовується, треба глянути у файлик *-release , що лежить в каталозі etc (залежно від дистра він може називатися по-різному: lsb-release в Ubuntu, redhat-release в Red Hat / CentOS і так далі):
cat /etc/*-release

Знаючи дистрибутив і версію ядра, можна зайнятися другим етапом – пошуком відповідної «відмички».

Пошук експлойту

Як тільки вся необхідна інформація опиниться на руках, настане час шукати відповідний експлойт. Перше, що спадає на думку, - це exploit-db.com, але є й альтернативи: 1337day , SecuriTeam , ExploitSearch , Metasploit , securityreason , seclists . Зрештою, є гугл, він точно знає про сплоїти найбільше. Забігаючи трохи вперед, скажу: іноді з якоїсь причини «відмичка» може не працювати або її треба трохи адаптувати під певні умови або свої потреби, тобто пройтися по ній напилком. У такому разі не завадить вивудити про неї додаткову інформацію, яку можна отримати на одному з наступних ресурсів:
www.cvedetails.com
packetstormsecurity.org
cve.mitre.org

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

Доставка додому

Для того щоб доставити сплоїти на місце, існує досить багато способів, від всіх відомих cURL/wget, Netcat, FTP, SCP/SFTP, SMB до використання DNS TXT записи. Щоб з'ясувати, які з цих інструментів у нас представлені, виконуємо:

Find/-name wget find/-name nc* find/-name netcat* find/-name tftp* find/-name ftp

Допустимо, у нас знайшовся Netcat. Для передачі файлу з його допомогою на стороні, що приймає, запускаємо:
nc -l -p 1234 > out.file

Тобто слухаємо порт 1234. На відправляючій виконуємо таке:
nc -w 3 1234< out.file

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

Nc-l-p 1234 | uncompress-c | tar xvfp // для отримання tar cfp - /some/dir | compress-c | nc -w 3 1234 // для відправки

Інші варіанти ще простіше, тому не будемо розглядати використання wget, FTP та інших загальновідомих методів.

Схованки

Добре, як доставити, розібралися. Але як при цьому не спалитись? Якщо твій сплоїт виявлять, будь впевнений, що лазівку швидко прикриють. Тож розміщувати його, компілювати та запускати треба з якогось непомітного місця. У лінуксі директорії, що починаються з точки (наприклад, .secret_folder), є прихованими. Тому логічно було б використовувати їх для приховування своєї активності. Наприклад, помістити код експлойта: /tmp/.nothingthere/exploit.c . Правда, в такому випадку треба спочатку переконатися, що tmp змонтована без опції noexec і з неї можна буде запустити зібраний сплоїт (для цього скористайся командою mount).

Складання та запуск сплоїта

Як тільки ми доставили та розмістили сплоїт, його треба буде зібрати/налаштувати. Як правило, сплоїти пишуться на С або однією зі скриптових мов Python/Perl/PHP. Постійні читачі] знають, що залишати на своєму сервері компілятор - не саме краще рішеннятому зазвичай його випилюють. Якщо на твоє запитання про версію компілятора gcc -v bash свариться gcc: command not foundзначить, тобі «пощастило» і доведеться йти в обхід. Тобто або шукати сплоїть на пітоні, перлі або чимось ще, або компілити його на віртуальній машиніз аналогічною ОС та версією ядра. Після цього перемістити отриманий виконуваний файл на цільовий хост (щоправда, стовідсоткової роботи цей метод не гарантує, згуртує може впасти і обрушити систему, так що акуратніше тут). Однак, як показує практика, інтерпретатор для однієї зі згаданих мов все-таки має бути присутнім у системі. Тож не слід відразу опускати руки, натомість перевіряємо всі варіанти:

Find/-name perl* find/-name python* find/-name gcc* find/-name cc

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

Протидія сплоїтам

Якісь новаторські рецепти тут вигадати складно. Все й так давно відомо. Треба просто вчасно встановлювати латки. Це перше. Друге - обмежити місця, звідки можна запускати на виконання файли (папку tmp точно слід позбавити даної можливості). Ну і застосувати якесь захисне рішеннянаприклад grsecurity .

Права, файли, шляхи та конфіги

Друга категорія, яку можна виділити у піднятті привілеїв, - це способи, не пов'язані з використанням експлойтів, а засновані на пошуку файлів із некоректно виставленими правами. Тут, як і у випадку з Windows, є свої хитрощі, але в основному це все та ж робота зі збирання та аналізу даних. Зазвичай насамперед шукаються файли, які доступні всім на читання та запис:
find/-perm 2! -type l -ls

Таких може виявитися досить велика кількість, і серед них можна знайти щось цікаве: конфігураційні файли, вихідники сайтів/додатків, скрипти, що запускаються init'ом або cron'ом. В принципі, ситуація, коли файл доступний всім на читання та запис, – це нормальне явище. Проблеми виникають, коли користувачі/адміністратори/скрипти починають бездумно змінювати дозволи. Тому, коли ти змінюєш дозволи, намагайся уникати використання chmod 777 . Ну і проводи періодичний аудит, щоб важливі файлине виявилися доступними всім поспіль.

Setuid + setgid

Як свідчить документація, setuid і setgid є прапорами прав доступу, які дозволяють запускати файли, що виконуються, з правами власника або групи виконуваного файлу (зазвичай root'а). Такі файли, запущені з підвищеними привілеями, можуть отримувати доступ до більш привілейованої інформації. Наприклад, у разі встановлення setuid на команду ls ти отримаєш можливість переглядати вміст директорій, доступ до яких тобі спочатку було заборонено. А у випадку vim - правити конфігураційні файли, в які раніше не мав права заглядати.

Відповідно, якщо у додатках із встановленим setuid/setgid-прапором, є такі вразливості, як buffer overflow або command injection, то атакуючий може виконати довільний код з підвищеними привілеями. Тому наступним варіантомзазвичай шукають виконувані файли з цими прапорами.
sudo find / -xdev \ (-perm 4000 \) -type f -print0 -exec ls -s () \;

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

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

SUDO

Команда sudo (substitute user and do), що дослівно означає «підмінити користувача та виконати», дозволяє делегувати ті чи інші привілейовані ресурси користувачам із веденням протоколу роботи. Тобто надає користувачам можливість виконувати команди від імені root'а (або інших користувачів), використовуючи свій власний пароль, а не пароль рута. Правила ухвалення рішень про надання доступу перебувають у файлі /etc/sudoers . Докладніше про формат цього файлу та завдання правил ти можеш переглянути в офіційному мануалі або Вікіпедії. Я лише скажу, що цей файл також потрібно ретельно перевіряти. Тому що часто буває, що деякі програми при встановленні його змінюють, і до того ж не в кращий бік. В результаті чого у користувачів з'являється можливість підняти свої привілеї (пост на Offensive security, що розповідає про такий випадок).

PATH

Як і на вінді, у лінуксі некоректно налаштовані шляхи також допоможуть підняти свої привілеї. Зазвичай таке трапляється зі змінною оточення PATH (використовуй printenv для її перегляду). Подивився? Відмінно, а тепер скажи: якщо змінна оточення PATH буде починатися з. (.:/bin:/usr/sbin ....)? Зазвичай так роблять користувачі, які не хочуть набирати два зайві символи, тобто хочуть викликати команду так: $program замість $./program. Додавання. PATH означає можливість виконувати файли/скрипти з робочої директорії. Додати її можна так:

PATH=.:$(PATH) export PATH

А тепер уявимо ситуацію, що у нас є два користувача: Джо (атакуючий) та Боб. Джо знає, що Боб має sudo-привілеї на зміну паролів користувачів, у тому числі і рута. Крім того, Боб лінивий і додав. в змінну оточення PATH. Хитрий Джо пише програму, яка змінюватиме пароль рута, називає її ls і кладе в папку, куди любить заглядати Боб. Тепер, коли останній зайде до папки та захоче подивитися її вміст, виконається програма, яку написав Джо, і пароль рута буде змінено. Тому завжди перевіряємо змінні оточенняна наявність цікавих речей, а для себе робимо такі висновки:

  1. Ніколи не використовуємо. у змінній PATH.
  2. Якщо точка там таки присутня, розміщуємо наступний рядокв.bashrc або.profile:
    PATH = echo $ PATH | sed -e "s/::/:/g; s/:.:/:/g; s/:.$//; s/^://"

Інструменти

Для автоматизації пошуку слабких місць можна скористатися такими тулзами:

1. LinEnum - bash-скрипт, який зробить всю брудну роботу за тебе, виконуючи всі перевірки, описані в даному cheat sheet'e. Загалом у його арсеналі близько 65 різних перевірок, починаючи від отримання інформації про версію ядра і до пошуку потенційно цікавих SUID/GUID-файлів. Крім того, скрипту можна передати ключове слово, яке він шукатиме у всіх конфігураційних та лог-файлах. Запускається перевірка в такий спосіб: ./LinEnum.sh -k keyword -r report -e /tmp/ -t . Після того, як сканування завершиться, тобі буде представлений докладний звіт, найцікавіші місця якого будуть підсвічені жовтим кольором.
2. LinuxPrivChecker - Python-скрипт, який також стане в нагоді в пошуку потенційних варіантів для підвищення привілеїв. Загалом, він виконує ті самі стандартні речі: перевірку привілеїв, отримання інформації про систему... Але основна його фішка в тому, що після завершення перевірки він запропонує тобі список експлойтів, які, на його думку, допоможуть підняти привілеї. Такий ось молодець:).
3. unix-privesc-check - даний скриптдозволяє шукати варіанти для прокачування привілеїв не тільки в Linux, але і в Solaris, HPUX, FreeBSD. Він намагається виявити помилки конфігурації, які б непривілейованому користувачеві піднятися у системі.
4. g0tmi1k's Blog - це блог, в якому добре описані всі ті перевірки, що виконуються трьома названими інструментами. Тож наполегливо рекомендую заглянути туди і познайомитися, щоб уявляти, як ці інструменти працюють «зсередини».



LinuxPrivChecker містить великий списокексплойтів, що постійно поповнюється з Exploit Database

Afterword

Як ти переконався, у світі Linux з підняттям привілеїв все теж досить буденно. Секрет успіху простий: щоб досягти своєї мети, треба бути терплячим і знати, де шукати і що шукати. Куди дивитися, ти тепер знаєш, які утиліти задіяти для автоматизації – теж, так що тепер тобі під силу підкорити не лише win-, а й nix-систему. Дерзай!

Користувач root та sudo

Користувач root у системах GNU/Linux – це користувач, який має адміністративний доступ до вашої системи. Звичайні користувачі не мають цього доступу з міркувань безвасності. Проте в Kubuntu немає користувача root. Натомість адміністративний доступ надається окремим користувачам, які можуть використовувати програму "sudo" для виконання адміністративних завдань. Перша обліковий запис, створена при установці системи за промовчанням матиме доступ до програми sudo. Ви можете заборонити доступ до sudo або надати його за допомогою програми Користувачі та Групи (див. «Користувачі та Групи»).

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

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

Sudo пам'ятатиме ваш пароль встановлений час(за замовчуванням 15 хвилин). Ця можливість дозволяє користувачам виконувати велика кількістьадміністративних завдань без необхідності щоразу вводити пароль.

Увага

Будьте обережні при виконанні адміністративних завдань – ви можете зіпсувати вашу систему!

Деякі поради щодо використання sudo:

    Щоб використати термінал користувача root, наберіть "sudo -i" у командному рядку

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

    За подальшою інформацією щодо програми sudoта відсутність користувача root в Kubuntu звертайтесь до сторінки sudo на сайті Ubuntu wiki.

Запуск програм вручну з привілеями root

Іноді потрібно виконати програму з привілеями root. Це легко зробити за допомогою діалогу Виконати команду .

Увага

Будь ласка, будьте обережні, виконуючи програми з привілеями root, оскільки це може зіпсувати вашу систему. За додатковою інформацієюдив. «Користувач root та sudo» .

    Відкрийте діалог Виконати команду , натиснувши Alt -F2

    Введіть назву програми, яку ви хочете виконати, з префіксом kdesuта натисніть Enter. Наприклад, щоб запустити файловий менеджер Konquerorз привілеями root, наберіть

    1. Використання команди: su

    Багато команд можуть бути запущені тільки суперкористувачем, тому ми повинні знати, як стає ним (root-ом). Щоб це зробити, ми можемо використовувати команду: su (зміна користувача). Команда su приймає такі формати:

    але найчастіше ми будемо використовувати suдля того, щоб стати користувачем root:

    Su - root

    якщо ім'я користувача в рядку не вказано, то автоматично передбачається користувач root, тому команду можна скоротити:

    але обидві команди поводяться по-різному. "su" дає поточному користувачеві особу, тоді як "su -" дає поточному користувачеві особу разом з оточенням, яке можна було б отримати, зареєструвавшись як.

    Найчастіше користувачі використовують su для переходу в root. Спробувавши запустити команду (наприклад - ifconfig), ви отримаєте: "command not found" error.

    Su Password: ifconfig bash: ifconfig: command not found

    Причина полягає в тому, що звичайні користувачі системи і root користувачі мають різні змінні оточення PATH (ви можете подивитися PATH користувача за допомогою "echo $PATH). команди Linux, оболонка буде шукати PATH користувача, щоб спробувати знайти команду для запуску. Вона починає пошук у кожній директорії, зазначеній у PATH, поки мета не буде знайдена.

    Команди звичайних користувачів зазвичай розташовані в /usr/local/bin, /usr/bin та /bin. А команди користувача root знаходяться в основному в /usr/local/sbin, /usr/sbin, /sbin і кореневий PATH це відображає. Тому, коли ви стаєте суперкористувачем за допомогою "su -", то ви також приймаєте і новий шлях PATH до основних команд. А використовуючи лише "su", зберігається користувальницький шлях PATH за замовчуванням, отже, при спробі виконати програму, розташовану в /usr/local/sbin, /usr/sbin, /sbin видасть результат: "command not found" error. Для більш детального пояснення дивіться довідкову сторінку (man bash), особливо розділ login shells.

    Таким чином, ви або повинні вказувати повний шлях до команди (приклад - /sbin/ifconfig) при використанні "su", або використовувати "su -", коли стаєте root.

    2. Використання Sudo

    Вам не потрібно бути суперкористувачем щоразу, коли ви хочете запустити деякі конкретні адміністративні функції. Завдяки Sudo, Ви можете запустити деякі або всі команди, як під root-ом. Коли Sudoвстановлений (пакет: Sudo), ви можете налаштувати його за допомогою команди visudo під root-ом. В основному він редагує (Vim за замовчуванням) /etc/sudoers, але це не рекомендується робити вручну.

    Alex ALL=(ALL)ALL

    Alex – ім'я користувача. Збережіть (натиснути escape, потім ввести wq) і все готове. Увійдіть як alex, і запустіть наприклад:

    $sudo yum update

    Sudo запросить пароль. Це пароль alex-а, а не користувача root. Так що будьте обережні, коли ви даєте права користувача з Sudo.

    Але Sudo може зробити не тільки це, а набагато більше. Ми можемо дозволити користувачеві чи групі користувачів запускати лише одну команду чи групу команд. Повернімося до нашого sudoers файлу. Почнемо з alex та alisa, членів групи administrator. Якщо ми хочемо, щоб усі користувачі з групи "administrator" були в змозі запустити кожну команду як суперкористувач, ми повинні змінити наш приклад:

    %admin ALL=(ALL)ALL

    Alex також може виконати суперкористувацьку команду, і alisa отримала право запускати Sudo, з тими ж правами та зі своїм паролем. Якщо alex і alisa не є членами однієї групи, ми можемо визначити псевдонім користувача у файлі sudoers:

    User_Alias ​​ADMINS = alisa, alex

    Тут ми визначили аліас під назвою ADMINS, з членами alisa та alex.

    Тим не менш, ми не хочемо, щоб alex і alisa могли запускати з правами суперкористувача будь-яку програму. Ми хочемо, щоб вони могли запускати лише "updatedb". Давайте визначимо команду псевдонім:

    Cmnd_Alias ​​LOCATE = /usr/sbin/updatedb

    Але цього замало! Ми повинні сказати Sudo, що користувачі, визначені як ADMINS, можуть запускати команди, задані в LOCATE. Щоб зробити це, ми замінимо рядки з %admin на ці:

    ADMINS ALL = LOCATE

    Це означає, що користувачі, що входять до аліасу ADMINS, можуть запускати всі команди в аліасі LOCATE.

    На цей раз, /etc/sudoers виглядає так:

    User_Alias ​​ADMINS = alisa, alex Cmnd_Alias ​​LOCATE = /usr/bin/updatedb ADMINS ALL = LOCATE

    В результаті alex і alisa можуть запускати updatedb, як root, ввівши свій пароль.

    Якщо останній рядок у файлі змінити:

    ADMINS ALL = NOPASSWD:LOCATE

    тоді alex та alisa зможуть виконати "sudo updatedb" без введення пароля.

    Можна додати інші команди в командний аліас та більше аліасів у правило. Наприклад ми можемо створити аліас NETWORKING містить деякі мережеві командитипу: ifconfig, route або iwconfig:

    Cmnd_Alias ​​NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhcclient, /usr/bin/net, sbin/iptables, /usr/bin/rfcom, /usr/bin/wvdial, /sbin /iwconfig, /sbin/mii-tool

    Давайте все це додамо до нашого /etc/sudoers файл (за допомогою visudo!). А також надамо нашій ADMINS групі права на виконання програм та з аліасу NETWORKING:

    User_Alias ​​ADMINS = alice, bob Cmnd_Alias ​​LOCATE = /usr/bin/updatedb Cmnd_Alias ​​NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net,/sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool ADMINS ALL = LOCATE, NETWORKING

    Маленька проба: увійдіть в систему як alisa (або alex), та наберіть:

    $ping -c 10 -i localhost

    Відповідь має повернутися швидко:

    PING localhost.localdomain (127.0.0.1) 56(84) bytes of data. ping: cannot flood; minimal interval, allowed for user, is 200ms

    Тепер, теж-саме але з Sudo:

    $sudo ping -c 10 -i 0 localhost PING localhost.localdomain (127.0.0.1) 56(84) bytes of data. 64 bytes від localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.049 ms 64 bytes від localhost.localdomain (127.0.0.1): icmp_seq=2 ttl=64 time=0.034 (127.0.0.1): icmp_seq=3 ttl=64 time=0.021 ms 64 bytes від localhost.localdomain: icmp_seq=4 ttl=64 time=0.030 ms 64 bytes з localhost.lo. icmp_seq=5 ttl=64 time=0.017 ms 64 bytes від localhost.localdomain (127.0.0.1): icmp_seq=6 ttl=64 time=0.016 ms 64 bytes від localhost.localdomain (127.0.0.0.0.0. time=0.016 ms 64 bytes з localhost.localdomain (127.0.0.1): icmp_seq=8 ttl=64 time=0.016 ms 64 bytes з localhost.localdomain (127.0.0.1): icmp_seq=6 t=0 від локального. max/mdev = 0.016/0.023/0.049/0.010 ms, ipg/ewma 0.187/0.028 ms

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

    Apr 18 11:23:17 localhost sudo: alex: TTY=pts/0 ; PWD=/home/alex; USER=root; COMMAND = / bin / ping -c 10 -i 0 localhost

    От і все. Тепер ніколи не забуду, коли використав Sudo: "з великою владою приходить велика відповідальність".

    2.1 Sudo shell

    Якщо у вас налаштовано достатньо прав у sudoers, ви також можете відкрити root-у оболонку shellвикористовуючи:

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

    3. Консультант

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

    Як приклад, давайте налаштуємо /usr/bin/xterm для запуску як root-ого.

    Ln -s /usr/sbin/consolehelper /usr/bin/xterm-root

    Тепер для конфігурування PAM створіть файл /etc/pam.d/xterm-root:

    #%PAM-1.0 auth include config-util account include config-util session include config-util

    Нарешті, налаштуйте consolehelper на запуск /usr/bin/xterm під root-ом, командою "xterm-root". Створіть файл /etc/security/console.apps/xterm-root:

    USER=root PROGRAM=/usr/bin/xterm

    От і все. Запускайте "xterm-root" (з командного рядкаабо ярликом.desktop file), введіть пароль і в дорогу. Якщо ви отримали повідомлення про помилку: "Xlib: connecttion to ":0.0" refused by server", спочатку запустіть "xhost local:root".

    |

    Linux – це розрахована на багато користувачів операційна система, яка використовує концепцію Unix про привілеї для забезпечення безпеки на рівні файлової системи. При роботі з Linux дуже важливо розуміти, що таке права доступу та власності. Ця стаття допоможе вам розібратися в основних поняттях, пов'язаних із привілеями користувачів Linux.

    Вимоги

    • Базові навички роботи з Linux.
    • Сервер Linux (опціонально).

    Користувачі Linux

    Оскільки Linux є розрахованою на багато користувачів системою, важливо розуміти, як працюють користувачі і групи. Розглянемо ці поняття докладніше.

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

    Щоб переглянути всіх користувачів системи, перевірте файл /etc/passwd. Кожен рядок у цьому файлі містить дані про окремому користувачеві, починаючи з імені користувача (перед першим символом двокрапки). Щоб вивести вміст файлу на екран, введіть:

    Суперкористувач

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

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

    Групи Linux

    Групи є наборами з 0 або більше користувачів. Користувач належить до групи за промовчанням, а також може бути членом будь-якої з інших груп.

    Щоб переглянути всі доступні групи та списки членів, відкрийте файл /etc/group.

    Права власності та доступу до файлів

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

    Для перегляду прав доступу використовується команда ls. Вона має довгий перелік опцій (наприклад, ls -l myfile). Щоб переглянути параметри доступу до файлів у поточному каталозі, запустіть команду без аргументів:

    Щоб запросити вміст каталогу /etc, введіть:

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

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

    drwxrwxrwx
    drwxrwx---
    -rw-rw----
    drwx------
    -rw-------

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

    d rwx(1) rwx(2) rwx(3)

    • d – поле типу файлу.
    • rwx(1) – права користувача-власника файлу.
    • rwx(2) - права групи-власника.
    • rwx(3) – права інших користувачів.

    Типи файлів

    У Linux існує два основних типи файлів: звичайні та спеціальні.

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

    Файл є спеціальним, якщо поле типу міститься буква. Такі файли обробляються операційною системоюінакше, ніж звичайні файли. Символ у полі типу файлу вказує, до якого виду спеціальних файліввідноситься певний файл. Найпоширенішим видом спеціальних файлів є каталог (або директорія), він визначається символом d (як у прикладі вище). У системі Linuxіснує кілька видів спеціальних файлів, але дана темавиходить за межі цієї статті.

    Класи доступу

    Як говорилося раніше, кожен файл має налаштування для трьох категорій(або класів) доступу:

    1. користувача – власника файлу;
    2. групи - власника файлу (до цього класу відносяться всі члени групи, в якій складається користувач - власник файлу);
    3. та інших користувачів (до цього класу відносяться всі користувачі, які не належать до попередніх класів).

    Такого порядку привілеїв дотримуються всі дистрибутиви Linux.

    Види доступу

    • r (read) – декларація про читання файла,
    • w (write) - право на зміну (редагування),
    • x (execute) – право на запуск (у деяких особливих випадкахзамість х може використовуватись інший символ).

    Якщо замість символу стоїть дефіс, значить, даний класнемає відповідного права доступу. Наприклад:

    У такому разі користувач та група – власники файлу мають усі права доступу, а для решти користувачів доступ до файлу повністю закритий.

    Розглянемо докладніше, що дає кожен вид доступу.

    Примітка: Щоб забезпечити нормальний доступ до файлів і каталогів, види доступу часто використовуються разом один з одним.

    Право на читання файлу

    Право на читання звичайного файлу – це можливість переглядати вміст.

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

    Право на зміну файлу

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

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

    Право на запуск

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

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

    Приклади привілеїв

    Тепер розглянемо кілька корисних загальних прикладівправ доступу до файлу.

    • -rw——-: доступ до файлу має лише користувач-власник файлу.
    • -rwxr-xr-x: будь-який користувач системи може запустити такий файл.
    • -rw-rw-rw-: будь-який користувач системи має право змінювати файл.
    • drwxr-xr-x: будь-який користувач системи може читати цей каталог.
    • drwxrwx—: вміст каталогу можуть читати та змінювати лише користувач та група-власник.

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

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

    Примітка: Щоб навчитися змінювати права доступу, читайте . У ньому йдеться про використання команд chown, chgrp та chmod.

    Висновок

    Тепер ви знайомі з основними поняттями, пов'язаними з правами доступу та власності в оточенні Linux.

    Tags:

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

    У Linux керувати кореневою файловою системою та створювати там файли має право лише користувач root.

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

    Дуже довго перераховувати чого не може звичайний користувач Linux, простіше сказати на що він має право, а саме при стандартному налаштуванніповноважень для файлів у Linux, звичайний користувач може:

    • Читати, писати та змінювати атрибути файлів у своєму каталозі
    • Читати, писати, змінювати атрибути файлів у каталозі /tmp
    • Виконувати програми там, де це не заборонено за допомогою прапора noexec
    • Читати файли, для яких встановлено прапор для всіх користувачів.

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

    Вхід під суперкористувачем

    Щоб увійти під користувачем root, можна переключитися в одну з віртуальних консолей, наприклад, за допомогою клавіш Ctrl+Alt+F1 і потім ввести логін root і пароль root користувача.

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

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

    Перемикання на суперкористувача в терміналі

    Тепер ми підійшли до більш цікавого та практичного. За допомогою спеціальних утиліт ви можете переключити поточний емулятор терміналу в оточення суперкористувача і виконувати всі наступні команди не від свого імені, а від нього, таким чином давши програмі права root linux. Для цього існує утиліта su. Взагалі кажучи, ця утиліта дозволяє не тільки перемикатися на користувача root, але й на будь-якого іншого користувача, але за умовчанням використовується саме root. Розглянемо її докладніше. Команда su linux має наступний синтаксис:

    $ su опції користувач

    Ось її основні опції:

    • -c, --command- Виконати команду
    • -g, --group- Встановити основну групу користувача (тільки для root)
    • -G --supp-group- Додаткові групи користувача (тільки для root)
    • -, -l, --login- режим входу, будуть очищені та ініціалізовані з урахуванням нового користувача всі змінні оточення, а також змінено домашній каталог
    • -p, --preserve-environment
    • -s, --shell- Задати оболонку для входу
    • --version- Відобразити версію програми.

    Тепер трохи поекспериментуємо, щоб зрозуміти, як працює команда su linux.

    Спочатку виконаємо su без параметрів, але для початку створимо змінну оточення, щоб перевірити як з ними поводиться ця команда:

    Тепер виконуємо:

    Тепер дивимося, що вийшло:

    whoami
    $ pwd
    $ echo $VAR
    $echo $PATH
    $ exit

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

    Тепер використовуємо вхід у режимі логіна:

    І повторимо ту саму комбінацію:

    whoami
    $ pwd
    $ echo $VAR
    $echo $PATH
    $ exit

    Та ж ситуація, тільки цього разу змінена до всього ще й домашня директоріяна директорію root. Але ми можемо зберегти наші змінні оточення, якщо це потрібно, для цього є опція -p:

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

    Отримання прав суперкористувача таким способом використовується в багатьох дистрибутивах, наприклад, Debian, OpenSUSE, ArchLInux, Gentoo і т.д. Це зроблено тому, що це теж не дуже безпечно, ви можете забути, що виконуєте команду від root і щось натворити в системі. Тому переходимо до наступної програми.

    Отримання прав root без перемикання

    Щоб реалізувати максимально безпечний інтерфейс для роботи з правами суперкористувача в Linux, була розроблена команда sudo. Давайте розглянемо що таке sudo. Ця команда пишеться перед кожною командою, яку потрібно виконати від імені суперкористувача, і для її виконання потрібно ввести пароль вже не root, а лише вашого користувача. Так само, як і в попередній, у цій утиліти є свої опції. Спочатку розглянемо синтаксис:

    $ sudo опції команда

    Опції програми:

    • -b- виконувати утиліту, що запускається, у фоні
    • -E- Зберегти змінні оточення
    • -g- запустити команду від групи
    • -H- Використовувати домашній каталог
    • -l- показати список повноважень sudo для поточного користувача
    • -r- Використовувати для команди роль SELinux
    • -s- Використовувати оболонку
    • -u- запустити команду від імені користувача, якщо не встановлено використовується root
    • -i- не виконувати команду, а увійти в оболонку, еквівалентно su -

    Ви можете виконати ті ж експерименти, тільки для цієї команди, щоб зрозуміти, як використовувати команду sudo. Наприклад:

    Використання sudo - це рекомендований спосіб виконувати команди від імені суперкористувача в Linux. Так ви не забудете, з чим маєте справу і найменше ризикуєте пошкодити систему. Але залишилося ще одне невирішене питання - як бути з графічними утилітами? Адже команда sudo їх не запускає, а запускати графічну оболонкувід імені root небезпечно. Це ми розглянемо далі.

    Графічні програми від імені суперкористувача

    Для запуску графічних програм від імені суперкористувача існують спеціальні утиліти. Вони зберігають усі необхідні змінні оточення та повноваження. У KDE команда kdesu, а Gnome команда gksu.

    Просто наберіть gksu або kdesu, а потім потрібну команду:

    Ця команда запустить файловий менеджер KDE із правами суперкористувача. У Gnome це буде виглядати так:

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

    Висновки

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