UMGUM.COM (лучше) 

Set Permisions ( Сценарий периодического обновление установок "User Permisions" ресурсов web-сервисов. )

26 марта 2010  (обновлено 31 января 2015)

OS: Linux Debian Lenny/Squeeze.
Application: UNIX Posix User Permisions.

В этом разделе мы поработали над созданием web-сервера, процессы и данные владельцев ресурсов которого изолируются друг от друга, а исполнение скриптов производится от имени владельца файлов выделенного ресурса, сообщения между разграниченными ресурсами которых невозможен в исходной конфигурации.

В надёжности исходного разграничения ресурсов можно удостоверится с помощью соответствующего скрипта, расположенного здесь: Linux + check permisions.

Однако, "ничто не вечно" и энтропия (читай "неквалифицированные пользователи") вносит в схему свои коррективы. На практике безопасность отдельных виртуальных площадок оказывается под угрозой компрометации данных довольно быстро. Делается это руками самих владельцев сайтов. Не давая себе труда разобраться в принципах "User Permisions", они сплошь и рядом разрешают чтение и запись файлов своих ресурсов не только для "группы", но и "всех остальных". Зачем они это делают - ума не приложу, ибо схема и без того обеспечивает работоспособность всего возможного в пределах виртуальной площадки.

С одной стороны, если пользователь сам открывает на всеобщее обозрение свои данные - это его проблема, а с другой - "в случае чего" в глазах окружающих пострадает наша репутация. Потому я считаю необходимым регулярно запускать скрипт поправляющий права на доступ к ресурсам web-сервера, в профилактических целях, так сказать.

Кроме того, настройки Linux Debian "по умолчанию" подразумевают слишком свободный доступ на чтение для конфигурационных файлов, знать о содержимом которых владельцам сайтов не положено. В процессе настройки нашего web-сервиса мы ограничили доступ к этим файлам, но после очередного обновления системного и прикладного программного обеспечения сервера наши установки могут быть автоматически сброшены до состояния "по умолчанию". Нам это не нужно и, чтобы не думать более об этой проблеме, в специальном скрипте, регулярно запускаемом, будем возвращать уровень защиты до желаемого.


Итак, создаём простой линейный скрипт применения "User Permisions":

# touch /usr/local/etc/set_user_permisions_high_security.sh
# chown root:root /usr/local/etc/set_user_permisions_high_security.sh
# chmod u+x /usr/local/etc/set_user_permisions_high_security.sh

#!/bin/bash

# Защищаем конфигурационные файлы в системной директории "/etc":

chown -R root:root /etc/apache2
chmod -R o-rwx /etc/apache2
chown -R root:root /etc/nginx
chmod -R o-rwx /etc/nginx
chown -R root:root /etc/php5
chmod -R o-w /etc/php5
chown -R root:root /etc/suphp
chmod -R o-rwx /etc/suphp
chown -R mysql:mysql /etc/mysql
chmod -R o-rwx /etc/mysql
chown -R root:root /etc/ssh
chmod -R o-rwx /etc/ssh
chown -R root:root /etc/network
chmod -R o-rwx /etc/network
chown -R root:root /etc/ssmtp
chmod -R o-rwx /etc/ssmtp

chown -R root:root /etc/default
chmod -R o-rwx /etc/default
chown -R root:root /etc/init.d
chmod -R o-rwx /etc/init.d
chown -R root:root /etc/pam.d
chmod -R o-rwx /etc/pam.d
chown -R root:root /etc/security
chmod -R o-rwx /etc/security
chown -R root:root /etc/ssl
chmod -R o-rwx /etc/ssl
chown -R root:root /etc/bacula
chmod -R o-rwx /etc/bacula
chown -R root:root /etc/exim4
chmod -R o-rwx /etc/exim4
chown -R root:root /etc/ppp
chmod -R o-rwx /etc/ppp

chown root:root /etc/adduser.conf
chmod o-rwx /etc/adduser.conf
chown root:root /etc/crontab
chmod o-rwx /etc/crontab
chown root:root /etc/deluser.conf
chmod o-rwx /etc/deluser.conf
chown root:root /etc/fstab
chmod o-rwx /etc/fstab
chown root:shadow /etc/gshadow
chmod o-rw /etc/gshadow
chown root:root /etc/gshadow-
chmod go-rw /etc/gshadow-
chown root:shadow /etc/shadow
chmod o-rw /etc/shadow
chown root:root /etc/shadow-
chmod go-rw /etc/shadow-

# По умолчанию директория системных и пользовательских журналов "/var/log" открыта для чтения всем.
# Мне это представляется избыточным на сервере - предпочитаю закрывать возможность произвольному пользователю читать историю своих ошибок в попытках получить повышенные привилегии:

chmod -R o-rw /var/log

# Защищаем конфигурационные файлы в пользовательской директории "/usr/local/etc":

chown -R root:root /usr/local/etc/network
chmod -R go-rwx /usr/local/etc/network
chown -R root:root /usr/local/etc/web
chmod -R go-rwx /usr/local/etc/web

# Защищаем web-ресурсы.
# Лишаем возможности чтения и записи к ресурсам кого либо, кроме владельца и его группы.
# В хранилище ресурсов мы оперируем только понятиями владельца и группы, никаких других разрешений не допускаем (нужно только помнить, что у директорий нельзя отнимать разрешения "x" на "заглядывание" внутрь):

chown root:root /var/www
chmod -R o-rw /var/www/u*/*

# Лишаем возможности записи в файлы ресурсов для групп владельцев, это можно будет делать только самим владельцам ресурсов и скриптам, которые будут запущены от имени владельцев ресурсов:

chmod -R g-w /var/www/u*/*

# Защищаем индивидуальные конфигурации PHP-интерпретатора:

chown root:root /var/www/php
chmod g-w /var/www/php
chmod o-rwx /var/www/php

# Защищаем SSL-сертификаты web-сервера:

chown -R root:www-nginx /var/www/ssl
chmod -R g-w /var/www/ssl
chmod -R o-rwx /var/www/ssl

# Защищаем содержимое директории скриптов управления и реквизитов площадок:

chown -R root:root /usr/local/etc/web/cp
chmod -R go-rwx /usr/local/etc/web/cp

# Закрываем доступ к ресурсам СУБД:

chown -R mysql:mysql /var/lib/mysql
chmod -R o-rwx /var/lib/mysql

# Закрываем доступ к архивов резервных копий:

chown -R root:root /var/backups/www
chmod -R go-rwx /var/backups/www

exit 0

Процедура применения разрешений не требует большого количества ресурсов и важная при этом; потому делать её почаще не повредит. Например, раз в час:

# cat /etc/crontab

....
# Set user permisions for high security web-server
10 */1  *  *  *  root  /usr/local/etc/set_user_permisions_high_security.sh &
....


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )