Настраиваем Samba и SELinux в CentOS

Все знают, что 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
Запускаем сервисы smbd (SMB daemon), nmbd (NetBIOS nameserver)
/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_dirssamba может создавать домашние каталоги пользователей(полезно в доменах)
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

2. Добавить свою ошибку

Материалы и документация по SELinux и SAMBA:

  1. man selinux
  2. man samba
  3. man samba_selinux
  4. less /etc/samba/smb.conf
Share

You may also like...

1 Response

  1. tehnikpc:

    >
    Настраиваем Samba и SELinux
    Selinux на серверах везде просто отключают, так что более актуально это для обычных десктопов =) .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *