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-pager2. Сохраняем исходный 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.txt3. Создаём пользователя и группу
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 alex4. Создаём каталог и права
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 = yes6. Проверяем конфигурацию
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/files11. Подключение из Windows
Откройте в Проводнике:
\\server-ip\filesДля очистки старых сохранённых SMB-сессий:
net use * /delete12. Диагностика
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.