文章目录
FTP
FTP:
File Transfer Protocol,文件传输协议,应用层的文件共享服务
是互联网控制文件实现双向传输,同样ftp也是一个应用程序,不同系统对应的应用程序也不同,但是所遵循的是同一个协议
用户分类
ftpReal帐户(本地用户)
这类用户是指在FTP服务上拥有帐号。当这类用户登录FTP服务器的时候,其默认的主目录就是其帐号命名的目录。但是,其还可以变更到其他目录中去。如系统的主目录等等。
ftpGuest用户(虚拟用户)
在FTP服务器中,我们往往会给不同的部门或者某个特定的用户设置一个帐户。但是,这个账户有个特点,就是其只能够访问自己的主目录。服务器通过这种方式来保障FTP服务上其他文件的安全性。这类帐户,在Vsftpd软件中就叫做Guest用户。拥有这类用户的帐户,只能够访问其主目录下的目录,而不得访问主目录以外的文件。
ftpAnonymous(匿名用户)
这也是我们通常所说的匿名访问。这类用户是指在FTP服务器中没有指定帐户,但是其仍然可以进行匿名访问某些公开的资源。
在组建FTP服务器的时候,我们就需要根据用户的类型,对用户进行归类。默认情况下,Vsftpd服务器会把建立的所有帐户都归属为Real用户。但是,这往往不符合企业安全的需要。因为这类用户不仅可以访问自己的主目录,而且,还可以访问其他用户的目录。这就给其他用户所在的空间带来一定的安全隐患。所以,企业要根据实际情况,修改用户所在的类别。
端口:
- TCP 21 命令
- TCP 20 数据
传输方式:
- ASCII
- 二进制
使用模式:
- 被动模式/passive/pasv方式
- 主动模式/standard/port方式,服务器使用20端口连接客户端
主动模式FTP
主动模式下,FTP客户端从任意的非特殊的端口(N > 1023)连入到FTP服务器的命令端口–21
端口。然后客户端在N+1(N+1 >= 1024)端口监听,并且通过N+1(N+1 >= 1024)端口发送命令给FTP服务器。服务器会反过来连接用户本地指定的数据端口,比如20端口。1025
以服务器端防火墙为立足点,要支持主动模式FTP需要打开如下交互中使用到的端口:
FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接)
FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令)
FTP服务器数据(20)端口到客户端端口(>1023)(服务器初始化数据连接到客户端数据端口)
FTP服务器数据(20)端口接受客户端端口(>1023)(客户端发送ACK包到服务器的数据端口)
用图表示如下:
1.主动方式:数据是通过server器主动建立响应
2.被动方式:数据服务端基于被动方式响应
被动模式FTP
为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N >; 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回它的数据端口,而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P >; 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:
FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接)
FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令)
FTP服务器数据端口(>1023)接受客户端端口(>1023)(客户端初始化数据连接到服务器指定的任意端口)
FTP服务器数据端口(>1023)到客户端端口(>1023)(服务器发送ACK响应和数据到客户端的数据端口)
用图表示如下:
优缺点:
主动模式对ftp对服务器管理有利,是由FTP服务器主动与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞。而被动模式对客户端管理有效,它是企图与服务端的随机端口建立连接但是这个端口很可能又会被服务端的防火墙所拒绝。
一般做安全措施我们是在被动模式下做,由于主动模式是打开一个端口给客户端传送数据,我们做安全措施都是基于端口来做所以不太好做,一般也不建议去做。但是被动模式也是在不停地放端口,所以慢慢的ftp慢慢的在淘汰
ftp用户
匿名用户 任何人同一个ID身份登录(不需要用户验证)
虚拟用户 讲一个本地用户身份虚拟为多个身份(通过虚拟用户身份验证登录)
系统用户 本地用户(本地用户身份验证登录)
anonymous_enable=YES 是否启用匿名用户 宿主目录(用户家目录 /home/redhat)
local_enable=YES 启用本地用户访问
write_enable=YES 允许写入(本地用户要实现上传就需要快开启它)
local_umask=022 默认本地用户上传普通文件权限 644 755
dirmessage_enable=YES 显示每个目录下的文件信息
xferlog_enable=YES 日志启用
connect_from_port_20=YES 主动请求的数据端口
chown_uploads=YES 所有匿名用户上传的文件所属用户将会被改成chown_username
chown_username=whoever 匿名上传的所属用户名是whoever
xferlog_file=/var/log/xferlog 启用的日志文件
xferlog_std_format=YES
idle_session_timeout=600 空闲连接超时
data_connection_timeout=120 数据连接超时
nopriv_user=ftpsecure 当服务器运行于最底层时使用的用户名
chroot_list_enable=YES
chroot_local_user=YES 所有文件列出用户, 可以切换到其他目录
chroot_list_file=/etc/vsftpd/chroot_list
listen=NO 服务将自己监听处理listen_ipv6=YES
pam_service_name=vsftpd 设置PAM认证模块使用名称预设为vsftpd
userlist_enable=YES
tcp_wrappers=YES 服务端和客户端访问控制策略(服务器级别的一种防火墙)
访问个人资源
local_enable=YES 本地用户可以访问(下载)
write_enable=YES 可写(上传文件,删除文件)
local_uamsk=022 设置本地用户权限掩码值
allow_writeable_chroot=yes 开启禁锢
chroot_local_user=yes 禁锢所有本地用户
公共网络资源 /var/ftp/pub
anonymous_enable=YES 下载
write_enable=YES 可写
anon_uplaod_enable=YES 上传文件(普通文本文件)
anon_mkdir_write_enable=YES
anon_umask=022
077
anon_other_write_enable=YES 删除
案例:
NFS (协议:tcp)
NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。
NFS服务器共享的文件系统,客户端主机可以直接挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利
当我们在NFS服务器设置好一个共享目录/home/public后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到自己文件系统的某个挂载点,这个挂载点可以自己定义,如上图客户端A与客户端B挂载的目录就不相同。并且挂载好后我们在本地能够看到服务端/home/public的所有数据。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写
什么是rpc服务
RPC(Remote Procedure Call)即远程过程调用。RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的port上去
NFS通讯原理
RPC与NFS如何通讯?
因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能对应的端口并不固定,客户端要知道NFS服务器端的相关端口才能建立连接进行数据传输,而RPC就是用来统一管理NFS端口的服务,并且统一对外的端口是111,RPC会记录NFS端口的信息,如此我们就能够通过RPC实现服务端和客户端沟通端口信息。PRC最主要的功能就是指定每个NFS功能所对应的port number,并且通知客户端,让客户端可以连接到正常端口上去
那么RPC又是如何知道每个NFS功能的端口呢?
首先当NFS启动后,就会随机的使用一些端口,然后NFS就会向RPC去注册这些端口,RPC就会记录下这些端口,并且RPC会开启111端口,等待客户端RPC的请求,如果客户端有请求,那么服务器端的RPC就会将之前记录的NFS端口信息告知客户端。如此客户端就会获取NFS服务器端的端口信息,就会以实际端口进行数据的传输了。
在启动NFS SERVER之前,首先要启动RPC服务(即portmap服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。
启动nfs默认会启动rpc
portmap
功能: 主要是把RPC程序号转化为Internet的端口号。
特点: 只在第一次建立连接时候帮助网络应用程序找到正确的port,当双方正确连接时,端口就和应用绑定,portmap就无用。相当于媒婆。
NFS客户端和NFS服务端通讯过程
(1)首先服务器端启动RPC服务,并开启111端口
(2)服务器端启动NFS服务,并向RPC注册端口信息
(3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
(4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
(5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
NFS服务的优缺点
优点
- 节省本地存储空间将常用的数据存放在一台服务器可以通过网络访问
- 简单容易上手
- 方便部署非常快速,维护十分简单
缺点
- 局限性容易发生单点故障,及server机宕机了所有客户端都不能访问
- 在高并发下NFS效率/性能有限
- 客户端没用用户认证机制,且数据是通过明文传送,安全性一般(一般建议在局域网内使用)
- NFS的数据是明文的,对数据完整性不做验证
查看rpc的信息:
[root@localhost ~]# rpcinfo -p
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
这种方式也可以查看服务是否在运行
[root@localhost ~]# systemctl is-active vsftpd
active
配置nfs权限需要考虑三点:
- 配置文件权限
- 挂载权限
- 目录权限
案例:
架设一台NFS服务器,并按照以下要求配置
- 开放/nfs/shared目录,供所有用户查询资料
- 开放/nfs/upload目录,网段主机可以上传目录,并将所有用户及所属组映射为nfs-upload,其UID和GID均为210
- 将/home/tom目录仅共享给192.168.10.128这台主机,并只有用户tom可以完全访问该目录
1、开放/nfs/shared目录,供所有用户查询资料
服务端:
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start nfs-server.service
[root@localhost ~]# vim /etc/exports #修改配置文件
/nfs/shared *(ro)
:wq
[root@localhost ~]# mkdir /nfs/shared -p #创建资源文件
[root@localhost ~]# touch /nfs/shared/{sh1,sha2,sha3,sh4}
[root@localhost ~]# systemctl restart nfs-server.service #重启服务
客户端:
[root@localhost ~]# showmount -e 192.168.72.130 #查看共享的文件系统
Export list for 192.168.72.130:
/nfs/shared *
[root@localhost ~]# mkdir /nfs #创建挂载点
[root@localhost ~]# mount 192.168.72.130:/nfs/shared /nfs #挂载
[root@localhost ~]# ll /nfs/ #查看共享的文件
total 0
-rw-r--r--. 1 root root 0 Aug 27 16:42 sh1
-rw-r--r--. 1 root root 0 Aug 27 16:42 sh4
-rw-r--r--. 1 root root 0 Aug 27 16:42 sha2
-rw-r--r--. 1 root root 0 Aug 27 16:42 sha3
[root@localhost nfs]# cd /nfs/ #切到挂载点
[root@localhost nfs]# touch 1212 #创建不了文件,因为设置的权限为只读,符合题意
touch: cannot touch ‘1212’: Read-only file system
2、开放/nfs/upload目录,网段主机可以上传目录,并将所有用户及所属组映射为nfs-upload,其UID和GID均为210
服务端:
[root@localhost ~]# vim /etc/exports #写配置文件
/nfs/upload 192.168.72.0/24(rw,all_squash,anonuid=210,anongid=210)
:wq
[root@localhost ~]# mkdir /nfs/upload #创建资源文件
[root@localhost ~]# touch /nfs/upload/{up1,up2,up3}
[root@localhost ~]# useradd -u 210 nfs-upload #添加用户
[root@localhost ~]# groupmod -g 210 nfs-upload
[root@localhost ~]# id nfs-upload
uid=210(nfs-upload) gid=210(nfs-upload) groups=210(nfs-upload)
[root@localhost ~]# ll -d /nfs/upload/ #查看/nfs/upload/的权限,其他人没有写权限,所以下面加权限
drwxr-xr-x. 2 root root 39 Aug 27 17:09 /nfs/upload/
[root@localhost ~]# chmod o+w /nfs/upload/ #给其他人加上w权限
[root@localhost ~]# exportfs -r #重新读配置,作用类似重启服务
客户端:
[root@localhost nfs]# useradd -u 210 nfs-upload
[root@localhost nfs]# groupmod -g 210 nfs-upload
[root@localhost nfs]# id nfs-upload
uid=210(nfs-upload) gid=210(nfs-upload) groups=210(nfs-upload)
[root@localhost nfs]# cd
[root@localhost ~]# umount /nfs/ #把刚刚挂载点腾出来给 /nfs/upload/用
[root@localhost ~]# mount 192.168.72.130:/nfs/upload /nfs
[root@localhost ~]# cd /nfs/
[root@localhost nfs]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 27 17:09 up1
-rw-r--r--. 1 root root 0 Aug 27 17:09 up2
-rw-r--r--. 1 root root 0 Aug 27 17:09 up3
[root@localhost nfs]# touch 123 #其他人可以创建文件
[root@localhost nfs]# ll
total 0
-rw-r--r--. 1 nfs-upload nfs-upload 0 Aug 27 17:25 123
-rw-r--r--. 1 root root 0 Aug 27 17:09 up1
-rw-r--r--. 1 root root 0 Aug 27 17:09 up2
-rw-r--r--. 1 root root 0 Aug 27 17:09 up3
3、将/home/tom目录仅共享给192.168.10.128这台主机,并只有用户tom可以完全访问该目录
服务端:
[root@localhost ~]# vim /etc/exports
/home/tom 192.168.72.202(rw)
:wq
[root@localhost ~]# useradd tom
[root@localhost ~]# id tom
uid=1011(tom) gid=1013(tom) groups=1013(tom)
[root@localhost ~]# ll -d /home/tom/
drwx------. 3 tom tom 78 Aug 27 17:40 /home/tom/
[root@localhost ~]# exportfs -r
客户端:
[root@localhost ~]# useradd -u 1011 tom
[root@localhost ~]# id tom
uid=1011(tom) gid=1011(tom) groups=1011(tom)
[root@localhost ~]# mount 192.168.72.130:/home/tom /mnt
[root@localhost ~]# su - user1
[user1@localhost ~]$ ll /mnt/
ls: cannot open directory '/mnt/': Permission denied
[user1@localhost ~]$ su
Password:
[root@localhost user1]# su tom
[tom@localhost ~]$ ll /mnt
total 0
[tom@localhost ~]$ touch {1,2,3,4}
[tom@localhost ~]$ ll
total 0
-rw-rw-r--. 1 tom tom 0 Aug 25 23:11 1
-rw-rw-r--. 1 tom tom 0 Aug 25 23:11 2
-rw-rw-r--. 1 tom tom 0 Aug 25 23:11 3
-rw-rw-r--. 1 tom tom 0 Aug 25 23:11 4
lsof
:列出打开文件信息
1.列出所有打开的文件:
lsof
备注: 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位
2. 查看谁正在使用某个文件
lsof /filepath/file
3.递归查看某个目录的文件信息
lsof +D /filepath/filepath2/
备注: 使用了+D,对应目录下的所有子目录和文件都会被列出
4. 比使用+D选项,遍历查看某个目录的所有文件信息 的方法
lsof | grep ‘/filepath/filepath2/’
5. 列出某个用户打开的文件信息
lsof -u username
备注: -u 选项,u其实是user的缩写
6. 列出某个程序所打开的文件信息
lsof -c mysql
备注: -c 选项将会列出所有以mysql开头的程序的文件,其实你也可以写成lsof | grep mysql,但是第一种方法明显比第二种方法要少打几个字符了
7. 列出多个程序多打开的文件信息
lsof -c mysql -c apache
8. 列出某个用户以及某个程序所打开的文件信息
lsof -u test -c mysql
9. 列出除了某个用户外的被打开的文件信息
lsof -u ^root
备注:^这个符号在用户名之前,将会把是root用户打开的进程不让显示
10. 通过某个进程号显示该进行打开的文件
lsof -p 1
11. 列出多个进程号对应的文件信息
lsof -p 123,456,789
12. 列出除了某个进程号,其他进程号所打开的文件信息
lsof -p ^1
13 . 列出所有的网络连接
lsof -i
14. 列出所有tcp 网络连接信息
lsof -i tcp
15. 列出所有udp网络连接信息
lsof -i udp
16. 列出谁在使用某个端口
lsof -i :3306
17. 列出谁在使用某个特定的udp端口
lsof -i udp:55
特定的tcp端口
lsof -i tcp:80
18. 列出某个用户的所有活跃的网络端口
lsof -a -u test -i
19. 列出所有网络文件系统
lsof -N
20.域名socket文件
lsof -u
21.某个用户组所打开的文件信息
lsof -g 5555
22. 根据文件描述列出对应的文件信息
lsof -d description(like 2)
23. 根据文件描述范围列出文件信息
lsof -d 2-3
netstat [选项]
网络监听信息
-a或--all:显示所有连线中的Socket;
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
-c或--continuous:持续列出网络状态;
-C或--cache:显示路由器配置的快取信息;
-e或--extend:显示网络其他相关信息;
-F或--fib:显示FIB;
-g或--groups:显示多重广播功能群组组员名单;
-h或--help:在线帮助;
-i或--interfaces:显示网络界面信息表单;
-l或--listening:显示监控中的服务器的Socket;
-M或--masquerade:显示伪装的网络连线;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
-o或--timers:显示计时器;
-p或--programs:显示正在使用Socket的程序识别码和程序名称;
-r或--route:显示Routing Table;
-s或--statistice:显示网络工作信息统计表;
-t或--tcp:显示TCP传输协议的连线状况;
-u或--udp:显示UDP传输协议的连线状况;
-v或--verbose:显示指令执行过程;
-V或--version:显示版本信息;
-w或--raw:显示RAW传输协议的连线状况;
-x或--unix:此参数的效果和指定"-A unix"参数相同;
--ip或--inet:此参数的效果和指定"-A inet"参数相同
ps
-A 列出所有的行程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
-e 显示所有进程,环境变量
-f 全格式
-h 不显示标题
-l 长格式
-w 宽输出
a 显示终端上地所有进程,包括其他用户地进程
r 只显示正在运行地进程
x 显示没有控制终端地进程
我们常用的选项是组合是 aux
或 lax
,ef