samba服务

  1 原理---》 安装 ---》 配置  --》 启动服务加测试 --》 补充
  2 
  3 ==================================================================
  4 
  5 samba        --文件服务器
  6     smb   (service message block 服务消息块)
  7 
  8 smb与ftp对比:
  9 smb不好跨公网,可能要借助vpn这种方式。smb对权限控制比ftp好,特别适用于在同一个目录里多个用户拥有不同权限的场合。smb和ftp都能跨平台。smb除了做文件服务器还可以做windows域有关的应用(比如把一个linux加到windows域里).
 10 
 11 
 12 smb与nfs对比:
 13 nfs:   linux to linux
 14 samba:  linux to windows
 15 
 16 
 17 smb与http对比
 18 
 19 smb使用的netbios通讯协定
 20 
 21 netbios   (network basic input/output system) --最早由IBM发展出来的目的为让局域网内少数电脑进行网络连结的协议,初期的设定并不是针对大型网络,并且他是无法横跨不同路由的;    微软就使用了它进行局域网内的通讯    
 22 
 23 现在有所谓的netbios over tcp/ip  可以横跨不同路由
 24 netbeui   (netbios extened user interface)  为IBM在netbios基础上发展而来的改良版本
 25 
 26 
 27 用samba登入某部windows主机,要加入此windows主机的群组(workgroup),并且也要设定一下netbios name (要求唯一),然后就可以视权限进行资源的访问了
 28 
 29 
 30 samba通过两个守护进程来控制
 31 
 32         nmbd    用来管理workgroup,netbios name的解析等          用udp 的137,138端口
 33 
 34         smbd    用来管理samba主机分享的目录,档案        用tcp的139和445  (TCP的可靠性)
 35 
 36 
 37 --rhel6,rhel7下监听端口主要只有TCP的139,445    监听端口
 38 
 39 cifs            common  interface file system 
 40 
 41 mount -t cifs -o username=administrator //ip/共享名 /mnt
 42 
 43 --windows防火墙关闭
 44 --guest用户打开
 45 
 46 ==================================================================
 47 
 48 准备一台全新centos7平台的虚拟机模拟samba服务器
 49 
 50 安装samba相关软件包
 51 [root@server ~]# yum install samba\*
 52 
 53 =================================================================
 54 
 55 
 56 配置文件简单说明
 57 cat /etc/xinetd.conf |grep -v ^# |grep -v ^$
 58 [root@server ~]# cat /etc/samba/smb.conf
 59 [global]        --定义全局的参数
 60     workgroup = SAMBA    --定义工作组
 61     security = user        --定义工作模式:share,user,server
 62 
 63     passdb backend = tdbsam
 64 
 65     printing = cups
 66     printcap name = cups
 67     load printers = yes
 68     cups options = raw
 69 
 70 [homes]            --加入到samba的用户,默认会共享自己的家目录
 71     comment = Home Directories
 72     valid users = %S, %D%w%S
 73     browseable = No
 74     read only = No
 75     inherit acls = Yes
 76 
 77 [printers]
 78     comment = All Printers
 79     path = /var/tmp
 80     printable = Yes
 81     create mask = 0600
 82     browseable = No
 83 
 84 [print$]
 85     comment = Printer Drivers
 86     path = /var/lib/samba/drivers
 87     write list = root
 88     create mask = 0664
 89     directory mask = 0775
 90 
 91 
 92 [root@server ~]# systemctl restart smb    --配置文件没有做任何修改,直接启动
 93 
 94 
 95 [root@server ~]# netstat -ntlup |grep bd    --查看端口是否启动
 96 tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      2399/smbd           
 97 tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      2399/smbd           
 98 tcp6       0      0 :::139                  :::*                    LISTEN      2399/smbd           
 99 tcp6       0      0 :::445                  :::*                    LISTEN      2399/smbd 
100 
101 
102 例一:smb客户端的访问
103 1,再准备一台linux模拟客户端
104 [root@client ~]# yum install samba-client      --先确认安装客户端命令的软件包
105 
106 smbclient - ftp-like client to access SMB/CIFS resources on servers
107 
108 [root@client ~]# smbclient -L //10.1.1.2        --接服务器的ip
109 Enter root's password:             --不要真的去输10.1.1.2服务器的root密码,如果输root密码,会报下面一行的错误
110 session setup failed: NT_STATUS_LOGON_FAILURE
111 
112 
113 [root@client ~]# smbclient -L //10.1.1.2
114 Enter root's password:         --直接回车,表示以匿名用户登录,但没有看到共享资源,只有服务器的基本信息
115 
116 
117 2,从上面看到客户端现在没法访问服务器,所以我们要用本地用户来登录(注意此本地用户是需要服务器上存在的用户)
118 下面就在服务器端执行下面的命令
119 [root@server ~]# useradd  a     在服务端创建一个a的普通用户
120 [root@server ~]# echo 123 | passwd --stdin a  给a用户一个密码
121 
122 [root@server ~]# smbpasswd -a a        --服务器端的本地用户还需要使用smbpasswd -a加入到samba用户,才能在客户端使用此加入的用户登录
123 New SMB password:
124 Retype new SMB password:
125 Added user a.
126 
127 smbpasswd的相关操作
128     -a    添加smb用户
129     -d    禁用smb用户
130     -x    删除smb用户
131     -e    启用被禁用的smb用户
132 
133 
134 3,回到客户端再次登录
135 
136 [root@client ~]# smbclient -L //10.1.1.2 -U a        --使用a用户登录查看服务器共享的信息
137 Enter a's password: 
138 Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]
139 
140     Sharename       Type      Comment
141     ---------       ----      -------
142     print$          Disk      Printer Drivers
143     IPC$            IPC       IPC Service (Samba 4.4.4)
144     a               Disk      Home Directories        --这里可以看到一个叫a名字的共享(其实就是服务器把a用户的家目录给共享了)
145 Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]
146 
147     Server               Comment
148     ---------            -------
149 
150     Workgroup            Master
151     ---------            -------
152 
153 [root@client ~]# smbclient //10.1.1.2/a -U a        --以a用户身份登录到服务器叫a的共享
154 smb: \> pwd        --查看当前登录的目录
155 Current directory is \\10.1.1.2\a\
156 smb: \> ?        --帮助
157 smb: \> help get    --查看get命令的帮助    
158 smb: \> ls        --列表
159 smb: \> put install.log    --上传
160 putting file install.log as \install.log (966.9 kb/s) (average 966.9 kb/s)
161 smb: \> get vvv        --下载
162 getting file \vvv of size 0 as vvv (0.0 kb/s) (average 0.0 kb/s)
163 smb: \> rm vvv        --删除
164 smb: \> rename install.log install    --重命名
165 
166 --上面可以看到用户登录samba的默认家目录,有上传,下载,删除,重命令的功能
167 ==================================================================
168 4,windows客户端登录方法:
169 windows客户端登录
170 
171 方法一:
172 在cmd下输入   \\10.1.1.2\a   
173 
174 
175 
176     然后会弹出一个登录界面,输入用户名和smbpasswd -a定义的密码
177 
178 
179 方法二:
180 直接做映射:点我的电脑----映射网络驱动器--在文件夹那栏填上\\10.1.1.2\a--再点使用其它凭据连接--写上a用户和他的密码(把记住我的凭据打勾)--就完成了映射了
181 
182 
183 
184 ==================================================================
185 例2.自定义增加一个samba共享,并用客户查看和登录
186 
187 服务端的操作
188 # vim /etc/samba/smb.conf     --直接加上下面一段新的配置
189 
190       需求[test]        --新定义了一个共享的资源,共享名为test
191     comment = public for everyone
192     path = /test    --实际共享的资源目录名
193     guest ok = yes    --表示可以匿名登录(与smbpasswd -a加的普通用户无关);guest ok参数换成public也是一样的
194     browseable = yes    --客户端使用-L参数查看能看得到
195 
196 # mkdir /test   创建需要共享的目录
197 # systemctl restart smb   7系统重启服务
198 #service smb restart 6系统重启服务
199 
200 客户端的操作:
201 # smbclient -L //10.1.1.2/    --匿名查看服务器的共享
202 
203 # smbclient -L //10.1.1.2/ -U a     --a用户查看服务器的共享
204 
205 # smbclient //10.1.1.2/test    --匿名登录叫test的共享
206 
207 # smbclient //10.1.1.2/test -U a    --用a用户登录叫test的共享
208 ==============================================================
209 
210 
211 例三,匿名用户(nobody用户)对这个自定义共享的权限讨论
212 
213 匿名用户可读(下载):
214 nobody用户对目录有rx权限,对要下载的文件有r权限,则就可以下载
215 
216 匿名用户可写(上传):
217 nobody用户对目录有写权限,还要在配置文件里加一个参数 writable = yes;
218 # vim /etc/samba/smb.conf
219 [test]
220     comment = public for everyone
221     path = /test
222     public = yes
223     browseable = yes
224     writable = yes
225 
226 总结:
227 1,无论是什么服务,客户端访问一定会以一个用户身份来访问(与客户端用哪个用户操作无关),这个身份是由服务器决定的
228 
229 匿名用户也会以一个用户身份,几个常用服务的匿名用户:
230 nfs匿名用户为nfsnobody
231 ftp匿名用户为ftp,anonymous
232 samba匿名用户为nobody
233 
234 2,客户端要在服务器做一个事件(比如上传或下载),需要注意下面的一个过程:
235 
236 客户端程序 --> iptables(防火墙) -->pam (控制客户是否可以登录)--> selinux (程序的域是否能访问文件或目录的类型) --> 服务参数是否允许 --》系统权限rwx-->服务程序
237 ==================================================================
238 例四,samba普通用户对这个自定义共享的权限讨论
239 
240 和匿名用户一样,只是用户身份不一样而已(客户端用什么用户登录,就是什么身份)
241 ==========================================================================
242 例五.关于用户互相能删除文件的解决
243 
244 1,
245 服务器再加一个b用户  server端
246 客户端使用a用户登录/test共享资源,上传两个文件123和456
247 #useradd b
248 #smbpasswd -a b  添加到smb组里面
249 客户端使用b用户登录/test共享资源,也上传两个文件678和789
250 
251 查看一下用户上传的文件属性
252 [root@server ~]# ls /test/ -l
253 total 0
254 -rwxr--r-- 1 a a 0 Dec 18 15:07 123
255 -rwxr--r-- 1 a a 0 Dec 18 15:07 456
256 -rwxr--r-- 1 b b 0 Dec 18 15:07 678
257 -rwxr--r-- 1 b b 0 Dec 18 15:07 789
258 
259 2,客户端测试发现a用户可以删除b上传的文件,反之也一样
260 [root@client ~]# smbclient //10.1.1.2/test  -U a
261 smb: \> rm 678
262 
263 [root@client ~]# smbclient //10.1.1.2/test  -U b
264 smb: \> rm 123
265 
266 
267 3,在服务器端把剩下的两个文件权限改为577,客户端测试会发现都删除不了(测试过程省略)
268 [root@server ~]# ls /test -l
269 total 0
270 -r-xrwxrwx 1 a a 0 Dec 18 15:07 456
271 -r-xrwxrwx 1 b b 0 Dec 18 15:07 789
272 
273 4,在服务器端把剩下的两个文件权限再改为200,客户端测试会发现可以随便删除(a用户可以删除自己上传和b用户上传的)(测试过程省略)
274 # ls /test -l
275 total 0
276 --w------- 1 a a 0 Dec 18 15:07 456
277 --w------- 1 b b 0 Dec 18 15:07 789
278 
279    分析总结:  只要文件的拥有者对这个文件有可写的权限,那么别人(包括自己)就可以删除它 (200权限例子)
280          文件的拥有者对这个文件没有可写的权限,别人就不能删除它,连自己都不能删除  (577权限的例子)
281 
282 
283 要实现只能自己删除自己的文件,别人不能删除,则解决方法:
284         chmod  o+t /test
285         同时文件的owner对这个文件要有写权限,对上级目录也要有写权限
286 ==================================================================
287 例六: create mask 和 directory mask 直接定义上传后的文件或者目录的权限
288 
289 [root@server ~]# vim /etc/samba/smb.conf
290 
291 [test]
292     comment = public for everyone
293     path = /test
294     browseable = yes
295     read only = yes
296     writeable = yes
297     create mask = 0444        --表示创建的或者上传的文件权限为444(原来默认值为744)
298     directory mask = 0666    --表示创建的或者上传的目录权限为666(原来默认值为755)
299     
300 [root@server ~]# systemctl restart smb   重启服务
301 
302 ==================================================================
303 
304 例七:对test共享资源实现a用户可以上传下载,b用户只能下载,拒绝匿名用户和其它samba用户(也用smbpasswd -a加入的用户)访问
305       valid users  = a,b,@group   --只允许a,b用户和group组(只要属于这个组就可以,不一定要gid为这个组)访问
306       write list  = a,@group         --允许写的用户列表
307 
308 [test]
309     comment = public for everyone
310     path = /test
311     guest ok = no    --拒绝匿名用户,或者使用public = no
312     valid users = a,b
313     write list = a    --写列表只允许a用户写,表示只允许a用户上传
314 ==================================================================
315 扩展
316 read list(不要理解错了,read list不是控制哪些人只能读,也是控制哪些人只能写,只不过和write list相反而已 )
317 
318 下面这两句参数合起来,表示所有人可写,但除了a
319     writable = yes
320     read list = a
321 ==================================================================
322 练习:对test共享资源实现a用户能上传(不能下载自己上传的文件),b用户只能下载,拒绝匿名用户和其它用户访问
323 
324 在例六的答案基础上再加一个参数create mask = 0344 就可以
325 ===========================================================================
326 
327 练习:对test共享资源实现a用户可以上传下载,b用户只能下载(但不能下载a上传的文件),拒绝匿名用户和其它用户访问
328 
329 在例六的答案基础上再加一个参数create mask = 0740 就可以
330 =============================================================================
331 
332 例八:对test共享资源实现a用户可以上传下载,b用户只能下载,属于smb组的用户可以登录和上传下载,别的普通用户和匿名用户都拒绝
333 
334 [root@server ~]# vim /etc/samba/smb.conf
335 
336 [test]
337     comment = public for everyone
338     path = /test
339     public = no
340     browseable = yes
341     valid users = a,b,@smb
342     write list = a,@smb
343 
344 [root@server ~]# systemctl restart smb
345 
346 [root@server ~]# groupadd smb
347 [root@server ~]# useradd smb1 -g smb
348 [root@server ~]# useradd smb2 -g smb
349 [root@server ~]# smbpasswd -a smb1
350 [root@server ~]# smbpasswd -a smb2
351 [root@server ~]# id smb1
352 uid=521(smb1) gid=521(smb) groups=521(smb)
353 [root@li ~]# id smb2
354 uid=522(smb2) gid=521(smb) groups=521(smb)
355 ==================================================================
356 例九:对test共享资源实现:
357 boss用户可以上传下载(下载所有人),还能删除自己上传的文件
358 secretary用户只能下载(下载所有人)
359 属于it组的用户(使用it1和it2两个用户来实验就可以)可以登录并且可以上传,下载和删除自己上传的文件,用户互相之间不能删除,互相之间不能下载别人的文件,但可以下载boss上传的文件
360 别的普通用户和匿名用户都拒绝
361 
362 
363 
364 useradd boss
365 useradd secretary
366 groupadd it
367 useradd -g it it1
368 useradd -g it it2
369 
370 smbpasswd -a boss
371 smbpasswd -a secretary
372 smbpasswd -a it1
373 smbpasswd -a it2
374 
375 ==================================================================
376 例十: 对test共享资源实现:
377 a上传下载(可以下载所有人上传的)
378 b只能下载(可以下载所有人上传的)
379 c可以上传但只能下载自己上传的
380 都可以删除自己的文件,互相不能删除它人文件,其他用户和匿名用户登录拒绝
381 
382 方法一:
383 -rwxr-----  a   a    file1
384 -rwxr-----  c   c    file2
385 b加到a和c组,a加到c组
386 
387 [test]
388     comment = public for everyone
389     path = /test
390     public = no
391     valid users = a,b,c
392     write list = a,c
393     create mask = 0740
394 
395 # mkdir /test
396 # chmod o+w,o+t /test
397 ==================================================================
398 例十一: 对test共享资源实现:
399 a上传下载(可以下载所有人上传的)
400 b只能下载(可以下载所有人上传的)
401 c可以上传但只能下载a上传的,自己上传的也不能下
402 都可以删除自己的文件,互相不能删除它人文件,其他用户和匿名用户登录拒绝
403 
404 
405 分析:
406 实现a上传的为默认的0744,c上传的为0344就可以实现
407 rwxr--r--       a       a       file
408 -wxr--r--       c       c       file
409 
410 如果实现不同用户上传的权限不一样呢?这里就要用到samba的用户子配置文件
411 
412 # useradd a
413 # useradd b
414 # useradd c
415 # smbpasswd -a a
416 # smbpasswd -a b
417 # smbpasswd -a c
418 # mkdir /test
419 # chmod 757 /test
420 # chmod o+t /test    
421 
422 # vim /etc/samba/smb.conf
423 
424 config file = /etc/samba/smb.conf.%U    --手动加上这一句,表示针对每个用户都可以单独写一个配置文件,加在上面的全局[global]里
425 
426 [test]
427     comment = public for everyone
428     path = /test
429     public = no
430     browseable = yes
431     valid users = a,b,c
432     write list = a
433     create mask = 0744
434 
435 # vim /etc/samba/smb.conf.c
436 
437 [test]
438     comment = public for everyone
439     path = /test
440     public = no
441     browseable = yes
442     writable = yes
443     create mask = 0344
444 
445 ==================================================================
446 
447 例十四:访问控制
448 
449 注意写到全局参数[global]下
450 
451 1,拒绝10.1.1网段
452 hosts deny = 10.1.1.
453 
454 1,拒绝10.1.1网段,但是允许10.1.1.35
455 hosts deny = 10.1.1.
456 hosts allow = 10.1.1.35 
457 
458 2,拒绝所有,但允许10.1.1网段,但又不允许10.1.1.45
459 hosts deny = all
460 hosts allow = 10.1.1.  EXCEPT 10.1.1.45
461 
462 
463 也可以写到单独的共享资源下,只针对此共享资源来进行访问控制

 

posted @ 2019-10-08 10:11  Mùtou  阅读(443)  评论(0编辑  收藏  举报