Главная >> Статьи и заметки >> Администрирование >> Linux >> Настраиваем Samba сервер с авторизацией, аудитом и корзиной

Настраиваем Samba сервер с авторизацией, аудитом и корзиной Печать


Всем привет. Сегодня я с вами буду настраивать файловый сервер Samba c некоторыми фишками, а именно: авторизация по логину и паролю, аудит (логирование) действий пользователей и корзина - при удалении, файлы помещаются в специальную папку, и через N дней сами удаляются.

Итак, задача:
Сделать файловый сервер-хранилище, большого объёма (5.5 Террабайт) на Samba. Минимизировать случайные и преднамеренные вредительства пользователей, т.е. сделать защиту от удаления чужих файлов на сервере samba. Удаляемые файлы помещать в корзину и автоматически удалять из корзины через 7 дней. Вести логирование действий пользователей на сервере Samba.

Исходные данные:
"Обычный" персональный компьютер с 5-ю жесткими дисками (2x1.5ТБ и 3x1ТБ), двухядерный процессор, 4ГБ оперативной памяти, гигабитная сетевая.

Приступаем к решению:

 

1 Установка и настройка системы

В качестве системы я выбрал свеженький CentOS 6 (правда потом я заметил, что уже вышел 6.1, но не качать же всё заново? =))

1.1 Устанавливаем CentOS:
Для установки системы я разбил один терабайтный диск на разделы примерно так:

  • 4Гб для раздела подкачки (swap),
  • 20 Гб для корня (взято с запасом, с учётом логов и пр.),
  • остальное пространство для хранилища.

Файловая система будет ext4, т.к. её поддержка встроена в ядро Linux, она прекрасно справляется с хранинием мелких и средних файлов (200-300 Мбайт), а меня это вполне устраивает.
Систему ставлю без графического интерфейса (без xwindows и без рабочих столов), выбрав необходимые пакеты (файловый сервер, утилиты управления сервером, программы для работы с сетью и т.д.)
Перезагружаемся, приступаем к настройке сервера.

1.2 Настройка сети:
Для настройки сети на сервере правим файл /etc/sysconfig/network и пишем там следующее:

NETWORKING=yes
HOSTNAME=samba
GATEWAY=192.168.137.1
NOZEROCONF=yes


первая строчка разрешает работу сети на сервере, во второй строке мы задаём имя компьютера в сети, третья строка указывает шлюз по умолчанию. Последняя строка отключает маршрут в сетку 169.254.0.0. Сохраняем файл.
Теперь настраиваем сетевой интерфейс eth0. Для этого открываем файл /etc/sysconfig/network-scripts/ifcfg-eth0 и дописываем в него настройки, или изменяем текущие:

IPADDR=192.168.137.3
METMASK=255.255.255.0
NETWORK=192.168.137.0
ONBOOT="yes"


здесь вроде бы всё понятно.

Прописываем DNS сервер в файле: /etc/resolv.conf:
nameserver 8.8.8.8

Теперь при загрузке системы, сеть будет автоматически настраиваться с нужными нам параметрами.

Выше мы настроили сеть "на постоянку". А если нужно временно поменять адрес интерфейса или прописать новый маршрут (или шлюз), то делается это так
ifconfig eth0 192.168.137.3 netmask 255.255.255.0 up
route add default gw 192.168.137.1 - добавили шлюз
route add -net 10.10.10.0/24 gw 192.168.137.1 - добавляем маршрут

смотрим на настроенные интерфейсы так:
ifconfig -a

посмотреть маршруты можно командой:
route -n

 

1.3 Разбивка диска, настройка LVM

Теперь займёмся нашим пустующим местом на жестких дисках.
Я решил объединить все диски в один, с помощью технологии LVM. Почему не RAID? Изначально я сделал аппаратный RAID-0 и столкнулся с некоторыми проблемами:
во первых, диск, на котором установлена система, не может быть добавлен в RAID.
Во вторых, когда я настроил RAID-0, возникли проблемы при создании раздела в программе fdisk, т.к. раздел больше 2ТБ, пришлось использовать GPT таблицу разделов (подробнее здесь).
В итоге, когда я всё разбил, отформатировал, смонтировал, то получил раздел объёмом 3,6 ТБ, вместо 5! Может быть, руки у меня не от туда, но от RAID я отказался. Зато с LVM всё прошло гладко. Делается это так:
смотрим на наши диски и разделы в системе:
fdisk -l

Инициализируем 4 целых диска, и один раздел который остался от диска с системой:
pvcreate /dev/sda
pvcreate /dev/sdb
pvcreate /dev/sdc
pvcreate /dev/sdd
pvcreate /dev/sde3


Создаём группу томов:
vgcreate vg00 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde3

Создаём логический том на всё свободное прастранство: 
lvcreate -l100%FREE vg00 -n lv01

Создаём файловую систему ext4 на только что созданном логическом томе:
mkfs.ext4 /dev/vg00/lv01

смотрим, что получилось:
fdisk -l
Диск /dev/dm-0: 5978.1 ГБ, 5978133102592 байт
255 heads, 63 sectors/track, 726799 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
На диске /dev/dm-0 отсутствует верная таблица разделов

 

1.4 Монтируем раздел

Отлично, раздел для хранилища готов. Теперь создадим ему папку для монтирования:

mkdir /mnt/share

монтируем раздел:
mount /dev/vg00/lv01 /mnt/Share/

Смотрим, что получилось:
df -h
Файловая система      Разм     Исп     Дост    Исп%  смонтирована на
/dev/sde1                            20G     1,9G      17G    11%        /
tmpfs                                   991M        0     991M    0%        /dev/shm
/dev/mapper/vg00-lv01   5,4T    187M     5,1T    1%       /mnt/Share


Для того, чтобы раздел сам монтировался при загрузке системы, добавляем в /etc/fstab строку:
/dev/vg00/lv01   /mnt/Share   ext4  defaults,noexec  0 2

Далее, на созданном диске создадим наши будущие общие папки:
mkdir /mnt/Share/Arhiv1
mkdir /mnt/Share/Arhiv2
mkdir /mnt/Share/Rabota


1.5 Настройка Linux
Далее предлагаю настроить запускаемые при загрузке службы. Для этого есть удобная консольная програмка:
ntsysv
запускаем, гуглим, и убираем ненужное (добавляем нужное), добавляем samba в автозагрузку.

Для правильной работы Samba нужно настроить SELinux, или вообще его отключить. Я выбрал второе, и делается это так:
в файле /etc/sysconfig/selinux пишем:

SELINUX=disabled

Вот мы и подготовили систему, теперь можно перезагрузиться и приступить к настройке Samba.

 

2 Настройка Samba

Открываем конфиг самбы который лежит здесь /etc/samba/smb.conf и пишем такой конфиг:

[global]
netbios name = FileServer
workgroup = MYGROUP
server string = Samba Server Version %v
interfaces = eth0
security = user
log file = /var/log/samba/samba.log
max log size = 0
syslog = 0
log level = 0 vfs:2
socket options = TCP_NODELAY SO_RCVBUF=262144 SO_SNDBUF=262144 IPTOS_LOWDELAY
load printers = No
local master = Yes
domain master = No
dns proxy = No

vfs objects = full_audit recycle
full_audit:priority = notice
full_audit:facility = local5
full_audit:success = mkdir rmdir write rename link unlink
full_audit:failure = none
full_audit:prefix = %u|%I
recycle:keeptree = Yes
recycle:touch = Yes
recycle:touch_mtime
recycle:versions = Yes
recycle:maxsize = 0
recycle:exclude = *.tmp
recycle:exclude_dir = /tmp

[Share1]
comment = Share1
path = /mnt/Share/arhiv1
admin users = admin
read only = No
create mode = 41777
directory mode =41777
force create mode = 41777
force directory mode = 41777
inherit owner = no
inherit permissions = yes
recycle:repository = /mnt/Share/.korzina/%U

[Share2]
comment = Share2
path = /mnt/Share/arhiv2
admin users = admin
read only = No
create mode = 41777
directory mode =41777
force create mode = 41777
force directory mode = 41777
inherit owner = no
inherit permissions = yes
recycle:repository = /mnt/Share/.korzina/%U

 

ставим бит T на каталогах на сервере:

chmod +t /mnt/Share/Arhiv1

chmod +t /mnt/Share/Arhiv2

Ставим бит S для группы на этих же каталогах:

chmod g+s /mnt/Share/Arhiv1

chmod g+s /mnt/Share/Arhiv2

 

Теперь нужно добавить пользователей в систему и в samba. Лучше воспользоваться таким скриптом (сохраните его в файл и разрешите выполнение файла):

#!/bin/bash
#
# Ensure that root is running the script.
##
WHOAMI=`/usr/bin/whoami`
if [ $WHOAMI != "root" ]; then
echo "You must be root to add news users!"
exit 1
fi
#
clear
NEW_USERS="/home/names.txt"
cat ${NEW_USERS} | \
while read USER GROUP SMBPASS ; do
groupadd ${GROUP} 2> /dev/null
adduser ${USER} -g ${GROUP}
(echo $SMBPASS; echo $SMBPASS) | passwd --stdin ${USER} > /dev/null
echo Added user ${USER}
smbpasswd -e ${USER} -w ${SMBPASS} > /dev/null
(echo $SMBPASS; echo $SMBPASS) | smbpasswd -as ${USER}
echo -e "${USER} = ${USER}" >> /etc/samba/smbusers
done

(скрипт взят от сюда: http://www.linuxquestions.org/questions/programming-9/shell-script-to-add-samba-users-309812/)


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

 

Последние комментарии