1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
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.
```
|