简介:FTP是基于TCP协议之上的具有C/S架构的文件服务器。
需要通过控制连接20端口来控制双方的通信
需要通过数据连接21端口来进行双方的通信
主动模式:最大的特点是数据连接由服务器的20端口主动发起连接,这种情况可能会被客户端的防火墙拒绝
被动模式,是由客户端向服务器端口发起连接
**主动模式:**客户端端口都是随机的
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。
在被动模式下,FTP库户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。
主动模式和被动模式的区别:
总的来说,主动模式的FTP是指服务器主动连接客户端的数据端口,被动模式的FTP是指服务器被动地等
待客户端连接自己的数据端口。
被动模式的FTP通常用在处于防火墙之后的FTP客户访问外界FTP服务器的情况,因为在这种情况下,防
火墙通常配置为不允许外界访问防火墙之后主机,而只允许由防火墙之后的主机发起的连接请求通过。
因此,在这种情况下不能使用主动模式的FTP传输,而被动模式的FTP可以良好的工作。
- 软件包
- vsftpd
- tftp(了解)
服务包: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
配置文件参数:
改主配置文件时要养成良好习惯经常备份,容易改错了恢复。
权限是由两部分控制的,一部分是Linux系统控制的一部分是服务自己控制的。
第一种:
yum install ftp -y
[root@server1 ~]# ftp 192.168.120.100
Connected to 192.168.120.100 (192.168.120.100).
220 (vsFTPd 3.0.2)
Name (192.168.120.100:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
第二种:
[root@server1 ~]# lftp 192.168.120.100
lftp 192.168.120.100:~> ls
-rw-r--r-- 1 0 0 0 Mar 06 10:45 abc.txt
drwxr-xr-x 2 0 0 6 Jun 09 2021 pub
lftp 192.168.120.100:/>
只有当敲命令有结果返回时,才表示登录成功
第一种:
- 可以在浏览器、运行窗口或者资源管理器中输入 ftp://IP地址/ ,这样访问的是ftp的根位
置,如果需要访问相关
- 目录可以输入 ftp://IP地址/目录/文件名
ftp的常用命令
上传文件:put 源文件名 目的文件名
下载文件:get 源文件吗 目的文件名
重命名文件:rename 源文件名 目的文件名
创建目录:mkdir
其他系统命令可以正常使用
匿名用户的方式去访问vsftpd
[root@server1 ~]# vim /etc/vsftpd/vsftpd.conf
进去修改配置文件
anonymous_enable=YES
anon_umask=022
anon_upload_enable=Yes
anon_mkdir_write_enable=Yes
anon_other_write_enable=Yes
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
[root@server1 ~]# systemctl restart vsftpd
重启
系统用户的方式去访问vsftpd
1.创建用于进行FTP认证的用户数据库文件,其中奇数行为账户名,偶数行为密码。
2. 使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件
3. 降低数据库文件的权限(避免其他人看到数据库文件的内容)
4. 把原始的明文信息文件删除。
5. 创建一个本地用户,用来做虚拟用户在本地的代理,为了安全起见,禁止这个本 地用户登录。
6. 新建一个用于虚拟用户认证的PAM文件vsftpd.vu
7. 配置文件
8.如果想要针对不同的用户设置不同的权限
简介:
Linux/Unix系统之间共享文件系统的一种协议,通过网络让不同的主机之间共享文件或目录
NFS的客户端主要为Linux
支持多节点同时挂载以及并发写入
提供文件共享服务
为集群中的web server配置后端存储
NFS协议模型:
RPC协议模型:
用户访问负载均衡器节点,负载均衡器会将请求负载均衡得分发给web服务器,比如请求index.html界面,每一台服务器都会去NAS存储服务器上寻找想要被读取的数据。这可以大大降低服务器成本、运维成本(修改数据会牵一发而动全身)
1.准备三台服务器,其中两台模拟webserver,还有一台模拟NFS
2.分别在两台webserver上进行如下操作
[root@server1 ~]# yum install httpd -y
[root@server1 ~]# systemctl start httpd
[root@server1 ~]# cd /var/www/html/
必须是index.html这个文件
[root@server1 html]# vim index.html
[root@server1 html]# yum search showmount -y
[root@server1 html]# yum install nfs-utils.x86_64 -y
查看挂载情况
[root@server1 html]# showmount -e 192.168.120.148
Export list for 192.168.120.148:
/webdata 192.168.120.147/24,192.168.120.100/24
将其挂载到server3上NFS
[root@server1 html]# mount -t nfs 192.168.120.148:/webdata /var/www/html
重启一下服务
[root@server1 html]# systemctl start httpd
3.在server3上进行如下操作
[root@server1 ~]# yum install -y nfs-utils
[root@server1 ~]# mkdir /webdata
[root@server1 webdata]# vim index.html
[root@server1 webdata]# vim /etc/exports
[root@server1 webdata]# systemctl start nfs-server.service
可使用autofs服务按需要挂载外围设备,NFS共享等,并在空闲5分钟后后自动卸载
相关包和文件
挂载点的dirname 指定目录的配置文件路径
- 指定目录的配置文件格式
挂载点的basename 挂载选项 选项设备 1
例子:
将NFS的共享目录,通过autofs 发布出来,做为远程主机用户的家目录
- NFS服务器创建用户和相应的目录,将用户user的家目录共享
[root@server1 webdata]# mkdir /data
[root@server1 webdata]# useradd -d /data/user user
[root@server1 webdata]# id user
uid=1000(user) gid=1000(user) 组=1000(user)
[root@server1 webdata]# vim /etc/exports.d/test.exports
/data/user *(rw,anonuid=1000,anongid=1000,all_squash)
[root@server1 html]# vim /etc/auto.master
/data /etc/auto.home
[root@server1 html]# vim /etc/auto.home
* -fstype=nfs 192.168.175.144:/data/user
[root@NFSclient ~]# mkdir /data
[root@NFSclient ~]# useradd -d /data/user -u 1000 user
[root@NFSserver ~]# su - user
[user@NFSserver ~]$ touch file
# 在NSF服务器上登录user用户,创建文件在家目录中
[root@NFSclient /]# su - user
[user@NFSclient ~]$ ll
总用量 0
-rw-rw-r--. 1 user user 0 4月 30 10:13 file
# 在NSF客户机上登录user用户,发现文件已经被共享了
ssh免密钥登录
客户端需要准备好一对密钥对,然后将自己的公钥发送给服务端,登录的时候可以选择登录的方式为密钥登录,这时候就不用输入密码。
常用场景:临时给他人开放root权限,要求别人将它自己的公钥发送到服务器上来,等使用结束将其公钥发送到服务器上来。
NFS与RPC之间的关系:
NFS是向RPC进行注册端口,访问者需要先向RPC询问NFS端口之后才会访问NFS的端口
RPC不仅仅可以服务NFS,也可以服务很多其他端口
NFS与FTP之间的区别:
FTP通常用来做文件服务器
NFS通常是用来做网络存储
NFS通常是linux之间进行文件共享
NFS+autofs可以实现自动挂载远端文件系统,当不使用的时候则不会挂载,只有在使用时候才会自动挂载。
[root@server1 ~]# yum install samba -y
[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 #定义日志文件的最大容量为50KB
security = 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 Printers
path = /var/spool/samba #共享文件的实际路径(重要)。
browseable = no
guest ok = no #是否所有人可见,等同于"public"参数。
writable = no
printable = 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账号并设置其口令
实验:需要两台服务器,一台做服务端一台做客户端。
共享销售部 /xsb 这个目录,只有知道用户名和密码的同事可以看这个共享,在/xsb目录中存放销售部重要的数据。需要将security设置为user级别,这样可以启用samba身份验证机制,然后在共享目录 /xsb下设置valid user 字段,配置只允许销售部员工能访问这个共享目录。
服务器端为server1,客户端为server2
服务器端
[root@server1 ~]# vim /etc/samba/smb.conf
[global]
workgroup = SAMBA
security = user
# passdb backend = tdbsam
passdb backend = smbpasswd
smb passwd file = /etc/samba/smbpasswd
printing = cups
printcap name = cups
load printers = yes
cups options = raw
# 重启smb服务之后,会自动生成/etc/samba/smbpasswd该文件
[root@server1 samba]# groupadd xsb
[root@server1 samba]# useradd -g xsb -M -s /sbin/nologin xsb01
[root@server1 samba]# useradd -g xsb -M -s /sbin/nologin xsb02
[root@server1 samba]# useradd jsb01
[root@server1 ~]# smbpasswd -a xsb01
New SMB password:
Retype new SMB password:
Added user xsb01.
[root@server1 ~]# smbpasswd -a xsb02
New SMB password:
Retype new SMB password:
Added user xsb02.
[root@server1 ~]# mkdir /xsb
[root@server1 ~]# cp /etc/hosts /xsb
[root@server1 ~]# vim /etc/samba/smb.conf
[xsb]
comment = Xsb Data
path = /xsb
valid user = xsb01,xsb02
[root@server1 ~]# systemctl restart smb.service
[root@server1 ~]# systemctl restart nmb.service
[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 :::*
客户端验证
# linux上验证
[root@server2 ~]# yum install samba-client -y
[root@server2 ~]# smbclient -L //192.168.80.151/xsb -U xsb01
Enter SAMBA\xsb02's password:
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
xsb Disk Xsb Data
IPC$ IPC IPC Service (Samba 4.10.16)
xsb02 Disk Home Directories
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
SAMBA SERVER1
# 在windows上进行验证
windows验证:
在Window运行输入地址:\\192.168.10.10
用户名:****** xsb01
密码:****** 1
可以在DOS窗口中使用命令net use * /delete 清空用户缓存信息
在linux上进行挂载
[root@server2 ~]# mkdir /xsbdata
[root@server2 ~]# yum install cifs-utils -y
[root@server2 ~]# vim auth.smb
username=xsb01
password=1
[root@server2 ~]# vim /etc/fstab
//192.168.120.100/xsb /xsbdata cifs defaults,credentials=/root/auth.smb
0 0
[root@server2 ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17811456 1099604 16711852 7% /
devtmpfs 922468 0 922468 0% /dev
tmpfs 933524 0 933524 0% /dev/shm
tmpfs 933524 8852 924672 1% /run
tmpfs 933524 0 933524 0% /sys/fs/cgroup
/dev/sda1 1038336 145756 892580 15% /boot
tmpfs 186708 0 186708 0% /run/user/0
//192.168.120.100/xsb 17811456 1108900 16702556 7% /xsbdata
[root@server2 ~]# ls /xsbdata/
hosts
NFS与SAMBA区别:
NFS权限控制是编辑时候()在括号内指明权限
SAMBA权限是通过参 数writable来控制的
[root@server1 ~]# yum install samba -y
#创建三个samba用户,并指定密码为1
useradd -s /sbin/nologin -r smb1 #加选项-r 不创建家目录
useradd -s /sbin/nologin -r smb2
useradd -s /sbin/nologin -r smb3
smbpasswd –a smb1 #创建对应账号的口令 ,不加-a表示修改已经存在的账号的口令
smbpasswd –a smb2
smbpasswd –a smb3
[root@SMB ~]#pdbedit -L #查看samba账号
smb1:995:
smb3:993:
smb2:994:
#修改samba配置文件
vim /etc/samba/smb.conf
#在workgroup下加一行
config file= /etc/samba/conf.d/%U 说明:%U表示用户名 #**这个步骤为关键步骤**
[share] #共享文件夹在最后添加
Path=/data/dir #指定分享文件夹的路径
Read only= NO #不仅仅是只读
Guest ok = yes
write list=@admin
[root@SMB ~]#mkdir /data/dir
[root@SMB ~]#mkdir /data/dir1
[root@SMB ~]#mkdir /data/dir2
[root@SMB ~]#touch /data/dir/share.txt #新建共享文件
[root@SMB ~]#touch /data/dir1/smb1.txt #新建给smb1用户访问特定文件
[root@SMB ~]#touch /data/dir2/smb2.txt #新建给smb2用户访问特定文件
[root@server1 ~]# yum install tree -y
[root@SMB ~]#tree /data/
/data/
├── dir
│ └── share.txt
├── dir1
│ └── smb1.txt
└── dir2
└── smb2.txt
3 directories, 3 files
#针对smb1和smb2用户创建单独的配置文件
[root@SMB ~]#mkdir /etc/samba/conf/smb1 -pv
vim /etc/samba/conf.d/smb1
[share]
Path=/data/dir1
Read only= NO 等价于writable = yes
Create mask=0644
#说明:默认为744
[root@SMB ~]#mkdir /etc/samba/conf/smb2 -pv
vim /etc/samba/conf.d/smb2
[share]
path=/data/dir2
systemctl restart smb nmb #重启对应的服务
#用户smb1,smb2,smb3访问share共享目录,看到目录是不同目录,smb3访问的是默认的share目录
客户端:
[root@client ~]#smbclient //192.168.120.100/share -U smb1%1
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Fri Dec 20 13:11:40 2019
.. D 0 Fri Dec 20 13:10:56 2019
smb1.txt N 0 Fri Dec 20 13:11:40 2019
52403200 blocks of size 1024. 52004560 blocks available
smb: \> exit
[root@client ~]#smbclient //192.168.32.18/share -U smb2%centos
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Fri Dec 20 13:12:53 2019
.. D 0 Fri Dec 20 13:10:56 2019
smb2.txt N 0 Fri Dec 20 13:12:53 2019
52403200 blocks of size 1024. 52004560 blocks available
smb: \> exit
[root@client ~]#smbclient //192.168.120.100/share -U smb3%centos
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Fri Dec 20 13:13:12 2019
.. D 0 Fri Dec 20 13:10:56 2019
share.txt N 0 Fri Dec 20 13:11:26 2019
52403200 blocks of size 1024. 52004560 blocks available
smb: \> exit
[root@client ~]#
最后应该如图显示
中途出现的小问题:
[root@server1 ~]# smbclient -L //192.168.120.147/share -U smb2
Enter SAMBA\smb2’s password:
session setup failed: NT_STATUS_LOGON_FAILURE
密码错误了,去服务端修改一下密码即可
[root@server1 ~]# smbpasswd -a smb3
New SMB password:
Retype new SMB password:
Added user smb3.