diff options
Diffstat (limited to 'LINUX/SAMBA.md')
| -rw-r--r-- | LINUX/SAMBA.md | 262 |
1 files changed, 262 insertions, 0 deletions
diff --git a/LINUX/SAMBA.md b/LINUX/SAMBA.md new file mode 100644 index 0000000..357b5e4 --- /dev/null +++ b/LINUX/SAMBA.md @@ -0,0 +1,262 @@ +```shell +sudo su +apt install -y samba samba-client +systemctl enable smbd +systemctl start smbd +systemctl status smbd +systemctl stop smbd +systemctl restart smbd + +systemctl disable smbd +systemctl reload smbd + +ufw allow Samba +ufw allow 445 +ufw allow 137 +ufw allow 138 +ufw allow 139 + +#=================================== +smbclient -L 192.168.1.1 +smbclient -L 192.168.1.1 -U username +#=================================== + +### Сброс кэша сетевых подключений Windows: +# (если не дает подключиться) +# cmd + +net use * /delete +ipconfig /flushdns +nbtstat -R + +#=================================== + +sudo cp /etc/samba/smb.conf /etc/samba/res_smb.conf + +# оставим в файле конфигурации только те строки, которые используются в работе и не являются комментарием: +grep -v '^ *#\|^ *$' /etc/samba/smb.conf | sudo tee /etc/samba/smb.conf + +sudo vim /etc/samba/smb.conf + +#============================ +[global] +workgroup = WORKGROUP +security = user +map to guest = bad user +wins support = no +dns proxy = no + +[150Gb] +path = /home/media/150Gb +public = yes +writable = yes +read only = no +guest ok = yes +create mask = 0775 +directory mask = 0775 +force create mode = 0775 +force directory mode = 0775 + +[private] +path = /media/samba/private +public = no +writable = yes +read only = no +guest ok = no +create mask = 0775 +directory mask = 0775 +force create mode = 0775 +force directory mode = 0775 +#============================ + +testparm -s +systemctl restart smbd nmbd + +# Доступ по учетным данным: +# Создаем каталог для новой папки: +mkdir /data/staff + +# Задаем права на созданный каталог: +chmod 775 /data/staff + +sudo adduser samba # add a regular Linux user +sudo smbpasswd -a samba # add Samba user called `samba` +sudo smbpasswd -e samba # enable - may not be needed + +# Создаем пользователя в системе Linux: +useradd staff1 + +# где_ staff1 _— имя пользователя +# Задаем пароль для пользователя: +passwd staff1 + +# Теперь создадим пользователя в samba: +smbpasswd -a staff1 + +# Перезапускаем samba: +systemctl restart smbd nmbd + +# Посмотреть пользователей samba: +sudo pdbedit -L -v +-L - to list users. +-v - to be verbose. + +# Доступ для пользователей и групп:*** +sudo mkdir /var/acc_gr_and_user +sudo chmod 777 /var/acc_gr_and_user +``` + +```bash +[acc_gr_and_user] + comment = Private Folder + path = /var/acc_gr_and_user + public = no + writable = no + read only = yes + guest ok = no + valid users = admin, staff2, staff3, @privateusers + write list = admin, staff2 + create mask = 0775 + directory mask = 0775 + force create mode = 0775 + force directory mode = 0775 + inherit owner = yes + + +systemctl restart smbd nmbd +``` + +*стоит обратить внимание на следующие настройки: + +- ***path = /data/private*** — используем новый путь до папки +- ***writable = no*** +- ***read only = yes*** +- в данном примере мы разрешим запись в каталог только некоторым пользователям. Поэтому общие настройки, разрешающие запись в папку, должны быть запрещены +- ***valid users*** - список пользователей, которым разрешено подключаться к каталогу. В данном примере разрешения работают для пользователей +- **_admin_**__,__ **_staff2_** __и__ **_staff3_**, а также для всех, кто входим в группу ***@privateusers*** +- ***write list*** - список пользователей, которые имеют доступ к папке на чтение и запись. В данном примере мы разрешаем это только для пользователей. ***admin*** и ***staff2*** +- ***inherit owner*** - опция позволяем включить наследование владельца при создании папок и файлов + +*если мы хотим, чтобы доступ к каталогу был полный у определенных пользователей (без разделения на тех, кто может только читать и тех, кто может также писать в папку), то опцию +***write list*** можно не указывать, а опции ***writable*** и ***read only*** оставить как в примерах выше + +***Вывести список сетевых ресурсов samba:*** +`smbclient -L localhost -U%` + +***Подключение к ресурсу из Linux***: +```sh +sudo apt install cifs-utils -y +mount.cifs {ресурс} {путь к директории в которую монтируем } {-o опции} +mount.cifs //10.8.0.1/anonimus_share /mnt +``` + +Автоматическое монтирование директории происходит с использованием файла **fstab**. Для начала создадим дополнительный файл с учетными данными пользователя для авторизации. Оправданно будет создать этот файл в директории **root**. + +`sudo nano /root/.smbselus` + +Внесем в файл следующие директивы: + +`username=selectel password=uspass` + +Сохраняем и переходим к конфигурационному файлу **fstab**. + +`sudo nano /etc/fstab` + +Добавляем в него следующий блок инструкций: + +`//10.8.0.1/acc_gr_and_user /mnt cifs user,rw,credentials=/root/.smbselus 0 0` + +Конкретизируем каждый пункт: + +**_//10.8.0.1/acc_gr_and_user_** 一 директория, которую необходимо смонтировать; +**_/mnt_** 一 директория, в которую необходимо смонтировать; +**_cifs user_** 一 разрешает монтировать любому пользователю; +**_rw_** 一 предоставляет права на чтение и запись; +**_credentials=/root/.smbselus_** 一 файл с учетными данными пользователя; +_0_ используется утилитой dump 0 一 выключен; +_0_ используется утилитой fsck 0 一 выключен. + +В некоторых случаях требуется добавить директиву **domain** в файл **.smbselus.** +## Настройка сетевой корзины + +По умолчанию файлы из директории удаляются совсем. При определенных условиях необходимо иметь возможность восстановить эти файлы. В Samba данная возможность реализована с использованием сетевой корзины. Алгоритм работы следующий: настраивается скрытый каталог, в который при удалении перемещаются файлы. + +Первым этапом создадим директорию для корзины и назначим ей права: +```sh +sudo mkdir /var/recycle | sudo chmod 777 /var/recycle + +# Внесем блок директив в конфигурационный файл: + +sudo vim /etc/samba/smb.conf + +[Recycle] +comment = rec_dir +path = /var/recycle +public = yes +browseable = yes +writable = yes +vfs objects = recycle +recycle:repository = .recycle/%U +recycle:keeptree = Yes +recycle:touch = Yes +recycle:versions = Yes +recycle:maxsize = 0 +recycle:exclude = *.tmp, ~$* +recycle:exclude_dir = /tmp +``` + +Значения директив: + +**_[Recycle]_** 一 имя ресурса, отображаемое клиенту при подключении; +**_comment = rec_dir_** 一 комментарий; +**_path = /var/recycle_** 一 директория, в которой размещена сетевая корзина. +**_public = yes_** 一 доступ на чтение всем авторизованным пользователям, также гостевым; +**_browseable = yes_** 一 параметр устанавливает, будет ли общий ресурс отображаться в списке доступных общих ресурсов в сетевом окружении и в списке просмотра; +**_writable = yes_** 一 право записи в сетевой ресурс; +**_vfs objects = recycle_** 一 использование подсистемы recycle; +**_recycle:repository = .recycle/%U_** 一 место хранения удаленных объектов. В этой директиве настроено попадание удаленных файлов в каталог с именем пользователя, который создается автоматически в директории .**recycle;** +**_recycle:keeptree = Yes_** 一 удаление с сохранением дерева каталогов; +**_recycle:touch = Yes_** 一 изменение даты при перемещении файла в сетевую корзину; +**_recycle:versions = Yes_** 一 добавление номера версии при удалении файлов с одинаковыми именами; +**_recycle:maxsize = 0_** 一 параметр отвечает за максимальный размер файла, который может быть перемещен в корзину. При текущем значении возможно переместить файл любого размера; +**_recycle:exclude = *.tmp, ~$*_** 一 исключение файлов заданного типа; +**_recycle:exclude_dir = /tmp_** 一 исключение директории заданного типа. + +```sh +mkdir /data/recycle +chmod 777 /data/recycle + +# Перезапускаем самбу: + +systemctl restart smbd + +# Пробуем зайти в сетевой каталог Recycle и создать, а после удалить файл. Он должен оказаться к скрытой папке .recycle. + +# Для автоматической чистки сетевой корзины можно создать скрипт: + +mkdir /scripts +vim /scripts/cleanrecycle.sh + +#!/bin/bash + +recyclePath="/data/recycle/.recycle" +maxStoreDays="30" + +/usr/bin/find $recyclePath -name "*" -ctime +$maxStoreDays -exec rm {} \; + +# в данном скрипте мы ищем все файлы в каталоге /data/recycle/.recycle, которые старше 30 дней и удаляем их. + +# Разрешаем запуск скрипта: + +chmod +x /scripts/cleanrecycle.sh + +# Создаем задание в планировщике: + +crontab -e + +0 5 * * * /scripts/cleanrecycle.sh + +# в данном примере мы будем запускать скрипт по очистке сетевой корзины каждый день в 05:00. +``` + + |
