5.1 Урок 1
Сертифікат: |
Linux Essentials |
---|---|
Версія: |
1.6 |
Розділ: |
5 Безпека та дозволи на файли |
Тема: |
5.1 Основи безпеки та визначення типів користувачів |
Урок: |
1 з 1 |
Вступ
Цей урок буде зосереджено на базовій термінології облікових записів, контролю доступу та безпеки локальних систем Linux, інструментах інтерфейсу командного рядка (CLI) у системі Linux для базового контролю безпечного доступу та основних файлів для підтримки облікових записів користувачів і груп, у тому числі тих, що використовуються для елементарної ескалації привілеїв.
Основна безпека в системах Linux ґрунтується на основі засобів контролю доступу Unix, які, незважаючи на те, що їм майже п’ятдесят років, є досить ефективними в порівнянні з деякими популярними користувацькими операційними системами більш нових випусків. Навіть деякі популярні операційні системи, засновані на Unix, мають тенденцію “припускати спрощення” , які зосереджені на “легкому доступі” , тоді як Linux цього не робить.
Сучасні середовища та інтерфейси Linux спрощують створення та керування користувачами та часто автоматизують призначення контролю доступу, коли користувач входить в систему – наприклад, для відображення, аудіо та інших служб – практично не вимагаючи ручного втручання системного адміністратора. Однак важливо розуміти основні концепції базової операційної системи Linux.
Облікові записи
Безпека включає багато концепцій, одною з найпоширеніших є загальна концепція контролю доступу. Перш ніж вирішувати питання контролю доступу до файлів, як то право власності та дозволи, необхідно зрозуміти основні концепції облікових записів користувачів Linux, які поділяються на кілька типів.
Кожен користувач у системі Linux має обліковий запис, пов’язаний з ним, який окрім інформації для входу (наприклад, імені користувача та пароля) також визначає, як і де користувач може взаємодіяти з системою. Привілеї та засоби контролю доступу визначають “межі” , в яких кожен користувач може працювати.
Ідентифікатори (UIDs/GIDs)
Ідентифікатори користувача та групи (UID/GID, User Identifiers/Group Identifiers) є основними сформованими посиланнями на облікові записи. Ранні реалізації були обмежені 16-розрядними (значеннями від 0 до 65535) цілими числами, але системи 21-го століття підтримують 64-розрядні UID і GID. Користувачі та групи визначаються незалежно, тому один і той же ідентифікатор може означати як користувача, так і групу.
Кожен користувач має не тільки UID, а й основний GID. Основний GID для користувача може бути унікальним лише для цього користувача, і в кінцевому підсумку може не використовуватися іншими користувачами. Однак ця група також може бути групою, до якої входять багато користувачів. Окрім цих основних груп, кожен користувач може бути членом інших груп.
За замовчуванням у системах Linux кожен користувач призначається до групи з тим же ім’ям, що його ім’я користувача, і таким же GID, що його UID. Наприклад, створіть нового користувача з ім’ям newuser
і, за замовчуванням, його групою за замовчуванням також є newuser
.
Обліковий запис суперадміністратора
У Linux обліковим записом суперкористувача є root
, який завжди має UID 0. Суперкористувача іноді називають системним адміністратором, і він має необмежений доступ та контроль над системою, включаючи інших користувачів.
Група за замовчуванням для суперкористувача має GID 0
і також називається root
. Домашній каталог для суперкористувача - це виділений каталог верхнього рівня, /root
, доступний лише самому користувачеві root
.
Стандартні облікові записи користувачів
Усі облікові записи, крім root
, технічно є звичайними обліковими записами користувачів, але в системі Linux розмовний термін обліковий запис користувача часто означає “звичайний” (непривілейований) обліковий запис користувача. Зазвичай вони мають наступні властивості, за деякими винятками:
-
UID, починається з 1000 (4 цифри), хоча деякі застарілі системи можуть починатися з 500.
-
Визначений домашній каталог, зазвичай підкаталог
/home
, залежить від локальної конфігурації системи. -
Визначена оболонка входу. У Linux оболонкою за замовчуванням зазвичай є нова оболонка Борна, Bourne Again Shell (
/bin/bash
), хоча можуть бути доступні й інші.
Якщо обліковий запис користувача не має допустимої оболонки в своїх атрибутах, користувач не зможе відкрити інтерактивну оболонку. Зазвичай /sbin/nologin
використовується як недійсна оболонка. Це може бути зроблено навмисно, якщо користувач буде автентифікований лише для окремих служб, ніж доступ до консолі або SSH, наприклад, лише доступ до Secure FTP (sftp
).
Note
|
Щоб уникнути плутанини, термін обліковий запис користувача надалі застосовуватиметься лише до стандартних або звичайних облікових записів користувачів. Наприклад, системний обліковий запис буде використано для позначення облікового запису користувача Linux, який є системним обліковим записом користувача. |
Системні облікові записи
Системні облікові записи зазвичай створюються під час встановлення системи. Вони створюються для засобів, програм і служб, яким не потрібні права суперкористувача. В ідеальному світі це все були б засоби операційної системи.
Системні облікові записи відрізняються, але їх атрибути включають:
-
UID зазвичай менше 100 (2-значні) або 500-1000 (3-значні).
-
Домашній каталог відсутній або каталог, який зазвичай не знаходиться у директорії
/home
. -
Немає дійсної оболонки входу (зазвичай
/sbin/nologin
), за рідкісними винятками.
Більшість системних облікових записів у Linux ніколи не входять до системи і не потребують певної оболонки в своїх атрибутах. Багато процесів, що належать цим системним обліковим записам і виконуються, розміщуються у власному середовищі під системним керуванням, підпорядкованим зазначеному системному обліковому запису. Ці облікові записи зазвичай мають обмежені привілеї або, частіше за все, їх взагалі не мають.
Note
|
З точки зору LPI Linux Essentials, системні облікові записи мають UID <1000, з 2 або 3-значними UID (і GID). |
Загалом, системні облікові записи повинні не мати дійсної оболонки входу. Інакше це було б порушенням безпеки у більшості випадків.
Службові облікові записи
Облікові службові записи зазвичай створюються, коли служби встановлені та налаштовані. Подібно до системних облікових записів, вони призначені для засобів, програм і служб, які не працюватимуть від імені суперкористувача.
Здебільшого в документації облікові записи системи та служби подібні й часто взаємозаміняють одне одного. Сюди входить розташування домашніх каталогів, які зазвичай знаходяться за межами каталогу /home
, якщо вони взагалі визначені (облікові записи служб частіше мають домашній каталог ніж системні облікові записи), і відсутність дійсної оболонки для входу. Хоча чіткого визначення немає, основна відмінність між системними та службовими обліковими записами зводиться до UID/GID.
- Системний обліковий запис
-
UID/GID <100 (2-значне) або <500-1000 (3-значне)
- Обліковий запис служби
-
UID/GID >1000 (4+ цифри), але не “стандартний” або “звичайний” обліковий запис користувача, обліковий запис для послуг, з UID/GID >1000 (4+ цифри))
Деякі дистрибутиви Linux все ще мають попередньо зарезервовані облікові службові записи з UID <100, і їх також можна розглядати як системний обліковий запис, навіть якщо вони не створюються під час встановлення системи. Наприклад, у дистрибутивах Linux на основі Fedora (включаючи Red Hat) користувач веб-сервера Apache має UID (і GID) 48, очевидно, системний обліковий запис, незважаючи на наявність домашнього каталогу (зазвичай /usr/share/httpd
або /var/www/html/
).
Note
|
З точки зору LPI Linux Essentials, системні облікові записи мають UID <1000, а облікові записи звичайних користувачів – це UID >1000. Оскільки звичайні облікові записи користувачів > 1000, ці UID також можуть включати облікові записи служб. |
Оболонки входу та домашні каталоги
Деякі облікові записи мають оболонку входу, тоді як інші не мають з метою безпеки, оскільки не потребують інтерактивного доступу. Оболонкою входу за замовчуванням у більшості дистрибутивів Linux є нова оболонка Борна або bash
, але можуть бути доступні й інші оболонки, наприклад, оболонка C (csh
), оболонка Корна (ksh
) або оболонка Z (zsh
). ).
Користувач може змінити свою оболонку входу за допомогою команди chsh
. За замовчуванням команда виконується в інтерактивному режимі та відображає підказку, яка запитує, яку оболонку слід використовувати. Відповіддю має бути повний шлях до двійкового файлу оболонки, як показано нижче:
$ chsh Changing the login shell for emma Enter the new value, or press ENTER for the default Login Shell [/bin/bash]: /usr/bin/zsh
Ви також можете запустити команду в неінтерактивному режимі з параметром -s
, за яким слідує шлях до двійкового файлу, наприклад:
$ chsh -s /usr/bin/zsh
Більшість облікових записів мають визначений домашній каталог. У Linux це, як правило, єдине місце, де цей обліковий запис користувача має гарантований доступ на запис, за деякими винятками (наприклад, тимчасові області файлової системи). Однак деякі облікові записи навмисно налаштовані так, щоб не мати доступу на запис навіть до власного домашнього каталогу з метою безпеки.
Отримання інформації про користувачів системи
Виведення основної інформації про користувача є звичайною повсякденною практикою в системі Linux. У деяких випадках потрібно буде змінити користувачів і підвищити привілеї для виконання привілейованих завдань.
Навіть користувачі мають можливість передивлятися атрибути та права доступу із командного рядка, використовуючи наведені нижче команди. Основна інформація в обмеженому контексті не є привілейованою операцією.
Вивести поточну інформацію про користувача в командному рядку дуже просто за допомогою команди id
. Вихідні дані будуть відрізнятися залежно від вашого ідентифікатора входу:
$ id uid=1024(emma) gid=1024(emma) 1024(emma),20(games),groups=10240(netusers),20480(netadmin) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
У попередньому переліку користувач (emma
) має ідентифікатори, які розбиваються таким чином:
-
1024
= Ідентифікатор користувача (UID), за яким слідує ім’я користувача (загальне ім’я або ім’я для входу) у дужках. -
1024
= основний ID групи (GID), за яким слідує назва групи (загальна назва) у дужках. -
Список додаткових GID (імен груп), до яких також належить користувач.
Виведення інформації щодо останнього входу користувачів у систему, виконується за допомогою команди last
:
$ last emma pts/3 ::1 Fri Jun 14 04:28 still logged in reboot system boot 5.0.17-300.fc30. Fri Jun 14 04:03 still running reboot system boot 5.0.17-300.fc30. Wed Jun 5 14:32 - 15:19 (00:46) reboot system boot 5.0.17-300.fc30. Sat May 25 18:27 - 19:11 (00:43) reboot system boot 5.0.16-100.fc28. Sat May 25 16:44 - 17:06 (00:21) reboot system boot 5.0.9-100.fc28.x Sun May 12 14:32 - 14:46 (00:14) root tty2 Fri May 10 21:55 - 21:55 (00:00) ...
Інформація, наведена в стовпцях, може відрізнятися, але ряд важливих записів в списку вище означає:
-
Користувач (
emma
) увійшов до системи через мережу (псевдо TTYpts/3
) і все ще залишається у системі. -
Вказано час поточного завантаження разом із ядром. У наведеному вище прикладі приблизно за 25 хвилин до входу користувача.
-
Суперкористувач (
root
) заходив до системи через віртуальну консоль (TTYtty2
) близько середини травня.
Варіантом команди last
є команда lastb
, яка містить список усіх останніх невдалих спроб входу.
Команди who
та w
перераховують лише активних користувачів, що знаходяться у поточний час у системі:
$ who emma pts/3 2019-06-14 04:28 (::1) $ w 05:43:41 up 1:40, 1 user, load average: 0.25, 0.53, 0.51 USER TTY LOGIN@ IDLE JCPU PCPU WHAT emma pts/3 04:28 1:14m 0.04s 0.04s -bash
Обидві команди містять деяку однакову інформацію. Наприклад, один користувач (emma
) увійшов у систему за допомогою псевдоттерміналу TTY (pts/3
), а час входу – 04:28.
Команда w
містить додаткову інформацію, а саме:
-
Поточний час і тривалість роботи системи.
-
Скільки користувачів підключено.
-
Середнє навантаження за останні 1, 5 та 15 хвилин.
І додаткова інформація для кожного активного сеансу користувача.
-
Виберіть загальний час використання ЦП (
IDLE
,JCPU
іPCPU
) -
Поточний процес (
-bash
). Загальний час використання ЦП цього процесу є останнім елементом (PCPU
).
Обидві команди мають додаткові параметри для відображення різноманітної додаткової інформації.
Переключення між користувачами і підвищення привілеїв
В ідеальному світі користувачам ніколи не потрібно буде підвищувати привілеї для виконання своїх завдань. Система завжди “просто працює” і все налаштовано на різний доступ.
На щастя для нас, Linux після встановлення працює так для більшості користувачів, які не є системними адміністраторами, незважаючи на те, що ця ОС завжди дотримується моделі безпеки найменших привілеїв.
Однак існують команди, які дозволяють підвищити привілеї, коли це необхідно. Дві найважливіших з них - su
та sudo
.
У більшості систем Linux сьогодні команда su
використовується лише для підвищення привілеїв до рівня root, який є користувачем за замовчуванням, якщо ім’я користувача не вказано після імені цієї команди. Хоча цю команду можна використовувати для переходу до іншого користувача, це не є правильною практикою: користувачі повинні входити з іншої системи, через мережу, або фізичну консоль або термінал у системі.
emma ~$ su - Password: root ~#
Після введення пароля суперкористувача (root
) звичайний користувач отримує оболонку суперкористувача (зверніть увагу на #
в кінці командного рядку) і всі права суперкористувача (root
).
Спільний доступ до паролів є неправильною практикою безпеки, тому в сучасній системі Linux має бути дуже мало потреби в команді su
.
Символ долару ($
) повинен завершувати підказку командного рядка для оболонки непривілейованого користувача, тоді як символ фунта (#
) повинен завершувати підказку командного рядка для командної оболонки суперкористувача (root
). Наполегливо рекомендуємо, щоб кінцевий символ будь-якої підказки ніколи не змінювався з цього “універсально зрозумілого” стандарту, оскільки ця специфікація використовується в навчальних матеріалах, включно з цим курсом.
Warning
|
Ніколи не перемикайтеся на суперкористувача ( |
Яка найбільша проблема з використанням su
для перемикання на суперкористувача (root
)? Якщо сеанс звичайного користувача було скомпрометовано, пароль суперкористувача (root
) може бути перехоплений. Ось в чому полягає різниця між “Змінити користувача” та “Зробити себе суперкористувачем”:
$ cat /sys/devices/virtual/dmi/id/board_serial cat: /sys/devices/virtual/dmi/id/board_serial: Permission denied $ sudo cat /sys/devices/virtual/dmi/id/board_serial [sudo] password for emma: /6789ABC/
Як видно з результатів вище, користувач намагається знайти серійний номер своєї системної плати. Однак у дозволі відмовлено, оскільки ця інформація позначена як привілейована.
Однак, використовуючи sudo
, користувач вводить свій власний пароль, щоб підтвердити, хто він є. Якщо він був авторизований у конфігурації sudoers
для виконання цієї команди з привілеями, з дозволеними параметрами, вона спрацює.
Tip
|
За замовчуванням перша авторизована команда |
Файли контролю доступу
Майже всі операційні системи мають набір місць для зберігання засобів контролю доступу. У Linux це, як правило, текстові файли, розташовані в каталозі /etc
, де повинні зберігатися файли конфігурації системи. За замовчуванням цей каталог доступний для читання всім користувачам системи, але доступний для запису лише для користувача root.
Основні файли, пов’язані з обліковими записами користувачів, атрибутами та контролем доступу:
/etc/passwd
-
У цьому файлі зберігається основна інформація про користувачів у системі, включаючи UID і GID, домашній каталог, оболонка тощо. Незважаючи на назву, паролі тут не зберігаються.
/etc/group
-
У цьому файлі зберігається основна інформація про всі групи користувачів у системі, такі як назва групи, GID та учасники групи.
/etc/shadow
-
Тут зберігаються паролі користувачів. Для безпеки вони хешовані.
/etc/gshadow
-
Цей файл зберігає більш детальну інформацію про групи, включаючи хешований пароль, який дозволяє користувачам тимчасово стати членом групи, список користувачів, які можуть стати членом групи в певний час і список адміністраторів групи.
Warning
|
Ці файли не призначені для редагування і ніколи не повинні редагуватися безпосередньо. У цьому уроці розглядається лише інформація, що зберігається в цих файлах, а не редагування цих файлів. |
За замовчуванням кожен користувач може зайти до /etc
і прочитати файли /etc/passwd
і /etc/group
. Також за замовчуванням жоден користувач, крім root
, не може читати файли /etc/shadow
або /etc/gshadow
.
Існують також файли, пов’язані з основним підвищенням привілеїв у системах Linux, такі команди як su
та sudo
. За замовчуванням вони доступні лише для користувача root.
/etc/sudoers
-
Цей файл визначає, хто і як може використовувати команду
sudo
. /etc/sudoers.d
-
Цей каталог може містити файли, які доповнюють налаштування у файлі
sudoers
.
З точки зору іспиту LPI Linux Essentials, просто знайте шлях та ім’я файлу конфігурації sudo за замовчуванням, /etc/sudoers
. Його конфігурація виходить за рамки цих матеріалів.
Warning
|
Незважаючи на те, що |
/etc/passwd
Файл /etc/passwd
зазвичай називають “файлом паролів”. Кожен рядок містить кілька полів, які завжди розділені двокрапкою (:
). Незважаючи на назву, фактичний односторонній хеш пароля в даний час не зберігається в цьому файлі.
Типовий синтаксис рядка в цьому файлі такий:
USERNAME:PASSWORD:UID:GID:GECOS:HOMEDIR:SHELL
Де:
USERNAME
-
Ім’я користувача або логін (ім’я), наприклад,
root
,nobody
,emma
. PASSWORD
-
Застаріле розташування хешу пароля. Майже завжди
x
, що вказує на те, що пароль зберігається у файлі/etc/shadow
. UID
-
Ідентифікатор користувача (UID), наприклад,
0
,99
,1024
. GID
-
Ідентифікатор групи (GID), наприклад,
0
,99
,1024
. GECOS
-
Список CSV інформації про користувача, включаючи ім’я, місцезнаходження, номер телефону. Наприклад:
Emma Smith, 42 Douglas St, 555.555.5555
HOMEDIR
-
Шлях до домашнього каталогу користувача, наприклад
/root
,/home/emma
тощо. SHELL
-
Оболонка за замовчуванням для цього користувача, наприклад
/bin/bash
,/sbin/nologin
,/bin/ksh
тощо.
Наприклад, наступний рядок описує користувача emma
:
emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555:/home/emma:/bin/bash
Розуміння поля GECOS
Поле GECOS містить три (3) або більше полів, розділених комою (,
), відомий як список значень, розділених комами (CSV, Comma Separated Values). Хоча примусового стандарту немає, поля зазвичай розташовані в такому порядку:
ІМ'Я, МІСЦЕ РОЗТАШУВАННЯ, КОНТАКТНА ІНФОРМАЦІЯ
Де:
ІМ’Я
-
це “Повне ім’я” користувача або “Назва програмного забезпечення”, у випадку облікового запису служби.
МІСЦЕ РОЗТАШУВАННЯ
-
зазвичай це фізичне місцезнаходження користувача в будівлі, номер кімнати або контактний відділ чи особа у випадку облікового запису служби.
КОНТАКТНА ІНФОРМАЦІЯ
-
перелічує контактну інформацію, наприклад домашній чи робочий номер телефону.
Додаткові поля можуть містити додаткову контактну інформацію, наприклад, домашній номер або адресу електронної пошти. Щоб змінити інформацію в полі GECOS, скористайтеся командою chfn
і дайте відповіді на запитання, як показано нижче. Якщо після імені команди не вказано ім’я користувача, ви зміните інформацію для поточного користувача:
$ chfn Changing the user information for emma Enter the new value, or press ENTER for the default Full Name: Emma Smith Room Number []: 42 Work Phone []: 555.555.5555 Home Phone []: 555.555.6666
/etc/group
Файл /etc/group
містить поля, які завжди розділені двокрапкою (:
), зберігаючи основну інформацію про групи в системі. Іноді його називають “файлом груп”. Синтаксис кожного рядка такий:
NAME:PASSWORD:GID:MEMBERS
Де:
NAME
-
це назва групи, наприклад,
root
,users
,emma
тощо. PASSWORD
-
застаріле розташування додаткового хешу пароля групи. Майже завжди
x
, що вказує на те, що пароль (якщо визначено) зберігається у файлі/etc/gshadow
. GID
-
ID групи (GID), наприклад,
0
,99
,1024
. MEMBERS
-
розділений комами список імен користувачів, які є членами групи, наприклад
jsmith,emma
.
У прикладі нижче показано рядок, що містить інформацію про групу students
:
students:x:1023:jsmith,emma
Користувача не потрібно вказувати в полі членів групи, якщо група є основною групою для користувача. Якщо користувач зазначений у списку, це є зайвим, тобто функціональність не змінюється, вказаний він в групі чи ні.
Note
|
Використання паролів для груп виходить за рамки цього розділу, однак, якщо визначено, хеш паролів зберігається у файлі |
/etc/shadow
У наступній таблиці перелічено атрибути, які зберігаються у файлі /etc/shadow
, який зазвичай називають "файлом тіні". Файл містить поля, які завжди розділені двокрапкою (:
). Хоча файл містить багато полів, більшість із них виходять за рамки цього уроку, окрім перших двох.
Основний синтаксис рядку в цьому файлі:
USERNAME:PASSWORD:LASTCHANGE:MINAGE:MAXAGE:WARN:INACTIVE:EXPDATE
Де:
USERNAME
-
Ім’я користувача (так само, як в
/etc/passwd
), наприклад,root
,nobody
,emma
. PASSWORD
-
Односторонній хеш пароля, включаючи додавання солі. Наприклад:
!!
,!$1$01234567$ABC…
,$6$012345789ABCDEF$012…
. LASTCHANGE
-
Дата останньої зміни пароля у днях після “епохи”, наприклад,
17909
. MINAGE
-
Мінімальний термін дії пароля у днях.
MAXAGE
-
Максимальний термін дії пароля у днях.
WARN
-
Період попередження до закінчення терміну у днях дії паролю.
INACTIVE
-
Максимальний термін дії пароля у днях після закінчення терміну дії.
EXPDATE
-
Дата закінчення терміну дії пароля у днях після
епохи
.
У наведеному нижче прикладі ви можете побачити зразок запису з файлу /etc/shadow
. Зауважте, що деякі значення, такі як INACTIVE
і EXPDATE
, не визначені.
emma:$6$nP532JDDogQYZF8I$bjFNh9eT1xpb9/n6pmjlIwgu7hGjH/eytSdttbmVv0MlyTMFgBIXESFNUmTo9EGxxH1OT1HGQzR0so4n1npbE0:18064:0:99999:7:::
“Епохою” системи POSIX визначено опівніч (0000) за універсальним часом (UTC, Universal Coordinate Time) четвер, 1 січня 1970 року. Більшість дат і часу POSIX вказано в секундах з моменту “епохи” або в регістрі файлу /etc/shadow
у днях після “епохи”.
Note
|
Файл тіні призначений для читання лише суперкористувачем і вибраними основними службами аутентифікації системи, які перевіряють односторонній хеш паролю під час входу або в інший час автентифікації. |
Хоча існують різні рішення для аутентифікації, елементарним методом зберігання паролів є одностороння хеш-функція. Це робиться для того, щоб пароль ніколи не зберігався в системі у вигляді відкритого тексту, оскільки функція хешування не є оборотною. Ви можете перетворити пароль на хеш, але (в ідеалі) неможливо перетворити хеш назад на пароль.
В більшості випадків метод грубої сили потрібен для перебору хешів всіх комбінацій паролю, доки один не підійде. Щоб зменшити проблему зламу хешу пароля в одній системі, системи Linux використовують випадкову “сіль” для хешу кожного пароля користувача. Таким чином, хеш для пароля користувача в одній системі Linux зазвичай не буде таким, як в іншій системі Linux, навіть якщо пароль той самий.
У файлі /etc/shadow
пароль може мати кілька форм. Ці форми зазвичай включають наступне:
!!
-
Це означає, що обліковий запис “вимкнено” (автентифікація неможлива), без збереженого хешу пароля.
!$1$01234567$ABC…
-
“Вимкнений” обліковий запис (через початковий знак оклику) із попередньою функцією хешування, збереженими хеш-сіллю та хеш-рядком.
$1$0123456789ABC$012…
-
“Ввімкнений” обліковий запис із збереженою хеш-функцією, хеш-сіллю та хеш-рядком.
Хеш-функції, хеш-сіль і хеш-рядок розташовані попереду і після символу долара ($
). Довжина хеш-солі має становити від восьми до шістнадцяти (8-16) символів. Приклади трьох найпоширеніших:
$1$01234567$ABC…
-
Хеш-функція MD5 (
1
) з прикладом довжини хешування вісім. $5$01234567ABCD$012…
-
Хеш-функція SHA256 (
5
) з прикладом довжини хеша дванадцять. $6$01234567ABCD$012…
-
Хеш-функція SHA512 (
6
) з прикладом довжини хеша дванадцять.
Note
|
Хеш-функція MD5 вважається криптографічно незахищеною з сучасним (2010-і роки і пізніше) рівнем ASIC і навіть загальною продуктивністю SIMD обчислень. Наприклад, Федеральні стандарти обробки інформації США (FIPS, Federal Information Processing Standards) не дозволяють використовувати MD5 для будь-яких криптографічних функцій, лише для обмежених випадків, але не для перевірки цілісності цифрових підписів або схожих цілей. |
З точки зору цілей та іспиту LPI Linux Essentials, просто зрозумійте, що хеш пароля для локального користувача зберігається лише у файлі /etc/shadow
, який служби аутентифікації можуть тільки читати або суперкористувач може змінювати за допомогою інших команд.
Вправи до посібника
-
Розглянемо наступне виведення команди
id
:$ id emma uid=1000(emma) gid=1000(emma) groups=1000(emma),4(adm),5(tty),10(uucp),20(dialout),27(sudo),46(plugdev)
У яких файлах зберігаються наступні атрибути?
UID and GID
Groups
-
Крім того, в якому файлі зберігається пароль користувача?
-
-
Який із наведених нижче типів криптографії використовується за замовчуванням для локального зберігання паролів у системі Linux?
-
Асиметричний
-
Односторонній хеш
-
Симетричний
-
ROT13
-
-
Якщо обліковий запис має ідентифікатор користувача (UID), за значенням менше ніж 1000, який це тип облікового запису?
-
Як ви можете отримати список активних логінів у вашій системі та їх кількість?
-
За допомогою команди
grep
ми отримали результат нижче з інформацією про користувачаemma
.$ grep emma /etc/passwd emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555,:/home/emma:/bin/ksh
Заповніть пропуски таблиці відповідною інформацією, використовуючи результати попередньої команди.
Ім’я користувача
Пароль
UID
Основний GID
GECOS
Домашній каталог
Оболонка
Дослідницькі вправи
-
Порівняйте результати
last
зw
іwho
. Які деталі відсутні в кожній із команд порівняно з іншими? -
Спробуйте виконати команди
who
таw -his
.-
Яку інформацію було видалено з виведення команди
w
з параметрами “no header” (-h
) і “short” (-s
)? -
Яку інформацію було додано у вихідні дані команди
w
з опцією “ip address” (-i
)?
-
-
Який файл є файлом, що зберігає односторонній хеш пароля облікового запису користувача?
-
Який файл містить список груп, членом яких є обліковий запис користувача? Яку логіку можна використати для складання списку груп, членом яких є обліковий запис користувача?
-
Один або більше (1+) з наступних файлів за замовчуванням недоступні для читання звичайними непривілейованими користувачами. Який?
-
/etc/group
-
/etc/passwd
-
/etc/shadow
-
/etc/sudoers
-
-
Як змінити оболонку входу поточного користувача на оболонку Корна (
/usr/bin/ksh
) у неінтерактивному режимі? -
Чому домашній каталог користувача
root
не розміщено в каталозі/home
?
Підсумки
У цьому уроці ми відкрили для себе базу даних користувачів і груп Linux. Ми дізналися про найважливіші властивості користувачів і груп, включаючи їх імена та числові ідентифікатори. Ми також дослідили, як хешування паролів працює в Linux і як користувачів призначають до груп.
Вся ця інформація зберігається в наступних чотирьох файлах, які забезпечують найпростіші локальні засоби контролю доступу до системи Linux:
/etc/passwd
-
Всі атрибути POSIX облікового запису локального системного користувача, окрім хешу пароля, доступні для читання всіма.
/etc/group
-
Усі атрибути POSIX облікового запису локальної системи доступні всім.
/etc/shadow
-
Усі хеші паролів локальних системних користувачів (та інформація про закінчення терміну дії), недоступні для читання нікому (лише обраним процесам).
/etc/sudoers
-
Містить всю інформацію про підвищення/дозвіл локальних привілеїв системи за допомогою команди
sudo
.
На цьому уроці розглядались наступні команди:
id
-
Виводить реальні (або ефективні) ідентифікатори користувачів і груп.
last
-
Виводить список користувачів, які входили останніми.
who
-
Виводить список користувачів, які наразі ввійшли в систему.
w
-
Подібно до
who
, але виводить ще додаткову інформацію. su
-
Перемикає на іншого користувача з оболонкою входу або запускає команди від імені цього користувача, з використанням його паролю.
sudo
-
Змінює користувача (або суперкористувача), якщо у вас є на це права, поточний користувач вводить свій власний пароль (якщо потрібно), щоб підвищити привілеї.
chsh
-
Змінює оболонку користувача.
chfn
-
Змінює інформацію про користувача в полі GECOS.
Відповіді до вправ посібника
-
Розглянемо наступне виведення команди
id
:$ id emma uid=1000(emma) gid=1000(emma) groups=1000(emma),4(adm),5(tty),10(uucp),20(dialout),27(sudo),46(plugdev)
У яких файлах зберігаються наступні атрибути?
UID and GID
/etc/passwd
Groups
/etc/group
-
Крім того, в якому файлі зберігається пароль користувача?
Хешований пароль користувача зберігається в
/etc/shadow
.
-
-
Який із наведених нижче типів криптографії використовується за замовчуванням для локального зберігання паролів у системі Linux?
За замовчуванням для зберігання паролів використовується односторонній хеш.
-
Якщо обліковий запис має ідентифікатор користувача (UID), за значенням менше ніж 1000, який це тип облікового запису?
Облікові записи з UID нижчим за 1000, як правило, є системними обліковими записами.
-
Як ви можете отримати список активних логінів у вашій системі та їх кількість?
Використовуйте команду
w
. Окрім списку всіх активних логінів, вона також покаже інформацію, таку як кількість користувачів, які ввійшли в систему, завантаження системи та час роботи. -
За допомогою команди
grep
ми отримали результат нижче з інформацією про користувачаemma
.$ grep emma /etc/passwd emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555,:/home/emma:/bin/ksh
Заповніть пропуски таблиці відповідною інформацією, використовуючи результати попередньої команди.
Ім’я користувача
emma
Пароль
x
- завжди має бутиx
для дійсного, активного входу користувачаUID
1000
Основний GID
1000
GECOS
Emma Smith,42 Douglas St,555.555.5555
Домашній каталог
/home/emma
Оболонка
/bin/ksh
Відповіді до дослідницьких вправ
-
Порівняйте результати
last
зw
іwho
. Які деталі відсутні в кожній із команд порівняно з іншими?Інструменти
w
таwho
виводять лише поточних користувачів, які ввійшли в систему, тоді якlast
також містить список користувачів, які відключилися. Командаw
виводить інформацію про використання системи, а командаwho
– ні. -
Спробуйте виконати команди
who
таw -his
.-
Яку інформацію було видалено з виведення команди
w
з параметрами “no header” (-h
) і “short” (-s
)?Заголовок не друкується, що корисно для синтаксичного аналізу, і, відповідно, час входу та інформація про вибір ЦП не відображаються.
-
Яку інформацію було додано у вихідні дані команди
w
з опцією “ip address” (-i
)?Ця команда виводить IP-адресу, замість того, щоб спробувати застосувати DNS-резольвер та вивести ім’я хоста. Опція
w
надає кращий результат при виведенні інформації за замовчуванням для командиlast
.
-
-
Який файл є файлом, що зберігає односторонній хеш пароля облікового запису користувача?
У файлі
/etc/shadow
зберігається односторонній хеш пароля облікового запису користувача, оскільки він не читається звичайним непривілейованим обліковим записом користувача, на відміну від файлу/etc/passwd
. -
Який файл містить список груп, членом яких є обліковий запис користувача? Яку логіку можна використати для складання списку груп, членом яких є обліковий запис користувача?
Файл
/etc/group
містить CSV-список імен користувачів, які зазначені в останньому полі “members” будь-якого рядка файлу.Будь-який рядок у файлі
/etc/group
, де користувач зазначений в останньому полі “members”, означатиме, що користувач є членом цієї групи - за умови правильного форматування (розділений CSV). Крім того, членство в основній групі користувача у файлі/etc/passwd
також матиме відповідний запис у файлі/etc/group
як для назви групи, так і для GID. -
Один або більше (1+) з наступних файлів за замовчуванням недоступні для читання звичайними непривілейованими користувачами. Який?
-
/etc/group
-
/etc/passwd
-
/etc/shadow
-
/etc/sudoers
Файли
/etc/shadow
і/etc/sudoers
за замовчуванням недоступні для читання, за винятком окремих служб або суперкористувача. Ці відповіді будуть залежати від систем та імен користувачів, які використовуються в лабораторії.
-
-
Як змінити оболонку входу поточного користувача на оболонку Корна (
/usr/bin/ksh
) у неінтерактивному режимі?$ chsh -s /usr/bin/ksh
-
Чому домашній каталог користувача
root
не розміщено в каталозі/home
?Тому що обліковий запис
root
необхідний для усунення несправностей та виправлення помилок, які можуть включати проблеми файлової системи, пов’язані з каталогом/home
. У таких випадкахroot
має бути повністю функціональним, навіть якщо файлова система/home
ще недоступна.