Настраиваем 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_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

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

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

  1. man selinux
  2. man samba
  3. man samba_selinux
  4. less /etc/samba/smb.conf
Остались или есть ещё вопросы? Задавайте!
(не забудьте указать ссылку на этот пост)




2 комментария

  1. aprogrammer Ukraine Google Chrome Windows :

    Отличная статья. Но почему просто не использовать NFS. Гемора в 2 раза меньше. К примеру sysadmin.te.ua/linux/nfs-configuration.html   *CRAZY*

    Thumb up 0 Thumb down 0

  2. tehnikpc Ukraine Mozilla Firefox Linux :

    >

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

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

    Thumb up 0 Thumb down 0

Оставить комментарий

Установка, настройка, мониторинг и администрирование linux, unix, windows систем