Все знают, что SELinux хорошая штука и отключать её неправильно. Но, всем наверно лениво, настраивать SELinux. Я окончательно решил у себя использовать SELinux. Устраняю пробелы и пишу пост.
Более подробную установку samba читайте в посте: «Устанавливаем сервер SAMBA в CentOS«. Кратко:
yum -y install samba mkdir /home/share chmod 777 /home/share vi /etc/samba/smb.conf
Содержимое конфига smb.conf
[global] unix charset = UTF-8 dos charset = CP932 workgroup = workgroup server string = Samba Server Version %v netbios name = GW log file = /var/log/samba/log.%m max log size = 50 security = share browseable = Yes hosts allow = 127. 192.168.0. # доступ из localhost и 192.168.0.0/24 [share] path = /home/share writable = yes guest ok = yes guest only = yes create mode = 0777 directory mode = 0777
/etc/rc.d/init.d/smb start /etc/rc.d/init.d/nmb start
Добавляем сервисы smbd (SMB daemon), nmbd (NetBIOS nameserver) в автозапуск
chkconfig smb on chkconfig nmb on
Переходим к настройка SELinux
В начале командой sestatus, проверяем статус политик SElinux. Из принтскрина видим, что включены
Посмотреть все варианты защиты SElinux, доступные для изменения можно командой getsebool
getsebool -a
Из всего списка нам интересны политики SELinux относящиеся к SAMBA:
[root@home samba]# getsebool -a | grep samba samba_create_home_dirs --> off samba_domain_controller --> off samba_enable_home_dirs --> off samba_export_all_ro --> off samba_export_all_rw --> off samba_run_unconfined --> off samba_share_fusefs --> off samba_share_nfs --> off sanlock_use_samba --> off use_samba_home_dirs --> off virt_use_samba --> off [root@home samba]#
После того как все настройки в SAMBA сделаны и пользователи видят сетевые папки, мы сталкиваемся с проблемой доступа к ним. Даже правильно выставленные права, проблему вызванную с SELinux, не решают. Чтобы предоставить общий доступ к файлам и директориям необходимо присвоить контекст samba_share_t. Например, для директории /home/share, необходимо утилитой chcon установить контекст:
chcon -R -t samba_share_t /home/share
Если вы хотите сделать изменения постоянными, чтобы контекст сохранялся при обновлении или перезагрузки системы, вы должны добавить записи в файл file_contexts.local. Для этого выполним команду semanage, которая изменить назначенный по умолчанию контекст файлов
semange fcontext -a -t samba_share_t /home/share
Далее командой restorecon прочитаем файл file_contexts и установит описанные контексты
restorecon -R -v /home/share
Проверим выполнение команд
cat /etc/selinux/targeted/modules/active/file_contexts.local
Описание политик SELinux для SAMBA
samba_create_home_dirs — samba может создавать домашние каталоги пользователей(полезно в доменах)
samba_domain_controller — использовать samba в качестве контроллера домена
samba_enable_home_dirs — шарить пользовательские каталоги
samba_export_all_ro — разрешить экспорт только на чтение
samba_export_all_rw — разрешить экспорт на запись
samba_run_unconfined — разрешить samba запускать скрипты с контекстом unconfined (это неопределённый контекст SELinux)
samba_share_fusefs — разрешить шарить монтированные fuse каталоги
samba_share_nfs — разрешить шарить монтированные nfs каталоги
sanlock_use_samba —> off
use_samba_home_dirs — разрешает использовать каталоги /home
virt_use_samba — виртуалы могут использовать samba с хоста
Ещё одна политика, разрешающая запись гостям
allow_smbd_anon_write — разрешить запись гостями
Чтобы её увидеть необходимо выполнить команду:
getsebool -a | grep -E "smb|samba"
Правила IPTABLES для SAMBA:
[root@home ~]# grep -E "137|138|139|445" /etc/rc.d/rc.firewall $IPT -A INPUT -i $LAN_1_IF -p tcp --dport 137 -j ACCEPT $IPT -A INPUT -i $LAN_1_IF -p udp --dport 137 -j ACCEPT $IPT -A INPUT -i $LAN_1_IF -p tcp --dport 138 -j ACCEPT $IPT -A INPUT -i $LAN_1_IF -p udp --dport 138 -j ACCEPT $IPT -A INPUT -i $LAN_1_IF -p tcp --dport 139 -j ACCEPT $IPT -A INPUT -i $LAN_1_IF -p udp --dport 139 -j ACCEPT $IPT -A INPUT -i $LAN_1_IF -p tcp --dport 445 -j ACCEPT $IPT -A INPUT -i $LAN_1_IF -p udp --dport 445 -j ACCEPT
, где
/etc/rc.d/rc.firewall — скрипт фаерфола
$IPT — аналогично записи /sbin/iptables
$LAN_1_IF — аналогично записи eth0 (или любой другой интерфейс)
Возможные ошибки SELinux:
1. При выполнении команды semanage, выдает что команда не найдена
-bash: semange: команда не найдена
yum install policycoreutils-python
Материалы и документация по SELinux и SAMBA:
- man selinux
- man samba
- man samba_selinux
- less /etc/samba/smb.conf
>
Настраиваем Samba и SELinux
Selinux на серверах везде просто отключают, так что более актуально это для обычных десктопов =) .