FTP(File Transfer Protocol)文本传输协议
工作机制:基于C/S机构,并且是双通道协议,通过建立2个tcp连接来实现C/S的命令连接和数据的传输
命令连接的tcp(C---àS)端口号Server:21,Client:随机
数据传输的tcp则根据Server不同模式而有不同的端口号(需要注意的是,Server的不同模式是由Client的命令决定的)
FTP的数据传输为两种模式:
第一种:Server主动连接(S---àC),称为PORT style
在此模式下,S默认开启tcp:20的端口号进行传输数据给C的tcp随机端口
此模式可能会因为C防火墙的存在而导致数据传输失败
第二种:Server被动连接(C---àS),称为PASV style(一般为默认)
在此模式下,C和S的tcp都是开启随机端口,S的随机端口会在命令连接时发送消息给C,通过计算得出S的随机端口号,格式如下:
227 Entering “数据连接模式” Mode (IP_ADDRESS,Num1,Num2)
端口号=256*Num1+Num2
此模式下,C的防火墙不会影响数据的得到,但是S的防火墙却会阻碍C发来的请求数据消息。
(这两种模式中,C的随机端口在建立命令连接tcp时已发给S)
(介于防火墙的存在,因而FTP服务更多的是应用于内部局域网)
(命令连接tcp端口一直连接,数据连接tcp端口传完数据就断开)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
FTP服务器目前使用的是vsftpd软件服务
FTP客户端经常使用的工具是ftp、lftp、lftpget/wget(可直接下载数据)、filezilla(图形化界面)
FTP服务的用户认证:
匿名用户:ftp、anonymous(不需要输密码)
系统用户:Linux的用户
虚拟用户:给FTP服务特定使用的用户,独立的用户/密码文件
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
vsftpd服务的配置介绍
默认的共享文件位置会根据用户类型的不同而不同:
匿名用户是/var/ftp(系统用户ftp的家目录)
系统用户是用户家目录
虚拟用户则是根据选项映射为对应的系统用户家目录
对匿名用户的相关配置选项:
anonymous_enable=no 不支持匿名用户(默认为YES:支持)
no_anon_password=yes 不检查匿名用户口令(默认为no:检查)
anon_world_readable_only 只能下载other上有r权限的文件(默认开启:yes)
anon_upload_enable=yes和anon_mkdir_write_enable=yes 表示可以上传文件和创建目录(需要注意的是登录用户需要对此时共享文件夹有w权限)
anon_other_write_enable=YES 可删除和修改上传的文件(默认为:no)
对系统用户的配置选项:
guest_enable=YES ,guest_username=ftp 所有系统用户都映射成guest用户,使其登陆后进入到ftp的家目录,并且此时显示的会是“/”,实现禁锢(root默认不允许连接,也可映射成其他用户,但是需要另外设置禁锢选项)
local_root=路径 配合上面两个选项使用,指定登入后的根的实际目录
(注意,登录用户不可以对登入之后pwd命令显示的根有w权限,否则登录不上)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
实验:实现基于SSL的的FTPS(需确认已经调用了FTP服务是否调用了libssl.so模块)
1.进行自签名的证书,可在/etc/pki/tls/certs/下,创建
make vsftpd.pem(实际上就是调用原来openssl命令创建)
2.在配置文件/etc/vsftpd/vsftpd.conf中加入需要启用ssl的选项
ssl_enable=YES 启用SSL
allow_anon_ssl=NO 匿名不支持SSL
force_local_logins_ssl=YES 本地用户登录加密
force_local_data_ssl=YES 本地用户数据传输加密
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem 调用证书文件
(若是需要测试,可以使用filezilla工具)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
实验:实现基于文件验证的vsftpd虚拟用户(CentOS 7系统下)
1.需要编辑文本文件/etc/vsftpd/FILE,并且以行为单位,奇数行为虚拟用户名,偶数行为对应的密码
2.FILE文件需要被编码为hash格式,命令如下:
db_load -T -t hash -f FILE FILE.db
(为安全考虑,可对文件设置600权限)
3.在vsftpd服务器上创建需要被映射为的用户,并对用户生成的家目录权限去除w写权限,但是因为用户后续可能会对目录下有操作需求,所以可以建立子目录,让用户对其有rwx权限,示例如下:
useradd -d /var/ftprui -s /sbin/nologin USER(家目录可自定义)
mkdir /var/ftprui/upload
setfacl -m u:vrui:rwx /var/ftprui/upload
4.需要调用pam模块,在/etc/pam.d/目录下创建pam配置文件,注意文件名需要以“.db”结尾,内容填写如下:
auth required pam_userdb.so db=/etc/vsftpd/FILE
account required pam_userdb.so db=/etc/vsftpd/FILE
(其中后缀.db已省略)
5.在vsftpd服务配置文件/etc/vsftpd/vsftpd.conf中修改选项
guest_enable=YES 启用映射
guest_username=USER 映射登录用户为USER
pam_service_name=第4步创建的.db结尾文件
6.为了使不同用户连接FTP服务后有不同的权限,可分别创建对应的配置文件,但是需要在配置文件/etc/vsftpd/vsftpd.conf中,指定路径:
user_config_dir=自定义用户配置文件的父目录
7.第6步完成后,根据需要编写每个用户的配置文件选项,即可完成实验
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
实验:基于MySQL数据库验证的vsftpd虚拟用户(CentOS 7 系统)
1.MYSQL 服务器安装mariadb-server
创建独立用于FTP服务的数据库
创建表来管理需要登入FTP服务的虚拟用户,必须有用户名和密码两个字段,然后添加用户
授权指定用户可进行管理
2.FTP服务器需安装vsftpd服务和pam_mysql,注意CentOS 7上需要手动编译pam_mysql程序包(目前最新的为pam_mysql-0.7RC1.tar.gz),其中额外需要的安装包mysql-devel、pam-devel,并且基本的编译选项如下:
./configure --with-pam-mods-dir=/lib64/security --with-mysql=/usr --with-pam=/usr
3.在FTP服务器上建立pam认证所需文件,在/etc/pam.d/目录下创建文件,并在文件中写入以下内容:
auth required pam_mysql.so user=N passwd=M host=MySQLServer-IP db=DB_NAME table=TB_NAME usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=N passwd=M host=MySQLServer-IP db=DB_NAME table=TB_NAME usercolumn=name passwdcolumn=password crypt=2
(N、M是第1步授权管理独立用于FTP数据库的指定用户和密码,crypt=2表示MySQL数据库中增加的虚拟用户的密码是使用password()函数加密的)
4.在FTP服务器上在配置文件/etc/vsftpd/vsftpd.conf中修改选项:
guest_enable=YES 启用映射
guest_username=USER_NAME 映射登录用户为USER_NAME
pam_service_name=第3步创建的文件路径
还需确保anonymous_enable=YES 已启用
5.在FTP服务器上建立虚拟用户映射的系统用户,注意家目录的w写权限去除
6. 为了使不同用户连接FTP服务后有不同的权限,可分别创建对应的配置文件,但是需要在配置文件/etc/vsftpd/vsftpd.conf中,指定路径:
user_config_dir=自定义用户配置文件的父目录
7.第6步完成后,根据需要编写每个用户的配置文件选项,即可完成实验
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
================================================================================================
================================================================================================
NFS(Network File system)网络文件系统
基于内核的文件系统,利用RPC(Remote Procedure Call Protocol)远程过程调用实现访问远端系统的文件
提供NFS服务的软件包为nfs-utils(Linux系统默认安装),并且服务的启用还要依赖于rpcbind服务,不可缺少。
NFS服务是由多个进程组合而成,主要服务启动项为nfs-server(CentOS 7),启动后的主端口:2049,还有一些额外随机端口
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NFS配置文件
NFS服务共享资源的设定,是在配置文件/etc/exports以及/etc/exports.d/*.exports进行配置,每行代表一个共享资源,基本格式规则如下:
DIR_NAME IP/NETMASK (填写DIR_NAME的权限设定)
当IP/NETMASK为*时,是最简单共享方式,对所有主机用户开放
()里默认设定的选项如下:
ro(默认),rw 只读和读写
sync(默认),async 同步,异步传输
root_squash(默认) 所有远程root用户会被压榨映射为nfsnobody,若使用no_ root_squash,则不进行压榨
all_squash 所有远程用户都会被压榨映射为nfsnobody,若使用no_ all_squash(默认)则会保留远程用户的UID和GID
anonuid、anongid 可指定远程用户都被映射为指定的UID和GID,配合all_squash使用
当远程主机在NFS共享配置文件设定的可访问列表里,则可在自己的机器上对这些共享文件夹进行mount挂载:
mount NFS_SERVER_IP:共享目录 挂载点
若是需要开机自动挂载,则可写入/etc/fstab文件中,文件系统为nfs
此时对这些文件夹的权限,则会根据NFS服务设定配置文件时有关
注意,在NFS服务已经启动的情况下,修改配置文件后可以使用特殊命令:
exportfs –r 重新加载配置文件,使之生效
exportfs –v 查看已共享信息
exportfs –a 恢复共享服务
exportfs –au 暂停共享服务
若是需要查看指定主机的NFS共享信息可通过命令:
showmount –e IP_ADDRESS
NFS服务共享支持多主机同时挂载,同时进行各主机的数据操作
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
基于安全考虑,在客户端对NFS服务共享信息文件夹进行mount挂载时,建议使用如下选项:
nosuid 不允许使用有特殊权限的文件
fg,hard,intr 三者结合,可在挂载出现故障时,手动终端
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
远程主机实现NFS服务共享信息的自动挂载
依赖于autofs程序包,服务autofs默认开机启动
配置文件分为主配置文件/etc/auto.master和从配置文件/etc/auto.*(可自定义,不是必须为此路径)
自动挂载的方式有两种:
第一种是挂载目录的相对路径挂载法:
1.在主配置文件/etc/auto.master中,写入挂载目录的dirname,格式如下:
dirname 从配置文件路径
(需要注意的是dirname最后不能加“/”)
2.在从配置文件中写入挂载目录的basename和具体的挂载信息,格式如下:
basename 挂载选项信息 NFS_IP:共享的目录
第二种是挂载目录的绝对路径挂载法:
1.在主配置文件/etc/auto.master中设置如下:
/- 配置文件路径
2.在配置文件中设置如下:
完整路径 挂载选项信息 NFS_IP:共享的目录
(此方法不会影响挂载点目录下原有文件的查看)
挂载信息中需要指定文件系统“ –fstype=文件系统”
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
若是希望NFS共享的文件夹与远程主机挂载点的basename相同,则可使用相对路径方法进行挂载:
在主配置文件/etc/auto.master中,写入“dirname 从配置文件路径”
在从配置文件中写入“ * 挂载选项信息 NFS_IP:dirname ”
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------