samba
一、概念
1.SMB
SMB 是一个协议 (Server Messages Block) Samba是一个它的使用软件,默认是一种在局域网上共享文件系统和打印机的一种通信协议,它为局域网内的不同操作系统的计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba能够在广域网上使用。
说明:
(1)FTP不仅能在局域网工作,还能在广域网上工作。 而SMB默认情况下,只能工作在局域网~
(2)FTP只能共享文件,不能共享打印机。 而SMB不仅能共享文件,还可以共享打印设备~
(3)早期打印机无法直接工作在Linux或Windows上,必须要通过线缆物理直连到打印机,你的电脑才能使用打印机。不能通过局域网直接访问使用打印机!
补充:现在打印机当作一个主机,给他连上网线配上IP;自己的电脑只要装上驱动,就能使用打印机了~
2.FTP和SMB
FTP
优点:文件传输、应用层协议、可跨平台
缺点:只能实现文件传输、无法实现文件系统挂载、无法直接修改服务器端文件
SMB
优点:使用SMB/CIFS协议、同样可跨平台、可以实现文件系统挂载、可以直接修改服务器端文件
缺点:文件传输没有FTP快,且主要用在局域网内的文件共享
Example:将A主机的存储空间映射到B主机上
(1)使用B主机的人把电影存在"本地"上班偷偷看,殊不知电影其实是存在A主机上,使用A的老板已经发现你在划水了~~
(2)使用B主机的人不需要主动用FTP来上传文件了,保存到B主机"本地"其实是保存到A主机上,对于不懂技术的人很省事
(3)不需要把文件拿出来,修改完,再上传覆盖,因为修改B主机"本地"其实就可以相当于修改A主机了~
3.CIFS和SMB
CIFS :Common Internet File System
SMB: Server Messages Block
先有SMB协议,经过Microsoft对技术文档的归纳总结,才有CIFS协议,CIFS协议可以使程序访问远程Internet计算机上的文件并要求此计算机提供服务。客户程序请求远在服务器上的服务器程序为他提供服务,服务器获得请求并返回相应。总而言之,CIFS协议是公开的或开放的SMB协议版本,并有Microsoft使用;SMB协议是局域网上用于服务器文件访问和打印的协议。然而,FTP普及率吊打它俩~.~!
4.NFS
在Unix Like 上面可以分享档案数据的 file system 是 NFS,那么在 Windows 上面使用的『网络邻居』所使用的档案系统则称为Common Internet File System, CIFS
二、Samba基本实验
1.Samba软件相关信息
1.1. 协议:
SMB/CIFS
1.2. 服务:
smb是服务名 实现资源共享、权限验证
TCP:139端口、445端口(TCP端口对应的服务是smbd服务,其作用是提供服务器中文件、打印资源的共享访问)
1.3. 配置文件目录:
/etc/samba/
主配置文件:
/etc/samba/smb.conf
别名配置文件:
/etc/smaba/smbusers
1.4. 如何在在Windows查看、打开或关闭SMB/CIFS协议?
1.5. 公司内网可以发现主机,并共享文件夹
2.登录验证模式(又叫做安全级别)
1 share 匿名验证 和ftp不同的是,samba不仅不需要密码,还不需要账号
2 user 本地用户验证 默认的登录验证模式(安全级别)
3 alias 别名用户验证 虚拟用户,减少对Linux用户管理的负担
扩展:tdbsam是一种本地用户验证,它使用一个数据库文件来验证账户和密码,数据库文件叫passdb.tdb。可以通过pdbedit -a向数据库中添加新用户,不过要建立的samba新用户必须先是本地用户(即赋予本地用户以samba权限)
(1)pdbedit -a username 赋予linux本地用户以samba权限,同时设置独立的samba密码(该密码存于/etc/samba/passdb.tdb)
(2)pdbedit -X username 删除samaba账户。这个账户就变成了1个普通的Linux账户了
(3)pdbedit -L 列出samba用户列表,读取passdb.tdb数据库文件
对比:FTP 密码来自/etc/shadow 账号来自/etc/passwd linux账户+linux密码
SMB 密码来自/etc/samba/passdb.tdb 账号来自/etc/passwd linux账户+samba密码
3.Windows登陆Linux smb服务器
[root@localhost network-scripts]# yum -y install samba [root@localhost network-scripts]# systemctl start smb [root@localhost network-scripts]# systemctl status smb ● smb.service - Samba SMB Daemon Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled) Active: active (running) since Sun 2020-05-03 12:12:05 CST; 6s ago [root@localhost network-scripts]# useradd -s /sbin/nologin zhangsan [root@localhost network-scripts]# passwd zhangsan Changing password for user zhangsan. New password: 123456 BAD PASSWORD: The password is shorter than 8 characters Retype new password:123456 [root@localhost network-scripts]# pdbedit -a zhangsan new password:111 retype new password:111 Unix username: zhangsan NT username: Account Flags: [U ] User SID: S-1-5-21-4156730158-4116294462-2038935887-1000 Primary Group SID: S-1-5-21-4156730158-4116294462-2038935887-513 Full Name: Home Directory: \\localhost\zhangsan HomeDir Drive: Logon Script: Profile Path: \\localhost\zhangsan\profile Domain: LOCALHOST Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: Wed, 06 Feb 2036 23:06:39 CST Kickoff time: Wed, 06 Feb 2036 23:06:39 CST Password last set: Sun, 03 May 2020 12:14:13 CST Password can change: Sun, 03 May 2020 12:14:13 CST Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Windows端要开启smb服务,才能连接到smb服务器
4.Windows挂载Linux smb服务器
可以新建、修改、删除文件!
三、Samba配置
1.常见配置参数
[global] 用于定义Samaba服务器的总体特性,配置对全局范围生效 server string = smb server version %v #对samba服务器的描述,%v代表版本号 workgroup = DEBIAN_FANS #samba服务器属于哪个工作组名或域名 hosts allow = 192.168.0. #指定那些主机可以访问 hosts deny = 192.168.8. #指定那些主机不可以访问 bind interface only = yes # 如果设置成是,samba只对这几个网络接口服务 interfaces = 192.168.0.100/255.255.255.0 #设置samba将对哪些网络接口进行服务。 username map = /etc/samba/smbusers #用户别名文件。 socket address = 192.168.0.10 #强制samba只在该端口监听 include = /etc/samba/smb.conf.another #包括另外的samba配置文件 show add printer wizard= yes # 当用户添加打印机时,显示安装向导. load printers = yes log file = /var/log/samba/%m.log #日志文件,%m表示主机名 max log size = 50 #日志文件的大小,单位kb,0表示不限制单个日志文件的大小 log level = 3 #日志级别 0 表示没有,3 一般比较合理 security = user #安全级别,默认为本地user,还有匿名share、别名alias passdb backend = tdbsam #使用 linux账户+samba密码 的验证模式 load printers = yes/no #是否允许samba加载打印机和共享
[homes] 用于定义用户宿主目录的共享属性 [homes] #共享名(不能被修改,泛指用户对应的家目录) comment = Home Dir #共享描述 browseable = no #共享是否可看(可以看到其他用户的家目录,browseable与public 效果等同) writable = yes #共享是否可写(配置文件+文件系统 共同决定是否可写) valid users = %S,name,@group #可登陆用户(允许访问该共享的用户,逗号隔开) read only = no create mode = 0777 directory mode = 0775
[printers] 设置打印机的共享属性 path = /var/spool/samba #共享设备路径 guest ok = yes #是否允许匿名访问 browseable = yes printable = yes #是否可以打印 read only = yes #只可读
[自定义] [自定义] #共享名(不是共享出来的目录名) comment = path = #共享路径(路径要自己检查一下是否存在) public= yes browseable = yes writeable = yes
[配置文件检查工具] testparm 检查配置文件的语法是否正确:Loaded services file OK. -v 显示samba支持的所有选项
[root@localhost user1]# testparm -v Load smb config files from /etc/samba/smb.conf Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions 按回车键,可以看具体的配置信息
2.访问控制
3.启动管理
[root@localhost user1]# systemctl enable smb
[root@localhost user1]# systemctl start smb
[root@localhost user1]# systemctl status smb
4.客户端登陆
4.1 Linux端:
[root@localhost user1]# yum -y install samba-client #安装samba客户端
smbclient -U 用户名 -L //服务器地址
[root@localhost user1]# smbclient -U zhangsan -L //10.0.0.50 #查看服务器共享 Enter SAMBA\zhangsan's password: Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers IPC$ IPC IPC Service (Samba 4.10.4) zhangsan Disk Home Directories Reconnecting with SMB1 for workgroup listing. Server Comment --------- ------- Workgroup Master
smbclient -U 用户名 //服务器地址/共享名
[root@localhost user1]# smbclient -U zhangsan //10.0.0.50/zhangsan #登陆服务器共享 Enter SAMBA\zhangsan's password: Try "help" to get a list of possible commands. smb: \>
4.2 Windows端:
Win+R ——> \\服务器地址\用户名
Win+R ——> cmd ——> net use * /del ——>清空缓存
四、Samba部署实验
1.本地验证(登陆、上传/下载、删除、覆盖)
[root@localhost zhangsan]# vim /etc/samba/smb.conf comment = share dir path = /atguigu public = Yes writable = Yes browseable = Yes [root@localhost zhangsan]# mkdir /atguigu [root@localhost zhangsan]# systemctl restart smb [root@localhost user1]# smbclient -U zhangsan -L //10.0.0.50 Enter SAMBA\zhangsan's password: Sharename Type Comment --------- ---- ------- atguigu Disk share dir print$ Disk Printer Drivers IPC$ IPC IPC Service (Samba 4.10.4) zhangsan Disk Home Directories Reconnecting with SMB1 for workgroup listing. Server Comment --------- ------- Workgroup Master --------- -------
服务端:
[root@localhost ~]# ls -ld /atguigu #配置文件和文件系统共同决定写权限! drwxr-xr-x 2 root root 6 May 6 23:29 /atguigu [root@localhost ~]# chmod o+w /atguigu #可以上传、删除自己和别人的文件、覆盖自己的文件(不能覆盖别人的文件) [root@localhost ~]# ls -ld /atguigu/ drwxr-xrwx 2 root root 6 May 6 23:29 /atguigu/
客户端:
[root@localhost user1]# smbclient -U zhangsan //10.0.0.50/atguigu Enter SAMBA\zhangsan's password: Current directory is \\10.0.0.50\atguigu\ smb: \> ls . D 0 Wed May 6 23:44:16 2020 .. D 0 Wed May 6 23:29:38 2020 guiguserver N 16 Wed May 6 23:44:16 2020 27245572 blocks of size 1024. 23557296 blocks available smb: \> get guiguserver getting file \guiguserver of size 16 as guiguserver (0.1 KiloBytes/sec) (average 0.1 KiloBytes/sec) smb: \> !pwd /home/user1 smb: \> !ls client Desktop Documents Downloads guiguserver io Music Pictures Public Templates Videos smb: \> put client putting file client as \client (0.2 kb/s) (average 0.2 kb/s)
2.访问控制
2.1用户登录限制
服务端:
[root@localhost atguigu]# vim /etc/samba/smb.conf [atguigu] comment = share dir path = /atguigu public = Yes writable = Yes browseable = Yes valid users = zhangsan
[root@localhost atguigu]# systemctl restart smb
客户端:
[root@localhost user1]# smbclient -U lisi //10.0.0.50/atguigu Enter SAMBA\lisi's password: tree connect failed: NT_STATUS_ACCESS_DENIED [root@localhost user1]# smbclient -U zhangsan //10.0.0.50/atguigu Enter SAMBA\zhangsan's password: Try "help" to get a list of possible commands. smb: \>
2.2用户写权限限制
服务端:
[root@localhost atguigu]# vim /etc/samba/smb.conf [atguigu] comment = share dir path = /atguigu public = Yes writable = Yes browseable = Yes ; valid users = zhangsan read only = yes write list = zhangsan #只允许zhangsan有写权限 [root@localhost atguigu]# systemctl restart smb
客户端:
[root@localhost user1]# smbclient -U lisi //10.0.0.50/atguigu Enter SAMBA\lisi's password: Try "help" to get a list of possible commands. smb: \> ls . D 0 Wed May 6 23:52:54 2020 .. D 0 Wed May 6 23:29:38 2020 guiguserver N 16 Wed May 6 23:44:16 2020 lisiclient A 11 Wed May 6 23:52:37 2020 client A 29 Wed May 6 23:54:52 2020 27245572 blocks of size 1024. 23557024 blocks available smb: \> rm client NT_STATUS_ACCESS_DENIED deleting remote file \client [root@localhost user1]# smbclient -U zhangsan //10.0.0.50/atguigu Enter SAMBA\zhangsan's password: Try "help" to get a list of possible commands. smb: \> rm client smb: \> ls . D 0 Thu May 7 00:36:21 2020 .. D 0 Wed May 6 23:29:38 2020 guiguserver N 16 Wed May 6 23:44:16 2020 lisiclient A 11 Wed May 6 23:52:37 2020 27245572 blocks of size 1024. 23557028 blocks available
2.3文件上传默认权限
服务端:
[root@localhost atguigu]# vim /etc/samba/smb.conf [atguigu] comment = share dir path = /atguigu public = Yes writable = Yes browseable = Yes ; valid users = zhangsan read only = yes write list = zhangsan #只允许zhangsan有写权限 creat mask = 0644 [root@localhost atguigu]# systemctl restart smb
客户端:
[root@localhost user1]# smbclient -U zhangsan //10.0.0.50/atguigu Enter SAMBA\zhangsan's password: Try "help" to get a list of possible commands. smb: \> put client putting file client as \client (1.1 kb/s) (average 1.1 kb/s) smb: \> put io putting file io as \io (4.2 kb/s) (average 1.8 kb/s)
服务端:
[root@localhost atguigu]# ll total 8 -rw-r--r-- 1 zhangsan zhangsan 29 May 7 00:42 client -rw-r--r-- 1 zhangsan zhangsan 34 May 7 00:43 io
3.用户别名(虚拟用户)
服务端:
[root@localhost atguigu]# vim /etc/samba/smb.conf [global] workgroup = SAMBA security = user passdb backend = tdbsam printing = cups printcap name = cups load printers = yes cups options = raw username map = /etc/samba/smbusers [root@localhost samba]# vim smbusers zhangsan = zs [root@localhost atguigu]# systemctl restart smb
客户端:
[root@localhost user1]# smbclient -U zs //10.0.0.50/atguigu Enter SAMBA\zs's password: Try "help" to get a list of possible commands. smb: \>
4.映射网络驱动器
4.1Linux客户端:
1.临时挂载
mount -t 文件类型 -o username=xxx,password=xxx //服务端地址/共享名 客户端挂载点
[root@localhost user1]# mkdir /mnt/sharedir #先创建、检查挂载点 [root@localhost user1]# mount -t cifs -o username=zhangsan,password=123 //10.0.0.50/atguigu /mnt/sharedir/ [root@localhost user1]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel-root 26G 3.6G 23G 14% / devtmpfs 1.4G 0 1.4G 0% /dev tmpfs 1.4G 0 1.4G 0% /dev/shm tmpfs 1.4G 11M 1.4G 1% /run tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup /dev/sda1 1014M 170M 845M 17% /boot tmpfs 283M 4.0K 283M 1% /run/user/42 tmpfs 283M 32K 283M 1% /run/user/1000 /dev/sr0 4.4G 4.4G 0 100% /run/media/user1/RHEL-7.5 Server.x86_64 //10.0.0.50/atguigu 26G 3.6G 23G 14% /mnt/sharedir
2.永久挂载:/etc/fstab
[root@localhost user1]# mkdir /mnt/sharedir #先创建、检查挂载点 [root@localhost user1]# vim /etc/fstab /dev/mapper/rhel-root / xfs defaults 0 0 UUID=4582ad72-805b-4be8-9ffc-5135a287918e /boot xfs defaults 0 0 /dev/mapper/rhel-swap swap swap defaults 0 0 //10.0.0.50/atguigu /mnt/sharedir cifs defaults,username=zhangsan,password=123 0 0 [root@localhost user1]# mount -a
[root@localhost user1]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel-root 26G 3.6G 23G 14% / devtmpfs 1.4G 0 1.4G 0% /dev tmpfs 1.4G 0 1.4G 0% /dev/shm tmpfs 1.4G 11M 1.4G 1% /run tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup /dev/sda1 1014M 170M 845M 17% /boot tmpfs 283M 4.0K 283M 1% /run/user/42 tmpfs 283M 32K 283M 1% /run/user/1000 /dev/sr0 4.4G 4.4G 0 100% /run/media/user1/RHEL-7.5 Server.x86_64 //10.0.0.50/atguigu 26G 3.6G 23G 14% /mnt/sharedir
[root@localhost mnt]# cd /mnt/sharedir/ [root@localhost sharedir]# vim client.txt #在客户端创建文件,等会儿到服务端检查有没有。
this is a client's file
服务端:可以实时检查到创建的文件
[root@localhost atguigu]# cd /atguigu/ #这是atguigu共享名的共享路径 [root@localhost atguigu]# cat client.txt this is a client's file
[root@localhost atguigu]# rm client.txt rm: remove regular file ‘client.txt’? y
4.2Windows客户端:
注意使用反斜杠\\
ctrl + w 往回删除一个单词,光标放在最末尾
ctrl + u 删除光标以前的字符
ctrl + k 删除光标以后的字符
ctrl + a 移动光标至的字符头
ctrl + e 移动光标至的字符尾
ctrl + l 清屏
1.
interfaces = 192.168.0.100/255.255.255.0 #设置samba将对哪些网络接口进行服务。