Linux глазами хакера - Михаил Флёнов
Шрифт:
Интервал:
Закладка:
Любые лишние объекты могут оказаться фатальными для безопасности системы не только с точки зрения взлома, но и утечки информации. Например, файлы бухгалтерской отчетности должны быть доступны только для тех, кто с ними работает. Если показать эти документы всем, то финансовые данные, возможно, станут достоянием общественности, и это нежелательным образом отразится на благосостоянии компании.
Самое главное для защиты вашей системы — не дать пользователям возможность изменять системные файлы. В Linux основные конфигурационные файлы находятся в каталоге /etc. Только администратор root должен иметь право их модифицировать. Производители дистрибутивов настраивают систему по умолчанию именно так, и не следует повышать статус пользователей без особой надобности.
4.1.4. Права по умолчанию
Когда пользователь создает новый файл или директорию, то им назначаются права по умолчанию. Давайте разберем это на примере. Для создания файла выполним команду ls и перенаправим вывод в файл:
ls -al >> testfile
Теперь проверим права на этот файл с помощью команды ls -al. Должно получиться -rw-r--r--, т.е. владелец может читать и изменять файл, а пользователи группы и все остальные — только просматривать. В старых системах и некоторых дистрибутивах права могут быть равны -rw-rw-r--, а значит, пользователи группы тоже смогут корректировать файл. Такие права нарушают главное правило безопасности. Но в любом случае все получают возможность читать файл. Это разрешено.
Такая политика неверна, потому что если вы создадите файл, который хранит конфиденциальные данные, то информация будет доступна для всеобщего обозрения. И если вы забудете понизить права, то любой сможет увидеть и прочитать файл.
Ситуацию можно изменить, если понимать, как создаются права для нового файла. Они рассчитываются на основе маски, текущее значение которой определяется командой umask. В результате будет получено значение 0022 или 002.
Посмотрим, как маска влияет на регламентацию доступа. По умолчанию права для файлов устанавливаются в значение 666 минус маска, а для директорий — 777 минус маска.
Теперь ясно, что если маска равна 002, то для нового файла будут установлены права 666-002=664, а это соответствует -rw-rw-r--, а при значении 0022 формула изменится на 666-0022=644, что будет означать -rw-r--r--.
Для директорий расчет аналогичный, и при маске, равной 002, по умолчанию будут устанавливаться права 777-002=775 (drwxrwxr-x). В случае с маской 0022 значение определяется как 777-002=755, а это соответствует правам drwxr-xr-x, т.е. все пользователи смогут просматривать директории и увидят содержащиеся в ней файлы.
Все это не есть хорошо. Если владелец должен иметь доступ, достаточный для полноценной работы с файлами и директориями, то остальные вообще не должны иметь прав. Эту ситуацию можно исправить изменением маски. Я рекомендую установить ее в 077. В этом случае для директорий права будут определены как 777-077=700 (или drwx------), а для файлов — 666-077=600 (или -rw-------). Тогда доступ к файлу имеет только владелец. Все остальные — отдыхают.
При расчете прав на файл можно подумать, что я ошибся, ведь 666-077 далеко не равно 600. Почему же так получилось? Просто вычитание происходит поразрядно, т.е. первая цифра 6 в числе минус первая цифра 0 в маске, затем операция производится со вторыми цифрами (6-7) и т.д. Если какой-либо результат получается отрицательным, то он округляется до нуля.
Вот такое положение дел нас уже устраивает. Чтобы установить новую маску, выполните команду umask маска. В нашем случае это будет umask 077.
4.1.5. Права доступа к ссылкам
В разд. 3.1.3 мы рассматривали жесткие и символьные ссылки на файлы. Для начала вспомним права на жесткие ссылки:
913021 -rw-r--r-- 2 root root 0 Feb 22 12:19 1.txt
913021 -rw-r--r-- 2 root root 0 Feb 22 12:19 link.txt
Как видите, права абсолютно идентичны. Я надеюсь, что вы другого и не ожидали, ведь у ссылок дескрипторы одинаковые.
С символьными ссылками дело обстоит куда хуже. Вот пример основного файла и символьной ссылки на него из того же разд. 3.1.3:
913021 -rw-r--r-- 1 root root 519 Feb 22 12:19 link.txt
913193 lrwxrwxrwx 1 root root 8 Feb 22 12:40 symbol.txt -> link.txt
Первая строка содержит информацию о файле, а во второй — находится символьная ссылка. Как видите, у нее открыт абсолютно полный доступ. Если создать ссылку для файла /etc/shadow и не изменить ее права, то можете попрощаться с паролями, их украдут или обнулят. Помните, что любая операция по изменению файла символьной ссылки затрагивает непосредственно сам файл.
Если вы решили использовать символьные ссылки, то не забудьте об особенности формирования прав доступа на файлы. Можете даже выбить на мониторе надпись: "Ссылки на файлы создаются с полными правами!!!"
4.2. Управление группами
Начнем изучение вопроса с создания групп. Что это такое? Допустим, что в вашей сети 1000 пользователей, 500 из которых должны иметь доступ к файлам бухгалтерской отчетности. Как поступить? Можно каждому из 500 пользователей назначить права на нужный файл и забыть об этом до определенного времени. А теперь представим, что нужно отменить это разрешение. Опять выполнять 500 команд для каждого пользователя? А может быть писать собственную программу? Оба способа неудобны и требуют больших усилий.
Что если объединить этих пользователей в группу, а уже ей дать право на использование определенного файла. Впоследствии, если нужно запретить доступ, то одной командой отключаем разрешение для группы, и все 500 пользователей больше не смогут работать с файлом. Удобно? Даже очень.
В ОС Red Hat Linux все пользователи приписываются к какой-либо группе. Если при введении новой учетной записи группа не указана, то она будет создана по умолчанию под именем пользователя.
4.2.1. Добавление группы
Для создания новой группы используется команда groupadd. Она выглядит следующим образом:
groupadd [-g gid [-о]] [-r] [-f] имя
После имени команды можно указывать следующие параметры:
□ -g gid — идентификатор группы. Это неотрицательное число, которое должно быть уникально. Если вы ввели значение, которое уже используется в системе, то для нормальной отработки команды нужно добавить еще и ключ -o. В большинстве случаев идентификатор вообще не нужно указывать. Тогда система возьмет первое свободное значение, начиная с 500;
□ -r — этот ключ указывает на необходимость создания системной группы. Идентификаторы таких групп находятся в диапазоне от 0 до 499. Если в явном виде не указано значение параметра -g, то будет выбрано первое свободное число менее 500;
□ -f — блокирует создание групп с одинаковыми именами. Если указать этот ключ, то команда отработает, но новая группа не сформируется, а уже существующая не будет обновляться.
Если какие-либо параметры не указаны, то будут использоваться значения по умолчанию. Рассмотрим примеры создания групп (после знака "#" идет комментарий, поясняющий работу команды):
groupadd testgroup1 # Создать группу testgroup1 с ID по умолчанию
groupadd -g 506 testgroup2 # Создать группу testgroup1 с ID 506
groupadd -r testgroup3 # Создать группу testgroup1 с системным ID
#(менее 500) по умолчанию
Вся информация о группах добавляется в файл /etc/group. Откройте его содержимое, например, в МС или наберите в командной строке:
cat /etc/group
Эта команда выводит на экран содержимое файла, в самом конце которого вы увидите три строки с информацией о добавленных нами группах:
testgroup1:x:500:
testgroup2:x:506:
testgroup3:x:11:
Файл состоит из 4 колонок: имя группы, пароль, идентификатор, список пользователей. Колонки разделены знаком двоеточия.
В первой группе мы не указывали идентификатор, поэтому система выбрала значение по умолчанию. Во второй — в явном виде задан номер группы. В последней строке идентификатор равен 11, потому что был запрошен номер по умолчанию из системного диапазона (использовался ключ -r).
Последняя колонка (после третьего двоеточия) ничего не содержит. Здесь должен быть список пользователей группы, но он пуст, потому что мы еще его не формировали.
4.2.2. Редактирование группы
Для редактирования параметров группы можно напрямую изменять файл /etc/group, но я рекомендую лучше использовать команду groupmod. У этой команды такие же ключи, что и у groupadd, но она не добавляет группу, а изменяет параметры уже существующей.
4.2.3. Удаление групп
Теперь рассмотрим, как можно удалить группу. Для этого используется команда groupdel: