Чтение онлайн

ЖАНРЫ

Linux-сервер своими руками

Колисниченко Денис Николаевич

Шрифт:

Каждое число, задающее права доступа, состоит из трех разрядов, например, 760:

7 — первый разряд;

6 — второй разряд;

0 — третий разряд.

Первый разряд задает права доступа для владельца файла, второй — для группы, третий — для остальных пользователей. Одному разряду восьмеричной системы соответствует три разряда в двоичной.

Соответствие разрядов восьмеричной системы разрядам в двоичной системе Таблица 4.11

Восьмеричный формат  Двоичный формат
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111

Каждый

двоичный разряд задает соответствующий ему тип доступа: первый — чтение, второй — запись, третий — выполнение. Будем считать, что разряды нумеруются слева направо. 0 — если данная операция запрещена, а 1 — если разрешена. Теперь все становится на свои места, например, право доступа, задаваемое числом 777 (111111111) означает право на чтение, запись и выполнение для всех пользователей.

Наиболее часто используется маска 644, разрешающая чтение и модификацию файла для владельца, и только чтение — для других пользователей. Иногда используется набор прав доступа, состоящий из четырех цифр. Старшая цифра обозначает флаги SETUID (4), SETGID (2), sticky-бит (1).

Какие же права доступа будут у только что созданного каталога командой mkdir? Обычно маска прав доступа равна 0777 минус значение, выводимое командой umask. Значение, выводимое командой umask, обычно равно 022. Следовательно, маска прав доступа будет равна 0777 – 0022 = 0755. И действительно, создайте каталог и введите команду ls –l:

mkdir new

ls –l

drwxr-xr-x 2 den den 4096 Янв 14 14:30 new/

Набор rwx (111) равен семи, а набор r-x (101) равен пяти в восьмеричной системе. Получается, что маска доступа к новому каталогу = 755. Установить значение umask можно с помощью самой этой команды. Просто выполните команду umask 000 от имени суперпользователя и вы установите новое значение, равное нулю. Обратите внимание, команда mkdir автоматически устанавливает право выполнения (доступа) для каталога, иначе к каталогу нельзя будет получить доступ.

 Кроме рассмотренных выше прав доступа в системе Linux имеются еще два специальных права доступа — SUID (Set User ID root) и SGID (Set Group ID root). Их существование связано с тем, что некоторые программы (pppd, smbmount, SVGA-программы) требуют для своей работы привилегий пользователя root.

Допустим, что вы хотите, чтобы другие пользователи могли устанавливать РРР-соединение, для этого нужно установить право доступа SUID для программы-демона /usr/sbin/pppd. Делается это так:

chmod u+s /usr/sbin/pppd

После этого демон pppd будет запускаться с привилегиями root, даже если он запущен самым обыкновенным пользователем. Запуск pppd в таком режиме необходим для того, чтобы обыкновенный пользователь смог настроить необходимые интерфейсы и таблицу маршрутизации ядра, то есть подготовить систему для РРР-соединения. Обычно на такие изменения (изменение таблицы маршрутизации ядра, конфигурирование интерфейсов) есть право только у пользователя root.

То же самое можно сказать и о программе smbmount — для ее работы тоже нужно установить право доступа SUID.

Казалось бы, все хорошо: и пользователи довольны, и вам не нужно каждый раз подходить к серверу, если нужно установить коммутируемое соединение или примонтировать общий ресурс. Однако следует учитывать, что программы, требующие установления SUID (или SGID) для своей работы являются потенциальными дырами в системе безопасности. Представьте такую ситуацию: у вас в системе установлена программа superformat, которая предназначена для форматирования дисков. Создание файловой системы, пусть даже на дискете, — это привилегированная операция, требующая права доступа root. При установке этой программы для нее сразу устанавливается право SUID, чтобы разрешить пользователям форматировать дискеты. Пользователь запускает ее для форматирования диска. Программа запускается, получает права root, форматирует дискету и нормально завершает работу. А теперь представим, что программа некорректно завершает

свою работу — по ошибке, например, произошло переполнение стека (такие случаи известны при работе с этой программой). Что же при этом произошло: программа supermount получила права root и некорректно завершила работу. В результате чего обыкновенный пользователь получил права root! Неквалифицированный пользователь с правами root — это намного хуже, чем просто крах системы. Нельзя с уверенностью сказать что произойдет, если пользователь получит права root. Выходит, что не нужно быть профессиональным хакером — достаточно просто уметь форматировать дискеты.

Помните о потенциальной опасности при работе с такими программами и, по возможности, избегайте использования прав SUID и SGID.

Ради справедливости нужно заметить, что ряд системных программ (в частности pppd) разрабатывался с учетом прав SUID и SGID, и эти программы являются максимально защищенными, хотя полной уверенности в этом нет. Поэтому использовать право SUID нужно только в самых крайних случаях.

 Я позволю себе сделать еще несколько замечаний относительно прав доступа SUID и SGID:

1. Лучше не использовать программы, требующие привилегированные права доступа, на сервере, точнее, не разрешать обыкновенным пользователям их использовать. Использование права доступа SUID вы можете себе позволить только на своей домашней машине, например, для установления того же коммутируемого соединения, чтобы каждый раз при подключении к Интернет не вводить команду su.

2. Если все-таки нужны привилегированные права, используйте программу sudo (или su). Конечно, это не так удобно, но зато гораздо безопаснее.

3. Перед использованием программ, требующих права доступа root, убедитесь в их надежности. Если программа получена из ненадежного источника, лучше ее не использовать. Под надежным источником подразумеваются сайты или FTP-серверы разработчиков дистрибутивов Linux. Желательно получить исходный код такой программы, чтобы убедиться, что она не производит каких-либо несанкционированных действий.

4. Нет ни одной причины, по какой нужно было бы разрешить использование SUID-программ в домашних каталогах пользователей. Для разделов, в которые разрешена запись обыкновенным пользователям, установите опцию nosuid в файле /etc/fstab.

4.13. Обслуживание файловой системы

Обслуживание файловой системы в ОС Linux сводится к двум операциям:

1. Проверка.

2. Дефрагментация.

Проверка и восстановление файловой системы Linux выполняется программой fsck. Перед проверкой файловая система должна быть смонтирована в режиме «только чтение».

Программа fsck умеет проверять и другие типы файловых систем, но для исправления ошибок лучше использовать родные для этой файловой системы программы, предназначенные для проверки и исправления ошибок. Программа fsck автоматически проверяет файловые системы при загрузке Linux в соответствии с указаниями, содержащимися в файле etc/fstab. Для программы fsck можно использовать опции, указанные в табл. 4.12.

Параметры программы fsck Таблица 4.12

Опция Описание
– А Проверка всех файловых систем, указанных в файле /etc/fstab. Корневая файловая система будет проверена первой
– С Показывать индикатор выполнения проверки (только для файловой системы ext2)
– Р Используется вместе с опцией –А. Проверять корневую файловую систему параллельно вместе с другими файловыми системами, а не перед ними. Не очень безопасный вариант проверки, поэтому лучше его не использовать
– R Используется вместе с опцией –А. При этом проверяться будут все файловые системы, кроме корневой
– t тип_ФС Используется с опцией –А. Указывает только какого типа файловые системы следует проверять. В поле <тип_ФС> указывается тип файловой системы. Если перед типом файловой системы поставить префикс, то проверяться будут ФС всех типов, кроме указанного
– s Производить проверку файловых систем последовательно, а не параллельно, как это делается по умолчанию (за исключением корневой ФС)
Поделиться с друзьями: