пʼятницю, 20 серпня 2010 р.

Поради з безпеки в Linux


У даній замітці ми розглянемо, як посилити безпеку вашої Linux-системи.

Безпека BIOS
Завжди встановлюйте на BIOS пароль для заборони зміни установок і забороняйте завантаження з дискети. Це заблокує спробу завантажити систему зі спеціального завантажувального диска і захистить вас від людей, які намагаються змінити налаштування BIOS: можливість завантаження з дискети або завантаження сервера без запиту пароля.

Безпека LILO
Додайте в файл / etc / lilo.conf три параметри: time-out, restricted і password. Ці опції вказують на необхідність введення пароля, якщо в процесі завантаження LILO будуть вказані такі опції завантаження, як "linux single".
Крок 1
Відредагуйте файл lilo.conf (vi / etc / lilo.conf) і додати або редагувати три опції:
boot = / dev / hda
map = / boot / map
install = / boot / boot.b
time-out = 00 # змініть цей рядок на 00
prompt
Default = linux
restricted # додайте цей рядок
password = # додайте цей рядок і вкажіть ваш пароль
image = / boot/vmlinuz-2.2.14-12
label = linux
initrd = / boot/initrd-2.2.14-12.img
root = / dev/hda6
read-only
Крок 2
Файл / etc / lilo.conf повинен бути доступний тільки користувачу root, так як він містить незашифрований пароль:
[Root @ kapil /] # chmod 600 / etc / lilo.conf
Крок 3
Щоб зміни вступили в силу, виконайте команду:
[Root @ kapil /] # / sbin / lilo-v
Крок 4
Ще одним заходом щодо посилення безпеки може стати установка ознаки "незмінності" (immutable - "i") файлу / etc / lilo.conf за допомогою команди chattr. Для цього скористайтеся командою:
[Root @ kapil /] # chattr + i / etc / lilo.conf
Це запобігає будь-які зміни (випадкові і не тільки) у файлі lilo.conf.

Відключіть усі спеціальні облікові записи
Видаліть із системи всіх користувачів і всі групи, які не використовуються: наприклад, lp, sync, shutdown, halt, news, uucp, operator, games, gopher і т.д.
Для видалення користувача використовуйте команду:
[Root @ kapil /] # userdel lp
Для видалення групи:
[Root @ kapil /] # groupdel lp

Вибирайте правильний пароль
Перш ніж вибирати пароль, виконайте наступні рекомендації.
Довжина пароля: після установки Linux мінімально можлива довжина пароля за замовчуванням - 5 символів. Цього недостатньо, повинно бути 8. Відредагуйте файл login.defs (vi / etc / login.defs) і змініть наступну рядок:
PASS_MIN_LEN травня
на
PASS_MIN_LEN 8
Файл login.defs - конфігураційний файл для програми login.

Увімкніть підтримку тіньових паролів
Увімкніть можливість використання тіньових [shadow] паролів. Для включення підтримки тіньових паролів у вашій системі можна використовувати утиліту / usr / sbin / authconfig. Якщо хочете конвертувати існуючі паролі та групи в тіньові, то використовуйте команди pwconv, grpconv відповідно.

Обліковий запис root'а
Обліковий запис root - найбільш привілейована в Unix. Коли адміністратор забуває вийти з системи, то система може автоматично закрити консоль після заданого періоду неактивності. Для того щоб цього досягти, потрібно виставити значення в секундах в спеціальній змінної TMOUT. Відредагуйте файл vi / etc / profile, додавши в нього такий рядок:
TMOUT = 3600
Значення, вказане у змінній TMOUT у секундах, - це один годину (60 * 60 = 3600). Якщо вказати цей рядок в / etc / profile, то консоль будь-якого користувача системи автоматично закриється після години відсутності активності. У файлі ~ /. Bashrc ви можете встановити цю змінну для кожного користувача індивідуально. Щоб зміни вступили в силу, необхідно вийти з системи і ввійти в неї знову.

Вимкніть консольний (console-equivalent) доступ для звичайних користувачів
На вашому сервері відключіть консольний доступ звичайних користувачів до таких програм, як shutdown, reboot і halt. Щоб зробити це, виконайте команду:
[Root @ kapil /] # rm-f / etc / security / console.apps /

Вимкніть і деінсталюйте всі невживані сервіси
Щоб позбавити себе від зайвих хвилювань, від'єднайте та деінсталюйте всі сервіси, які ви не використовуєте. Перегляньте файл / etc / inetd.conf і вимкніть непотрібні мережеві сервіси, закоментувати їх (додавши # в початок рядка), і надішліть демонові inetd сигнал SIGHUP для того, щоб зміни вступили в силу. Для цього виконайте наступне:
Крок 1
Змініть права доступу до файлу / etc / inetd.conf на 600, щоб читати і писати в нього міг тільки root.
[Root @ kapil /] # chmod 600 / etc / inetd.conf
Крок 2
Переконайтеся, що власником файлу / etc / inetd.conf є root.
Крок 3
Відредагуйте inetd.conf (vi / etc / inetd.conf), а шнур ті сервіси, які ви не використовуєте (ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger, auth і т.д.). Відключення непотрібних сервісів знижує рівень ризику злому системи.
Крок 4
Пошліть HUP сигнал демонові inetd
[Root @ kapil /] # killall-HUP inetd
Крок 5
Зробіть файл / etc / inetd.conf недоступним, використовуючи команду chattr, щоб ніхто не міг модифіковані цей файл. Виконайте команду:
[Root @ kapil /] # chattr + i / etc / inetd.conf
Це запобігає будь-які зміни файлу inetd.conf. Тільки одна людина може зняти атрибут - це суперкористувач root. Для модифікації файлу потрібно зняти immutable-прапор. Це робиться наступного командою:
[Root @ kapil /] # chattr-i / etc / inetd.conf

TCP_WRAPPERS
Використовуючи TCP_WRAPPERS, можна зробити сервер більш захищеним від вторгнення. Краща політика - заборонити доступ до сервера всім хостам, помістивши в файл / etc / hosts.deny рядок "ALL: ALL @ ALL, PARANOID" і помістити список хостів, яким ви дозволяєте доступ до вашого сервера, в / etc / hosts.allow. TCP_WRAPPERS контролюється з двох файлів, і пошук у них припиняється при першому збігу.
Крок 1
Відредагуйте файл hosts.deny (vi / etc / hosts.deny) і додайте такі рядки:
# Відмовити в доступі всім
ALL: ALL @ ALL, PARANOID
Мається на увазі, що всі сервіси та хости блокуються, якщо їм не дозволено доступ в hosts.allow
Крок 2
Відредагуйте файл hosts.al-low (vi / etc / hosts.allow) і додайте в нього, наприклад, такий рядок:
ftp:202.54.15.99 foo.com
Клієнтської машині з ip-адресою 202.54.15.99 і ім'ям foo.com дозволений доступ до сервера через службу ftp.
Крок 3
tcpdchk - програма перевірки конфігурації tcpd wrapper. Вона переглядає конфігурацію tcp wrapper і повідомляє про всі потенційних і реальних проблемах, які зможе знайти. Після закінчення настройки запустіть програму tcpdchk:
[Root @ kapil /] # tcpdchk

Не давайте системі показувати issue-файл
Не показуйте issue-файл вашої системи при віддаленому підключенні. Для цього можна змінити опції запуску telnet у файлі / etc / inetd.conf. Рядок в / etc / inetd.conf
telnet stream tcp nowait root / usr / sbin / tcpd in.telnetd
буде виглядати так:
telnet stream tcp nowait root / usr / sbin / tcpd in.telnetd-h
Додавання прапорця-h наприкінці змушує демон виводити запрошення для входу в систему, не показуючи ніякої системної інформації. Крім того, я рекомендую використовувати, замість telnet, sshd.

Зміни у файлі / etc / host.conf
Файл / etc / host.conf містить настройки для бібліотеки розпізнавання імен (механізм перетворення імен вузлів мережі в ip-адреси і назад). Відредагуйте файл host.conf (vi / etc / host.conf) і додайте наступні рядки:
# Переглядати імена хостів спершу через DNS, потім у файлі / etc / hosts.
order bind, hosts
# Ми маємо машини з декількома ip-адресами.
multi on
# Перевірка ip-адрес на спуфінга.
nospoof on

Захист файлу / etc / services
Ви повинні встановити атрибут "i" у файлу / etc / services для запобігання неавторизованого видалення або додавання сервісів. Використовуйте команду:
[Root @ kapil /] # chattr + i / etc / services

Заборона для root входу з різних консолей
Файл / etc / securetty дозволяє вам вибирати, які TTY-пристрої користувач root буде використовувати для входу в систему. Відредагуйте файл / etc / securetty для відключення тих tty, які вам не потрібні (символ # на початку рядка).

Блокування отримання прав root за допомогою команди su
Команда su (Substitute User) надає вам можливість ставати іншими існуючими користувачами системи. Якщо ви хочете, щоб ніхто не міг отримати права користувача root або хочете обмежити використання команди su для певних користувачів, то додайте дві наступні рядки на початку файлу конфігурації su в каталозі / etc / pam.d /.
Крок 1
Відредагуйте файл su (vi / etc / pam.d / su) і додайте наступні два рядки на початку файлу:
auth sufficient / lib / security / pam_rootok. so debug
auth required / lib / security / Pam_wheel.so group = wheel
Другий рядок має на увазі, що тільки користувачі групи wheel можуть отримати права root за допомогою su. Ви можете додати користувачів до групи wheel - і тільки ці користувачі зможуть отримувати через su права суперкористувача.

Ведення логів командної оболонки
Bash зберігає до 500 введених раніше команд у файлі ~ /. Bash_ history, спрощуючи повторне використання команд. Кожен користувач, який має в системі обліковий запис, має і цей файл у домашньому каталозі. Bash може зберігати менше число команд, ніж вказано вище, і видаляти їх при виході користувача з системи.
Крок 1
Рядки HISTFILESIZE і HISTSIZE у файлі / etc / profile визначають розмір файлу. Bash_history для всіх користувачів системи. Я настійно рекомендую встановити значення HISTFILESIZE і HISTSIZE не більше 30. Відредагуйте файл profile (vi / etc / profile) і змініть рядка на:
HISTFILESIZE = 30
HISTSIZE = 30
Це дозволить файлу. Bash_history зберігати не більше 30 команд.
Крок 2
Адміністратор може додати у файл / etc / skel / .bash_logout рядок rm-f $ HOME / .bash_history, яка буде видаляти файл. Bash_history кожен раз, коли користувач буде виходити із системи. Відредагуйте файл. Bash_logout (vi / etc / skel / .bash_logout) і додайте такий рядок:
rm-f $ HOME / .bash_history

Вимкніть команду перезавантаження системи з клавіатури (Ctrl + Alt + Del)
Щоб зробити це, закоментуйте наступну рядок у файлі / etc / inittab:
ca:: ctrlaltdel: / sbin / shutdown-t3-r now
Для того, щоб зміни вступили в силу, виконайте команду:
[Root @ kapil /] # / sbin / init q

Зафіксуйте права на скрипти в каталозі / etc / rc.d / init.d
Зафіксуйте права доступу для скриптів, які відповідальні за запуск і зупинення всіх процесів, необхідних для роботи в процесі завантаження:
[Root @ kapil /] # chmod-R 700 / etc / rc.d / init.d / *
Ця команда надає можливість читати, писати і виконувати скрипти тільки користувачу root.

Приховування вашої системної інформації
За замовчуванням, коли ви входите в систему, вам повідомляють назва дистрибутива Linux, версію, версію ядра та ім'я сервера. Кракерам достатньо і такої інформації про сервер. Краще залишити користувачеві тільки запрошення "Login:" і все.
Крок 1
Відредагуйте файл / etc / rc.d / rc.local і поставте "#" перед наступними рядками:
# This will overwrite / etc / issue at every boot. So, make any changes you
# Want to make to / etc / issue here or you will lose them when you reboot.
# Echo ""> / etc / issue
# Echo "$ R">> / etc / issue
# Echo "Kernel $ (uname-r) on $ a $ (uname-m)">> / etc / issue
#
# Cp-f / etc / issue / etc / issue.net
# Echo>> / etc / issue
Крок 2
Видаліть також наступні файли: issue.net і issue в каталозі / etc:
[Root @ kapil /] # rm-f / etc / issue
[Root @ kapil /] # rm-f / etc / issue.net

Вимкніть невикористовувані програми з битами SUID / SGID
Постійні користувачі мають можливість запускати програми з правами root, якщо у них виставлено біт SUID. Системний адміністратор повинен мінімізувати використання таких програм (SUID / SGID) і відключити ті програми, які не потрібні.
Крок 1
Щоб знайти програми з власником root та встановленим бітом 's', скористайтеся командою:
[Root @ kapil /] # find /-type f (-perm -04000-o-perm -02000)-exec ls-lg ();
Для відключення у вибраних програм біта suid виконайте:
[Root @ kapil /] # chmod as [ім'я програми]

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

Немає коментарів:

Дописати коментар

!-- Start of Woopra Code -->