| 
						
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -0,0 +1,76 @@
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				# Задания
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				### 0. Инициализация SELinux
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Запустите следующие команды, чтобы инициализировать SELinux:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				$ sudo apt install selinux-basics selinux-policy-default auditd
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				$ sudo selinux-activate
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				$ reboot
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Вы установили утилиты для работы с selinux, политики по-умолчанию, созданные для популярных пакетов и демон для аудита всех действий пользователя. Активировали selinux, собрав модули политик по-умолчанию и добавив параметры запуска с selinux в grub.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				После перезагрузки проверьте, что selinux активирован. К каждому файлу и процессу SELinux прикрепляет поля: пользователь, роль, домен(тип), чувствительность(степень секретности). Изменение файловой системы может занять какое-то время.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				$ sudo check-selinux-installation
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				$ getenforce
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Действия пользователей (процессов) с объектами (файлами) проверяются в начале Linux DAC, а затем SELinux модулями. В режиме Permissive все нарушения политик SELinux будут только логироваться. 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Установите режим `Enforcing` в конфигурационном файле `/etc/selinux/config` и перезагрузите систему.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				$ sestatus -v
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				### 1. 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Скачайте проект с примером политик SELinux c помощью `apt`:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				$ sudo apt install selinux-policy-src
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Определите местоположение файла `selinux-policy-src.tar.gz` с помощью `dpkg` и распакуйте себе в домашнюю директорию пользователя. Изучите README и INSTALL.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				### 2.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Установите в систему документацию для политик selinux.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				$ sudo sepolicy manpage -a -p /usr/local/man/man8
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				$ sudo mandb
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Проверьте, что открывается документация для `httpd_selinux`. Обратите внимание на строки с `ngnix`.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				### 3.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Изучите ряд команд selinux. 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Выведите булевые переменные для модуля `httpd_` командами `getsebool -a` и `semanage boolean -l`. По принятому соглашению, глобальные переключатели правил начинаются с `allow_` и `use_`, переключатели модулей начинаются с их названия.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Выполните поиск правил на которые повлияет переключатель `httpd_enable_ftp_server`.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				sesearch –b httpd_enable_ftp_server –A
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Попробуйте также команды:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				- `semanage fcontext -l` (информация о контекстах), 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				- `ls -Z` (SELinux настройки для файлов директории),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				- `ps Zaux` (SELinux настройки для работающих процессов),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				- `seinfo -t` (Вывести список контекстов).
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				### 4.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Хостинговые компании часто организуют для своих пользователей доступ к одной из папок в домашней директории пользователя по http по ссылке `http://site/~user/index.html`. Попробуем это повторить с политиками selinux, уменьшающими потенциальный ущерб для системы от взлома сервера. 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Создайте папку www в домашней директории. Добавьте пользователя в группу `www-data` и установите права на директорию `~/www` 0755. 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Установите nginx, если он ещё не установлен. Сконфигурируйте http веб-север со следующими настройками:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				location ~ ^/~(.+?)(/.*)?$ {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  alias /home/$1/www$2;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  autoindex on;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Обратитесь к сайту командой `curl`. При правильно работающей политике, доступ должен быть запрещён.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Включите доступ к домашним директориям из контекста `httpd`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				```
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				setsebool –P httpd_enable_homedirs on
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				Проверьте, что доступ появился.
 |