Личный блог Suvan`a.

Работая и играя с Linux... И что из этого иногда получается.

Ограничение прав пользователей

Рубрика: Безопасность -> Основные меры защиты Linux
Метки: |
Четверг, 7 мая 2009 г.
Просмотров: 7159

Доступные для записи файлы.

     В любой системе наверняка найдется полно файлов, которые доступны для записи каждому пользователю. Нужно найти такие файлы и изменить к ним права доступа. В первую очередь группу риска представляют файлы в каталогах /etc, /bin и /usr. Найти такие файлы просто:

# find / -perm 002 -type f

     В каталоге /dev есть много файлов устройств, доступных для записи пользователям, следовательно, нужно ограничить поиск простыми файлами (-type f).


     SUID- и SGID-файлы.

     Потенциальную угрозу безопасности системы составляют SUID- и SGID-файлы. Нужно непрерывно вести учет этих файлов на случай, если хакер внезапно создаст новые SUID-файлы, которые позволят ему получить права root'a.

     Найти все SUID-файлы пользователя root можно с помощью команды:

# find / -user root -perm -4000

     А SGID-файлы — командой:

# find / -user root -perm -4000

     Найдя такой файл (нужно точно знать, что флаг SUID для этого файла не был устанавлен), нужно сбросить флаг SUID. Это делается крайне просто:

# chmod -s имя_файла

     Разделы и точки монтирования.

     Для безопасности всей системы нужно обязательно продумать схему разбиения жесткого диска, и правильно указать опции монтирования. Базовая схема разбиения обычно состоит из трех разделов: раздела свопинга (swap), загрузочного (/boot) и корневого (/).

     Порой на серверах создаются разделы для /var и /tmp, что дает возможность разместить эти каталоги на разных жестких дисках и повысить производительность системы, увеличив скорость передачи и уменьшив время доступа.

     Есть и еще одно преимущество размещения /var в отдельном разделе или на жестком диске. Хакер может попытаться переполнить протоколы системы (каталог /var/log). Если каталог /var будет размещен на другом жестком диске или хотя бы в другом разделе, хакер переполнит только его, но не корневой раздел. Рекомендуется создать также разделы для каталогов /home (пользовательские каталоги) и /usr.

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

/dev/hdal swap swap defaults 0 0

/dev/hda2 / ext3 defaults 1 1

/dev/hdcl /hdcl auto defaults 1 0

/dev/hdd2 /hdd2 auto defaults 1 0

/dev/cdrom /mnt/cdrom iso9660 defaults 1 0

/dev/fd0 /mnt/floppy auto noauto,owner,ro 0 0

devpts /dev/pts devpts gid=5,mode=620 0 0

proc /proc proc defaults 0 0

     Здесь четыре раздела подмонтировано с опциями по умолчанию (default), что означает доступ для чтения/записи, использование квотирования и SUID-файлов. Для CD-ROM установлены опции noauto (запрещает автоматическое монтирование), owner (размонтирование разрешается только тому пользователю, который подмонтировал это устройство), а также ro (только чтение).

     Некоторые полезные опции монтирования:

  • noquota — запрещает квотирование в этом разделе;
  • nosuid — запрещает установку битов SUID/SGID на файлах;
  • nodev — не признает блочные и символьные устройства;
  • nоехес — игнорирует бит выполнения на двоичных файлах;
  • — раздел доступен только для чтения.

     Разделы /tmp, /var, /home и /boot рекомендуется монтировать со следующими опциями:

  • /tmp — noexec,nosuid;
  • /var — noexec,nodev;
  • /home — nosuid,nodev;
  • /boot — rо (при перекомпиляции ядра придется перемонтировать этот раздел как rw — read/write).

     Атрибуты файловой системы ЕХТ2/ЕХТЗ.

     Один из недостатков файловой системы Linux - это то, что владельцу файла всегда предоставляются все права доступа к файлу. Рассмотрим следующий пример:

-r--r--r-- 1 root root 56 Feb 27 2004 test

     Файл доступен только для чтения: и для владельца, и для всех остальных пользователей. Но пользователь root (он же — владелец) по прежнему может записывать данные в этот файл.

     Файловая система ext2 (и ext3 - журналируемая версия ext2) дают возможность решить этот недостаток с помощью использования атрибутов файлов, которые можно установить командой chattr:

  • а — файл можно открыть только для добавления данных в конец файла (режим append). Файл нельзя удалить или обрезать (truncate). Если атрибут а установлен для каталога, то в этом каталоге можно создавать или изменять файлы, но нельзя их удалять.
  • i — файл нельзя изменить. Если применяется для каталога, то вы можете редактировать существующие в каталоге файлы, но не можете их удалять или создавать новые файлы в этом каталоге.

     Эти атрибуты не имеют ничего общего со стандартными правами доступа Unix. Они работают только на файловой системе ext2/ext3. Кроме того, атрибуты не могут быть выведены командой ls, для их просмотра используется команда lsattr.

     Атрибут а можно установить для файлов журналов, чтобы никто ничего не смог удалить из журнала. При этом разрешено добавление файлов в журнал:

# chattr +a /var/log/apache/access.log

# chattr +a /var/log/apache/error.log

     При просмотре каталога с помощью ls ничего странного не будет заметно — как будто бы этих атрибутов и нет:

$ ls /var/log/apache -l

total 7468

-rw-r—r—1 root root 820004 Apr 23 17:06 access.log

-rw-r—r—1 root root 1820004 Apr 24 00:06 error.log

     Теперь любая задача демона crоn по ротации журналов невозможна.

     Атрибут i можно установить для конфигурационных файлов, но только после того, как внесение изменений в эти файл завершено полностью.

     Снять атрибуты можно так:

# chattr -а файл

# chattr -i файл