summaryrefslogtreecommitdiff
path: root/LINUX/SAMBA.md
diff options
context:
space:
mode:
Diffstat (limited to 'LINUX/SAMBA.md')
-rw-r--r--LINUX/SAMBA.md262
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.
+```
+
+