FTP(文件传输协议)
简介
FTP协议:文件传输协议(File Transfer Protocol)
控制连接(端口号21)
作用:主要用来传送通信过程中需要执行的FTP命令、命令的响应(只需要很小的网络带宽)
过程:
- FTP服务端监听21号端口等待控制连接的建立
- 建立控制连接后,需要验证客户身份,决定是否建立数据连接
- 当需要目录列表,传输文件时,才建立数据连接,并且每次客户端都是用不同的端口号来建立数据连接。数据传输完毕,就中断这条临时的数据连接
- 在FTP连接期间,控制连接始终保持通常的连接状态。在数据连接存在期间,控制连接必须存在;一旦控制连接断开,数据连接会自动关闭。
- 数据连接(端口号20)
FTP服务端监听20号端口等待数据连接的建立
建立方式:
- 主动模式
- 通过三次握手,建立控制连接;客户端的源端口是高位随机端口,目标端口是21端口
- 控制连接建立后,客户端进行身份验证,协商数据连接采用主动模式;随后客户端会向FTP服务器发送Port报文,表明自己监听的IP+端口,并等待FTP服务器(20端口)向自己监听的IP+端口发起数据连接请求。
- 服务端发起数据连接请求,建立数据连接
- 被动模式
- 通过三次握手,建立控制连接;客户端的源端口是高位随机端口,目标端口是21端口
- 控制连接建立后,客户端进行身份验证,协商数据连接采用主动模式;随后客户端会向FTP服务器发送PASV报文,表明自己用的是被动模式
- 服务端收到PASV报文,于是向客户端发送Port报文,表明自己监听的IP+端口
- 客户端发起数据连接请求,建立数据连接
软件包:vsftpd、tftp(了解)
vsftpd服务介绍
- 服务包:vsftpd
- 服务类型:由Systemd启动的守护进程
- 配置单元: /usr/lib/systemd/system/vsftpd.service
- 守护进程: /usr/sbin/vsftpd
- 端口: 21(ftp) , 20(ftp-data)
- 主配置文件: /etc/vsftpd/vsftpd.conf
- 用户访问控制配置文件: /etc/vsftpd/ftpusers /etc/vsftpd/user_list
- 日志文件: /etc/logrotate.d/vsftpd
配置文件参数
| 参数 | 作用 |
|---|---|
| listen=NO | 是否以独立运行的方式监听服务 |
| listen_address=ip地址 | 设置要监听的IP地址 |
| listen_port=21 | 设置FTP服务的监听端口 |
| download_enable=YES | 是否允许下载文件 |
| userlist_enable=YES | 设置用户列表为允许(白名单) |
| userlist_deny=YES | 设置用户列表为”禁止”(黑名单) |
| max_clients=0 | 最大客户端连接数,0为不限制 |
| max_per_ip=0 | 同一IP地址最大连接数,0为不限制 |
| anonymous_enable=YES | 是否允许匿名用户访问 |
| anon_upload_enable=YES | 是否允许匿名用户上传文件 |
| anon_umask | 匿名用户上传文件的umask |
| anon_root=/var/ftp | 匿名用户的ftp根目录 |
| anon_mkdir_write_enable=YES | 是否允许匿名用户创建目录 |
| anon_other_write_enable=YES | 是否开放匿名用户的其他写入权限(如重命名、删除) |
| anon_max_rate=0 | 匿名用户的最大传输速率,0为不限制 |
| local_enable=yes | 是否允许本地用户登录 |
| local_umask=022 | 本地用户上传文件的umask |
| local_root=/var/ftp | 本地用户的ftp根目录 |
| chroot_local_user=YES | 是否将用户权限禁锢在ftp目录,以确保安全 |
| local_max_rate=0 | 本地用户最大传输速率,0为不限制 |
基础配置
安装vsftpd
[root@server1 ~]# yum install vsftpd -y
启动服务
[root@server1 ~]# systemctl start vsftpd[root@server1 ~]# systemctl enable vsftpdCreated symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
关闭防火墙和selinux
[root@server1 ~]# systemctl stop firewalld[root@server1 ~]# setenforce 0
客户端工具
Linux中
ftp ```bash [root@server1 ~]# touch /var/ftp/abc.txt #准备分发文件
[root@server2 ~]#yum install ftp -y [root@server2 ~]# ftp 192.168.80.132 Connected to 192.168.80.132 (192.168.80.132). 220 (vsFTPd 3.0.2) Name (192.168.80.132:root): anonymous #输入用户名,anonymous指匿名用户 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd #这里pwd查看到在根目录,但这个根目录指的是匿名用户登录ftp的根目录/var/ftp 257 “/“ ftp> ls -a #查看文件发现之前准备好的abc.txt 227 Entering Passive Mode (192,168,80,132,117,138). 150 Here comes the directory listing. drwxr-xr-x 3 0 0 32 Feb 24 07:39 . drwxr-xr-x 3 0 0 32 Feb 24 07:39 .. -rw-r—r— 1 0 0 0 Feb 24 07:39 abc.txt drwxr-xr-x 2 0 0 6 Oct 13 16:10 pub 226 Directory send OK. ftp> get abc.txt #下载abc.txt local: abc.txt remote: abc.txt 227 Entering Passive Mode (192,168,80,132,183,174). 150 Opening BINARY mode data connection for abc.txt (0 bytes). 226 Transfer complete.
退出ftp,查看下载到的文件<br />- lftp```bash[root@server2 ~]# yum install lftp[root@server2 ~]# lftp 192.168.80.132lftp 192.168.80.132:~> pwdftp://192.168.80.132lftp 192.168.80.132:~> ls-rw-r--r-- 1 0 0 0 Feb 24 07:39 abc.txtdrwxr-xr-x 2 0 0 6 Oct 13 16:10 pub
- 区别
ftp工具是一定要输入用户名称和密码的,登录成功或者失败会给出提示。
lftp不会直接给出登录成功或者失败的提示,需要输入ls工具才可以发现是否连接成功,优点在于连接更加方便
Windows
- 第一种
可以在浏览器、运行窗口或者资源管理器中输入 ftp://IP地址/ ,这样访问的是ftp的根位置,如果需要访问相关目录可以输入ftp://IP地址/目录/文件名![`@@]O_HE~]XM830J0D~IYSY.png](/uploads/projects/u427629@ge071f/c75ed57d81b2006f540e77c36415b798.png)
- 第二种
在DOS窗口中,输入命令 ftp
注意:需要注意的是直接访问ftp服务器的IP地址时访问的根位置目录是 /var/ftp
案例一,匿名用户访问(默认开启)
尝试以匿名用户登录ftp上传文件,权限不足
[root@server2 ~]# ftp 192.168.80.132Connected to 192.168.80.132 (192.168.80.132).220 (vsFTPd 3.0.2)Name (192.168.80.132:root): anonymous331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> put anaconda-ks.cfglocal: anaconda-ks.cfg remote: anaconda-ks.cfg227 Entering Passive Mode (192,168,80,132,93,187).550 Permission denied.
查看FTP服务器配置文件
#由于配置文件里注释很多,先去注释[root@server1 ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak[root@server1 ~]# grep -Ev "^#|^$" /etc/vsftpd/vsftpd.conf.bak > /etc/vsftpd/vsftpd.conf[root@server1 ~]# vim /etc/vsftpd/vsftpd.confanonymous_enable=YESlocal_enable=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_std_format=YESlisten=NOlisten_ipv6=YESpam_service_name=vsftpduserlist_enable=YEStcp_wrappers=YES
可以在配置文件里添加以下配置
anon_umask=022 #匿名用户上传文件的umaskanon_upload_enable=Yes #允许匿名用户上传文件anon_mkdir_write_enable=Yes #允许匿名用户创建目录anon_other_write_enable=Yes #允许匿名用户执行其他写操作
配置完后重启vsftpd服务,尝试以匿名用户登录ftp,上传文件,发现提示无法创建文件,这是因为匿名用户的根目录没有写权限。
[root@server1 ~]# systemctl restart vsftpd[root@server2 ~]# ftp 192.168.80.132Connected to 192.168.80.132 (192.168.80.132).220 (vsFTPd 3.0.2)Name (192.168.80.132:root): anonymous331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> put anaconda-ks.cfglocal: anaconda-ks.cfg remote: anaconda-ks.cfg227 Entering Passive Mode (192,168,80,132,32,137).553 Could not create file.

我们给与这个文件夹权限,再尝试一次,上传成功了。
[root@server1 ~]# chmod 777 -R /var/ftpserver2ftp> put anaconda-ks.cfglocal: anaconda-ks.cfg remote: anaconda-ks.cfg227 Entering Passive Mode (192,168,80,132,113,181).150 Ok to send data.226 Transfer complete.1255 bytes sent in 0.000998 secs (1257.52 Kbytes/sec)
![)3505H[(%AVRB134@I3T.png
案例二,本地用户访问
使用FTP服务器本地用户登录,登录后的位置在用户家目录
[root@server1 ~]# vim /etc/vsftpd/vsftpd.confanonymous_enable=NOlocal_enable=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_std_format=YESlisten=NOlisten_ipv6=YESpam_service_name=vsftpduserlist_enable=YEStcp_wrappers=YES[root@server1 ~]# systemctl restart vsftpd[root@server1 ~]# useradd lisi[root@server1 ~]# passwd lisi[root@server2 ~]# ftp 192.168.80.132Connected to 192.168.80.132 (192.168.80.132).220 (vsFTPd 3.0.2)Name (192.168.80.132:root): lisi331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> pwd257 "/home/lisi"ftp> put abc.txtlocal: abc.txt remote: abc.txt227 Entering Passive Mode (192,168,80,132,36,213).150 Ok to send data.226 Transfer complete.ftp> ls227 Entering Passive Mode (192,168,80,132,64,233).150 Here comes the directory listing.-rw-rw-r-- 1 1004 1004 0 Feb 24 09:31 abc.txt226 Directory send OK.
- 注意:出现在
/etc/vsftpd/ftpuser/etc/vsftpd/user_list这两个文件中的内容将会被定义为黑名单
![GV]5%[N_IXPR_IGFS09QEP.png
![CADLMG79JMOM5R~9~E(UXJ.png
把两个文件里的root用户注释掉,重启服务 systemctl restart vsftpd,然后在客户端用root用户登录
[root@server2 ~]# ftp 192.168.80.132Connected to 192.168.80.132 (192.168.80.132).220 (vsFTPd 3.0.2)Name (192.168.80.132:root): root331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> pwd257 "/root"ftp>
案例三,虚拟用户访问
创建FTP用于认证的用户数据库文件,其中奇数行为用户名,偶数行为密码。
[root@server1 ~]# vim /etc/vsftpd/vuser.listeaglecentosciscocentoshuaweicentos
使用db_load命令,用hash算法将原本的明文信息文件转化为数据库文件。
- 降低数据库文件权限,防止其他人查看
删除原始明文文件
[root@server1 ~]# db_load -T -t hash -f /etc/vsftpd/vuser.list /etc/vsftpd/vuser.db[root@server1 ~]# chmod 600 /etc/vsftpd/vuser.db[root@server1 ~]# rm -f /etc/vsftpd/vuser.list[root@server1 ~]# file /etc/vsftpd/vuser.db/etc/vsftpd/vuser.db: Berkeley DB (Hash, version 9, native byte-order)
创建一个本地用户作为虚拟用户的代理,为了安全,禁止这个本地用户登录
[root@server1 ~]# useradd -d /var/ftpuser -s /sbin/nologin virtual[root@server1 ~]# ls -ld /var/ftpuserdrwx------. 2 virtual virtual 62 2月 24 18:03 /var/ftpuser[root@server1 ~]# chmod -Rf 755 /var/ftpuser/
新建一个用于虚拟用户认证的PAM文件
[root@server1 ~]# vim /etc/pam.d/vsftpd.vuauth required pam_userdb.so db=/etc/vsftpd/vuseraccount required pam_userdb.so db=/etc/vsftpd/vuser
配置文件
[root@server1 ~]# vim /etc/vsftpd/vsftpd.confanonymous_enable=NOlocal_enable=YESguest_enable=YESguest_username=virtualallow_writeable_chroot=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_std_format=YESlisten=NOlisten_ipv6=YESpam_service_name=vsftpd.vuuserlist_enable=YEStcp_wrappers=YES
如果想要针对用户设置不同的权限
[root@server1 ~]# mkdir /etc/vsftpd/vusers_dir/[root@server1 ~]# cd /etc/vsftpd/vusers_dir/[root@server1 vusers_dir]# touch huawei[root@server1 vusers_dir]# vim ciscoanon_upload_enable=YESanon_mkdir_write_enable=YESanon_other_write_enable=YES[root@server1 vusers_dir]# vim /etc/vsftpd/vsftpd.confanonymous_enable=NOlocal_enable=YESguest_enable=YESguest_username=virtualallow_writeable_chroot=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_std_format=YESlisten=NOlisten_ipv6=YESpam_service_name=vsftpd.vuuserlist_enable=YEStcp_wrappers=YESuser_config_dir=/etc/vsftpd/vusers_dir[root@server1 vusers_dir]# systemctl restart vsftpd
![XPRB%N~__LRGJ8XSCY)EAP.png
![V8`K2I_JJRVS07KNSM$~4L.pngNFS(网络文件系统)
简介
- Linux/Unix系统之间共享文件系统的一种协议,通过网络让不同主机之间共享文件和目录
- NFS的客户端主要为Linux
特点:
特点
可以通过网络从远程主机程序上请求服务,而不需要了解底层网络技术的协议。
工作在OSI模型的会话层。
RPC使用网络端口111来监听客户端的请求
RPC协议模型
![[O]2(5BO%2R0(WO)8@(E.png
以NFS为例来解释一下:
- NFS服务在启动时向Portmapper注册端口号
- 客户端联系服务端Portmapper询问NFS服务的端口号是多少
- Portmapper告诉客户端NFS服务的端口号
- 客户端访问得到的端口号
- NFS服务端收到请求后响应客户端
若是要形象的形容一下,NFS服务就像是房源,有一个叫Portmapper的中介,买房的人是客户端。
案例,基于NFS搭建web后端NAS存储
用户访问负载均衡器节点(负载均衡的知识暂时不用关心),负载均衡器会将请求负载均衡得分发给web服务器,比如请求index.html界面,每一台服务器都会去NAS存储服务器上寻找想要被读取的数据。这可以大大降低服务器成本、运维成本(修改数据会牵一发而动全身)![]~OQTY(LQ4SOL67)WLE@@BB.png](/uploads/projects/u427629@ge071f/d5a2f523f22e2710dbb95475b46b936d.png)
- 实验准备
- web服务器:server1(192.168.80.132)、server2(192.168.80.129)
- nas存储端:server3(192.168.80.134)
关闭防火墙和selinux,每台机器操作都一样
[root@server1 ~]# systemctl stop firewalld[root@server1 ~]# setenforce 0
准备web服务
[root@server1 ~]# yum install httpd -y[root@server1 ~]# systemctl start httpd[root@server2 ~]# yum install httpd -y[root@server2 ~]# systemctl start httpd
准备nas端
# 安装nfs服务[root@server3 ~]# yum install -y nfs-utils# 准备共享目录[root@server3 ~]# mkdir /webdata# 准备共享文件[root@server3 ~]# echo "<h1>today i study but you sleep i good you bad</h1>" >/webdata/index.html# 配置nfs服务[root@server3 webdata]# cat /etc/exports/webdata 192.168.80.0/24(rw)# 启动nfs服务器[root@server3 ~]# systemctl start nfs-server.service[root@server3 ~]# systemctl enable nfs-server.service
在web端查看共享 ```bash [root@server1 ~]# yum install -y nfs-utils [root@server1 ~]# showmount -e 192.168.80.134 Export list for 192.168.80.134: /webdata 192.168.80.0/24
[root@server2 ~]# yum install -y nfs-utils [root@server2 ~]# showmount -e 192.168.80.134 Export list for 192.168.80.134: /webdata 192.168.80.0/24
5. 挂载后端nas存储```bash[root@server1 ~]# mount -t nfs 192.168.80.134:/webdata /var/www/html/[root@server1 ~]# df文件系统 1K-块 已用 可用 已用% 挂载点/dev/mapper/centos-root 17811456 1455376 16356080 9% /devtmpfs 919456 0 919456 0% /devtmpfs 931624 0 931624 0% /dev/shmtmpfs 931624 9768 921856 2% /runtmpfs 931624 0 931624 0% /sys/fs/cgroup/dev/sda1 1038336 148728 889608 15% /boottmpfs 186328 0 186328 0% /run/user/0192.168.80.134:/webdata 17811456 1293824 16517632 8% /var/www/html[root@server2 ~]# mount -t nfs 192.168.80.134:/webdata /var/www/html[root@server2 ~]# df文件系统 1K-块 已用 可用 已用% 挂载点/dev/mapper/centos-root 17811456 1204224 16607232 7% /devtmpfs 485792 0 485792 0% /devtmpfs 497960 0 497960 0% /dev/shmtmpfs 497960 7800 490160 2% /runtmpfs 497960 0 497960 0% /sys/fs/cgroup/dev/sda1 1038336 135376 902960 14% /boottmpfs 99596 0 99596 0% /run/user/0192.168.80.134:/webdata 17811456 1294336 16517120 8% /var/www/html
- 最后在浏览器访问即可
NFS配置参数
SAMBA
简介
- 历史
- 1987年,微软公司和英特尔公司共同制定了SMB(Server Messages Block,服务器消息块)协议,旨在解决局域网内的文件或打印机等资源的共享问题,这也使得在多个主机之间共享文件变得越来越简单。到了1991年, 当时还在读大学的Tridgwell为了解决Linux系统与Windows系统之间的文件共享问题,基于SMB协议开发出了 SMBServer服务程序。这是一款开源的文件共享软件,经过简单配置就能够实现Linux系统与Windows系统之间的 文件共享工作。当时,Tridgwell想把这款软件的名字SMBServer注册成为商标,但却被商标局以SMB是没有意义的 字符而拒绝了申请。后来Tridgwell不断翻看词典,突然看到一个拉丁舞蹈的名字—Samba,而且这个热情洋溢的 舞蹈名字中又恰好包含了“SMB”,于是Samba服务程序的名字由此诞生。Samba服务程序现在已经成为在Linux系 统与Windows系统之间共享文件的最佳选择。
- SMB协议
- SMB(服务信息模块)协议是一个高层协议、它提供了在网络上的不同计算机之间共享文件,打印机和不同通信资料的手段
- SMB使用NetBIOS API实现面向连接的协议,该协议为Window是客户程序和服务提供了一个通过虚链路按照 请求——响应方式进行通信的机制
- SMB的工作原理就是让NetBIOS与SMB协议运行在TCP/IP上,并且使用NetBIOS的名字解释器让Linux机器可 以在Windows的网络邻居中被看到,从而和Windows9x/NT/200X进 行相互沟通,共享文件和打印机
- CIFS协议
- 通用网际文件系统是微软服务器消息块协议(SMB)的增强版 提供计算机用户在企业内部网和因特网上共享文件的标准方法
- CIFS在TCP/IP运行,利用英特网上的全球域名服务系统(DNS)增强其可扩展性,同时为因特网上普遍存在 的慢速拨号连接优化
- NetBIOS协议
- NetBIOS是Network Basic Input/Output System的简称,网络基本输入输出协议。协议,一般指能用于局域网通信的一套API,是由IBM公司开发的。主要作用,通过NetBIOS协议获得计算机名称,然后把计算机名称解析为对应的IP地址
- 基于C/S模式
- 应用场景
- 文件和打印机共享:文件和打印机共享是samba的主要功能,SMB进程实现资源共享,将文件和打印机发布到网络之中,以供用户可以访问
- 身份验证和权限设置:samba服务支持user mode和domain mode 等身份验证和权限设置模式,通过加密方式可以保护共享的文件和打印机
- 名称解析:samba通过NMB服务可以搭建NBNS服务器,提供域名解析,将计算机的NetBIOS名称解析为ip地址
- 浏览服务,局域网中,samba可以成为本地主浏览服务器,保存可用资源列表,当使用客户端访问windows网上邻居时,会提供浏览列表,显示共享目录、打印机资源等
端口号:139和445
安装
[root@server1 ~]# yum install samba -y
相关配置文件
/etc/sysconfig/samba:用于设置守护进程的启动参数。/etc/samba/smb.conf:主配置文件。/etc/samba/smbusers:用于映射Linux用户和Windows用户。/etc/samba/lmhosts:用于设置NetBIOS名字与IP地址的对应关系表。/etc/pam.d/samba:Samba的PAM配置文件/etc/rc.d/init.d/smb:Samba的INIT启动脚本
相关工具
服务端工具:/usr/bin/smbpasswd:用于设置Samba用户账号及口令/usr/bin/testparm:用于检测配置文件的正确性/usr/bin/smbstatus:列出目前Samba的联机状况客户端工具:/usr/bin/findsmb:用于查找网络中的Samba服务器/usr/bin/smbclient:Linux下的Samba客户端/usr/bin/smbget:基于SMB/CIFS的类似于wget的下载工具/usr/bin/smbtar:类似于tar的归档工具,用于将SMB/CIFS的共享打包备份到Linux主机
主配置文件
[root@server1 ~]# cat /etc/samba/smb.conf# 默认主配置文件:[global] #全局参数。workgroup = MYGROUP #工作组名称server string = Samba Server Version %v #服务器介绍信息,参数%v为显示SMB版本号log file = /var/log/samba/log.%m #定义日志文件的存放位置与名称,参数%m为来访的主机名max log size = 50 #定义日志文件的最大容量为50KBsecurity = user #安全验证的方式,总共有4种#share:来访主机无需验证口令;比较方便,但安全性很差#user:需验证来访主机提供的口令后才可以访问;提升了安全性#server:使用独立的远程主机验证来访主机提供的口令(集中管理账户)#domain:使用域控制器进行身份验证passdb backend = tdbsam #定义用户后台的类型,共有3种#smbpasswd:使用smbpasswd命令为系统用户设置Samba服务程序的密码#tdbsam:创建数据库文件并使用pdbedit命令建立Samba服务程序的用户#ldapsam:基于LDAP服务进行账户验证load printers = yes #设置在Samba服务启动时是否共享打印机设备cups options = raw #打印机的选项[homes] #共享参数comment = Home Directories #描述信息browseable = no #指定共享信息是否在“网上邻居”中可见writable = yes #定义是否可以执行写入操作,与“read only”相反[printers] #打印机共享参数comment = All Printerspath = /var/spool/samba #共享文件的实际路径(重要)。browseable = noguest ok = no #是否所有人可见,等同于"public"参数。writable = noprintable = yes
安全等级
Samba安全等级:User:由本地Samba服务器负责账户验证使用smbpasswd 设置账号(默认的安全等级)Domain:账户验证账户及口令的工作由其他的Windows 或Samba域控制器负责需要使用“password server”指令指定验证服务器Ads:验证账户及口令的工作由支持Kerberos验证的Windows活动目录服务器负责。需要使用“realm”指令指定Kerberos领域Share:匿名共享Samba账户及口令数据库1.Samba使用的账户文件/数据库是与系统账户文件分离的2.当设置了user的安全等级后(默认),将由本地系统对问Samba共享资源的用户进行认证3.用.tdb格式的口令数据库,初始情况下口令数据库文件并不存在4.为了创建Samba的口令数据库文件,管理员可以在添加Samba账户的同时创建它5.管理员可以使用smbpasswd命令配置Samba账号并设置其口令
案例,配置一个共享资源(具体步骤)
- 设置共享名称
- 共享资源发布后,必须为每个共享目录或打印机设置不同的共享名称,给网络用户访问时使用,并且共享名可以与原目录名不同。例如,samba服务器上有个目录为/share,需要发布该目录为共享目录,定义共享名为public。
- 共享资源描述
- 格式:
comment = 备注信息 - 备注信息通常是用来解释说明的
- 格式:
- 共享资源路径
- 格式:
path = 绝对路径 - 共享资源的绝对路径
- 格式:
- 设置匿名访问
- 格式:
public = yes | no(yes表示允许匿名访问,no表示不允许) - 共享资源如果要设置匿名访问,可以更改public字段
- 格式:
- 设置访问用户
- 格式:
valid users = 用户或valid users = @组名
- 格式:
- 设置目录只读
- 格式:
readonly = yes | no(yes表示只读,no表示读写) - 共享目录如果限制用户写操作,可以通过设置readonly实现
- 格式:
- 设置目录可写
- 格式:
writeable = yes读写writeable = no只读write list = 用户名wirte list = @组名
- 如果目录允许用户进行写操作,可以通过设置writeable和write list进行设置
- 格式:
案例,通过用户名共享文件
共享销售部/xsb这个目录,只有同时知道用户名和mi’ma才可以看到这个目录。在/xsb目录存放有重要数据,需要将安全级别security设置为user,这样可以启用samba身份验证机制,然后再共享目录/xsb下设置valid user字段,配置为只有销售部的员工可以访问这个目录。
- 环境准备
- 192.168.80.132(server1):samba服务端
- 192.168.80.129(server2):Linux客户端
修改主配置文件的安全相关设置
[root@server1 ~]# vim /etc/samba/smb.conf[global]workgroup = SAMBAsecurity = user# passdb backend = tdbsampassdb backend = smbpasswdsmb passwd file = /etc/samba/smbpasswdprinting = cupsprintcap name = cupsload printers = yescups options = raw# 重启smb服务之后,会自动生成/etc/samba/smbpasswd该文件[root@server1 ~]# systemctl restart smb.service[root@server1 ~]# systemctl restart nmb.service
添加销售部用户和组
[root@server1 ~]# groupadd xsb[root@server1 ~]# useradd -g xsb -M -s /sbin/nologin xsb01[root@server1 ~]# useradd -g xsb -M -s /sbin/nologin xsb02[root@server1 ~]# useradd jsb01
添加相应的samba用户(注意加-a参数)
[root@server1 ~]# smbpasswd -a xsb01New SMB password:Retype new SMB password:Added user xsb01.[root@server1 ~]# smbpasswd -a xsb02New SMB password:Retype new SMB password:Added user xsb02.
指定共享目录/xsb,在其中放随便一个文件,设置共享资源(名称xsb,描述,路径,访问用户)
[root@server1 ~]# mkdir /xsb[root@server1 ~]# cp /etc/hosts /xsb[root@server1 ~]# vim /etc/samba/smb.conf[xsb]comment = xsb datapath = /xsbvalid user = xsb01,xsb02
重启服务(每次配置完主配置文件都要重启生效,到此步samba服务端配置完成)
[root@server1 ~]# systemctl restart smb.service[root@server1 ~]# systemctl restart nmb.service
检查139和445端口号 ```bash [root@server1 ~]# ss -tanl State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 50 :139 :*
LISTEN 0 50 :445 :*
LISTEN 0 50 :::139 :::*
LISTEN 0 50 :::445 :::*
![AT{LP[8ZTSS]F2V4~1CP6WN.png](https://cdn.nlark.com/yuque/0/2021/png/614741/1614418161329-c64e5b5f-ab71-43dd-82a4-bda82057533d.png#align=left&display=inline&height=145&margin=%5Bobject%20Object%5D&name=AT%7BLP%5B8ZTSS%5DF2V4~1CP6WN.png&originHeight=145&originWidth=789&size=22022&status=done&style=none&width=789)7. 客户端验证在Linux端验证```basic[root@server2 ~]# yum install samba-client -y[root@server2 ~]# smbclient -L //192.168.80.132/xsb -U xsb01Enter SAMBA\xsb01's password:Sharename Type Comment--------- ---- -------print$ Disk Printer Driversxsb Disk xsb dataIPC$ IPC IPC Service (Samba 4.10.16)xsb01 Disk Home DirectoriesReconnecting with SMB1 for workgroup listing.Server Comment--------- -------Workgroup Master--------- -------SAMBA SERVER1
在windows上进行验证
windows验证:
在Window运行输入地址:\192.168.10.10
用户名:**
密码:**
可以在DOS窗口中使用命令net use * /delete 清空用户缓存信息

![_VH9I~GPS2PO$92ZFWTKIB.png
- 在客户端挂载
server2成功挂载server1共享文件夹[root@server2 ~]# mkdir /xsbdata[root@server2 ~]# yum install cifs-utils -y # 挂载CIFS文件系统,需要安装LinuxCIFS utils工具[root@server2 ~]# vim auth.smb # 准备一个认证文件username=xsb01password=1[root@server2 ~]# vim /etc/fstab//192.168.80.151/xsb /xsbdata cifs defaults,credentials=/root/auth.smb0 0[root@server2 ~]# mount -a[root@server2 ~]# df文件系统 1K-块 已用 可用 已用% 挂载点/dev/mapper/centos-root 17811456 1231016 16580440 7% /devtmpfs 485792 0 485792 0% /devtmpfs 497960 0 497960 0% /dev/shmtmpfs 497960 7800 490160 2% /runtmpfs 497960 0 497960 0% /sys/fs/cgroup/dev/sda1 1038336 135376 902960 14% /boottmpfs 99596 0 99596 0% /run/user/0192.168.80.134:/webdata 17811456 1293824 16517632 8% /var/www/html//192.168.80.132/xsb 17811456 1491788 16319668 9% /xsbdata[root@server2 ~]# ls /xsbdatahosts
扩展 隐藏目录 隐藏共享目录,访问时必须输入绝对的URL进行访问
格式:browseable = no
控制访问源
使用hosts allow 和 hosts deny进行控制访问源hosts allow = 192.168.1. 允许192.168.1.0/24网段进行访问
hosts deny = 192.168.1.3 禁止192.168.1.3主机进行访问
当allow和deny同时设置时allow优先,但上述情况无法拒绝192.168.1.3,这种情况可以使用except
字段
hosts allow = 192.168.1. EXCEPT 192.168.1.3
写入控制
writable = yeswrite list =xsb01 开启samba服务的写入权限chmod 777 /xsb 给共享目录赋予写入权限
用户账号映射(为了防止系统账号被黑客破解)
username map = /etc/samba/smbusers 全局添加username map字段
useradd rm
passwd rm
vim /etc/samba/smbusers
rm = testuser重启smb服务

