Личен блог на Георги Христов

Интерфейс към терзанията на един гийк

Linux сигурност – файлови системи

До голяма степен за сигурност в Linux се разчита на файловата система. Linux е операционната система, която поддържа най-много файлови системи. Това става възможно чрез виртуална файлова система (VFS).

Защо е толкова важна файловата система в  Linux? – Най-вероятно сте чували, че в Linux всичко е файлове. Това е така, даже устройствата са файлове. Поради тази причина от файловата система зависи до голяма степен сигурността на операционната система.  От правата върху файловете зависи дали имаме право да записваме, четем или изпълняваме даден файл. Например, ако е инсталирана дадена програма, но аз нямам права за да стартирам файла,  няма да мога да пусна програмата. Друг пример: трябва да копирам музика от външна флаш памет, при което слагам флашката и тя се монтира и стартира автоматично чрез незнаен скрип троянски кон. Естествено аз съм ламер със самучувствие и съм чувал и чел по форуми в интернет, че за Linux няма вируси и по тази причина не съм си инсталирал антивирусна програма.  Разбира се, не че сам нямаше да се справя, но един батко ми показа как да си инсталирам това прочуто животно “линух”, за което напоследък всички говорят и колко е cool,  ако имаш бърза видео карта. Та той ограничи  разни директории, които за първи път видях тогава. Когато го правеше му се присмях и му казах, че се е побъркал. Сега когато ми изписа някакво съобщение, че се копира някакъв файл в една от директориите, които пича бараше, а аз нямам право да записвам в тази директория се сещам защо го е направил. Оказа се, че от толкава хвалене съседа ми е вдигнал мерника и е решил да ми покаже, че разбира повече от мен. Намерил един от малкото троянски коне за Linux в интернет и си е написал малък скрип, който го копира от флашката, на  която ми даде най-хитовите чалга и рап и хаус и метъл и т.н. Така без да подозирам баткото ме е защититил от разни scrip kidies.

За правата върху файлове и директории няма да обяснявам, тъй като предполагам, че всеки, който се е сблъсквал с Linux ги разбира или знае  къде да чете по темата. Все пак ще спомена някои команди: chmod, chown, chgrp, umask, chattr, chacl.

След като сме запознати със структурата на файловата система и основните команди в конзолата можем да почнем да търсим за файлове със suid и sgid битове. Най-просто казано това значи, че те могат да бъдат изпълнявани с по-високи привилигии, което е опасно за системата. Добре е да няма такива програми защото при “хакване” на такава програма атакуващият получава root права и всичко последващо. Ето как се търсят такива файлове:

за suid:

find / -perm /4000

или

find / -perm +4000 #този синтаксис отпада от употреба и е добре да се използва в по-стари системи, заменя се от този горе

или

find / -perm /u+s

За sgid e аналогично (/g+s или цифровото изражение 2000). По същият начин можем да търсим за директории със sticky bit и такива, в които могат записват всички. Няма да показвам как става.

Какво да правим когато се налага в директория, в която потребители имат всички права, а не искаме да изтриват файлове ? -Ползваме chattr с нужните опции. Например за логовете е подходящато да сложим бит append.

Минава време от първият ни сблъсък с Linux и започваме да параноясваме. Прочели сме по-голямата част от man pages и howto. Така стигаме до идеята да разделим твърдия диск не на един дял, а на нужния брой, така че всяка поддиректория на / да е отделна файлова система, монтирана с нужните параметри. Разбира се, ако не сме напълно параноясали или сме достатъчно умни и имаме знанията да го направим можем и да изберем примерно само /boot, /home, /usr и /tmp. Също така трябва да добавя, че това не е добър вариант за начинаещи потребители, а по-скоро за такива, които искат да си направят малък сървър. Какво бихме спечелили по този начин? – Ще започна със сигурността, все пак това е основната тема.

  • Ограничаваме атаки целящи запълване на твърдият диск с ненужна информация.
  • Улесняване при архивиране и възстановяване (някой, ако знае по-подходящите термини на български за backup & recovery да каже).
  • Стабилност, ефикастност и производителност. Малките файлови системи работят по-ефикасно. Освен това можем да ги тунинговаме според отделните нужди.
  • По-улеснено експериментиране.

Ето някои насоки:

  • / – добра идея е да е отделна файлова система, която се монтира напълно ограничена: nodev, noexec, nosuid, read-only. Това естествено води до доста големи ограничения и всички поддиректории ще трябва да се монтират като отделни файлови системи с включени нужните опции за всяка от тях.
  • /boot – много важна директория. В нея се намира ядрото на операцонната система. Препоръчителни опции: nodev, noexec, nodev  и read-only.
  • /bin – тук се намират голяма част от основните програми. По тази причина в никакъв случай не трябва да я монтираме с noxec. Ще пропуснем и nosuid. Read-only зависи от това колко сме мързеливи. Препоръчителни опции: nodev и евентуално read-only.
  • /dev – В никакъв случай не трябва да монтраме тази директория с nodev и read-only. За сметка на това е важна директория и добре да е на отделна файлова система. Препоръчителни опции: noexec, nosuid.
  • /etc – Излишно е да се монтира с read-only и да е в отделна файлова системи (но аз бих го направил). Тъй като обикнонно в Linux за разлика от някои Unix-подобни операционни системи няма програми не е проблем да я монтираме с препоръчителни опции: nodev, noexec, nosuid.
  • /home – Това ще е директорията, в която потребители могат да съхраняват своите файлове. Строго препоръчително е да е на отделна файлова система. Логично в никакъв случай няма да е read-only. Препоръчителни опции: nodev, noexec, nosuid.
  • /lib, /lib32, /lib64 – Не е лоша идея да е на отделна файлова система. В никакъв случай не трябва  да е noexec. Препоръчителни опции: nodev, nosuid и read-only.
  • /mnt – Не е важно да е на отделна файлова система. Тъй като тук ще се монтират устройствата за  външна памет е естествено да я монтираме с максимални ограничения, освен ако нямате нещо друго предвид. Препоръчителни опции: nodev, noexec, nosuid и read-only.
  • /opt – Не е налична във всички дистрибуции. Ако е налична, тук се намират допълнителни неосновни програми. Препоръчителни опции: nodev.
  • /root – Мисля, че е излишно да коментирам. Препоръчителни опции: nodev.
  • /sbin – Препоръчителни опции: nodev и read-only.
  • /tmp – Често се използва от script kidies. Препоръчително е да е на отделна файлова система. Логично няма да  е read-only. Препоръчителни опции: nodev, noexec и nosuid.
  • /usr – Препоръчителни опции: nodev и read-only.
  • /var – Строго препоръчително да е отделна файлова система. Препоръчителни опции:  nodev, noexec и nosuid.

Тези ограничения ще затруднят начинаещите потребители най-вече при обновяване на системата. Също така за тях ще е по-лесно, ако предприемат разделянето на различни файлови системи преди инсталацията.

Винаги трябва да следим файловата система за интегритет. Софтуер няма да препоръчвам, но ще спомена, че нашумелия tripwire не е лесен за конфигуриране и вероятно е много по-лесно да се използват по-малки инструменти за хеширане, които има във всяка дистрибуция.

Важна част от сигурността е криптирането на всичката важна информация. Съвременния хардуер е достатъчно бърз за да не забавя работата ни, а същевременно да осигурява голяма сигурност. Тук единственото правилно решение според мен е LUKS.

Публикувано на | August 19, 2009 | 5 Коментара

Мнения и коментари

  • Добавете ме в Google+

  • Последни публикации

  • Последни коментари