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 也可以写到单独的共享资源下,只针对此共享资源来进行访问控制