Linux

Samba на Linux: установка, защищённая папка и проверка доступа

Ниже — рабочая настройка standalone Samba-сервера с одной защищённой сетевой папкой. В примере используется Debian/Ubuntu, пользователь alex, каталог /srv/samba/files и share files.

1. Устанавливаем Samba

apt update
apt install samba smbclient acl
smbd --version
systemctl enable --now smbd
systemctl status smbd --no-pager

2. Сохраняем исходный smb.conf

install -d -m 700 /root/samba-backup
cp -a /etc/samba/smb.conf /root/samba-backup/smb.conf.$(date +%F-%H%M)
testparm -s > /root/samba-backup/testparm-before.txt

3. Создаём пользователя и группу

groupadd -f fileshare
id alex 2>/dev/null || useradd -m -s /bin/bash alex
usermod -aG fileshare alex
id alex

Пользователь Samba должен существовать и в Linux. Затем задаём отдельный SMB-пароль:

smbpasswd -a alex
smbpasswd -e alex
pdbedit -L -v alex

4. Создаём каталог и права

install -d -o root -g fileshare -m 2770 /srv/samba/files
setfacl -m g:fileshare:rwx /srv/samba/files
setfacl -m d:g:fileshare:rwx /srv/samba/files
setfacl -m d:o::--- /srv/samba/files
getfacl -p /srv/samba/files

Бит SGID в режиме 2770 помогает новым файлам и каталогам наследовать группу fileshare.

5. Добавляем минимальную конфигурацию

В конец /etc/samba/smb.conf добавьте:

[files]
    path = /srv/samba/files
    browseable = yes
    read only = no
    guest ok = no
    valid users = @fileshare
    force group = fileshare
    create mask = 0660
    directory mask = 0770
    inherit permissions = yes

6. Проверяем конфигурацию

testparm -s
testparm -s --section-name=files

При ошибке синтаксиса не перезапускайте Samba.

7. Применяем настройки

smbcontrol all reload-config
# либо
systemctl reload smbd
systemctl status smbd --no-pager
ss -lntp | grep -E ':(139|445)\b'

8. Ограничиваем firewall локальной сетью

Пример UFW для сети 192.168.1.0/24:

ufw allow from 192.168.1.0/24 to any port 445 proto tcp
ufw allow from 192.168.1.0/24 to any port 139 proto tcp
ufw status numbered

Не открывайте SMB в интернет. Для удалённого доступа используйте VPN.

9. Проверяем share локально

smbclient -L //127.0.0.1 -U alex
printf 'Samba test %s\n' "$(date -Is)" > /tmp/samba-test.txt
smbclient //127.0.0.1/files -U alex -c 'put /tmp/samba-test.txt samba-test.txt; ls; get samba-test.txt /tmp/samba-test-restored.txt; del samba-test.txt'
sha256sum /tmp/samba-test.txt /tmp/samba-test-restored.txt

Контрольные суммы должны совпасть.

10. Проверяем права новых файлов

find /srv/samba/files -maxdepth 2 -printf '%m %u:%g %p\n'
getfacl -p /srv/samba/files

11. Подключение из Windows

Откройте в Проводнике:

\\server-ip\files

Для очистки старых сохранённых SMB-сессий:

net use * /delete

12. Диагностика

journalctl -u smbd --since '15 min ago' --no-pager
testparm -s
smbstatus
pdbedit -L
namei -l /srv/samba/files
getfacl -p /srv/samba/files

Если пароль принимается, но запись запрещена, проблема чаще всего в UNIX-правах, группе или ACL каталога.

13. Rollback

cp -a /root/samba-backup/smb.conf.YYYY-MM-DD-HHMM /etc/samba/smb.conf
testparm -s
smbcontrol all reload-config
smbpasswd -x alex   # только если SMB-учётка больше не нужна

Критерий успеха: testparm не выдаёт ошибок, порт 445 слушает только в ожидаемой сети, пользователь проходит аутентификацию, может создать, прочитать и удалить тестовый файл, а восстановленный файл имеет совпадающую checksum.

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

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