```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. ```