Linux_ftp服务及常用的文件参数

本文详细介绍如何搭建和配置FTP服务器,包括禁用selinux、防火墙配置、安装vsftp和lftp软件、用户权限控制及虚拟账号设置等关键步骤。

 想要实现文件的远程传输可以使用scp命令和rsync命令,可以参考《Linux基础_文件在系统中的传输rsync》这篇博客,最近我又学到了ftp远程传输服务,只要在ftp服务器上下载相应的软件,将文件放到ftp的发布目录下,客户端只要登陆ftp服务器,就能浏览,下载,上传文件。
 要搭建ftp服务器很简单,只要下载其相应的软件vsftp服务端软件lftp客户端软件就完成了。
在安装软件之前,首先要将selinux内核级防火墙关闭,否则会影响客户端的登陆。编辑/etc/sysconfig/selinux文件,关闭selinux。

[root@localhost ~]# vim /etc/sysconfig/selinux

如下图编辑:
在这里插入图片描述
在改变selinux之后需要重启主机,让内核重新加载,识别selinux的值。
除此之外还需要修改防火墙配置,关闭防火墙或者如下方式将lftp服务加入防火墙策略:

[root@localhost ~]# systemctl start firewalld
[root@localhost ~]# firewall-cmd --permanent --add-service=ftp
[root@localhost ~]# firewall-cmd --reload #平滑加载火墙配置
[root@localhost ~]# firewall-cmd --list-all	#查看火墙策略
public (default, active)
  interfaces: eth0
  sources: 
  services: dhcpv6-client ftp ssh	#如果此处有ftp则添加成功
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 

下来就可以安装vsftp和lftp了:

[root@localhost ~]# yum install vsftpd -y	#安装服务端软件
[root@localhost ~]# yum install lftp -y	#安装客户端软件
[root@localhost ~]# systemctl start vsftpd 	#打开vsftpd
[root@localhost ~]# systemctl enable vsftpd	开机启动

下来客户端就可以进行测试,可以在本机上测试,也可以在别的主机上测试。

[root@localhost ~]# lftp 172.25.254.182

在这里插入图片描述
lftp的默认发布目录为/var/ftp/,所以在客户端登陆后看到的是pub目录。
像上面的这种方式是以匿名用户登陆的lftp,除此之外还可以用本地用户的身份登陆服务器,需要强调的是这里的用户是服务端的用户,不是客户端的用户,并且本地登陆的用户是具有创建,删除,上传和下载权限的。
我在我的服务端创建了一个westos用户,并给该用户一个密码:
在这里插入图片描述
在客户端使用westos用户登陆ftp服务器:

[root@foundation80 mnt]# lftp 172.25.254.182 -u westos

在这里插入图片描述

lftp中没有touch命令,可用的命令可以使用**?** 进行查看。
作为一个有尊严的服务器,是绝对不允许客户端在服务端为所欲为,所以需要对客户端的登陆进行控制,只要在lftp的配置文件/etc/vsftpd/vsftpd.conf中添加相应的参数,就可以进行控制。
常用的lftp配置文件参数:

anonymous_enable=YES		#允许匿名用户登陆
local_enable=YES		#允许本地用户登陆
write_enable=YES		#允许登陆的用户可写
anon_upload_enable=YES		#匿名用户可写
anon_root=/westos		#更改匿名用户登陆后的家目录(+)
anon_umask=022			#更改匿名用户上传文件的权限(+)
anon_world_readable_only=NO 	#匿名用户可以浏览文件(+)
anon_other_write_enable=YES 	#匿名用户可以删除(+)
anon_mkdir_write_enable=YES	#匿名用户可以makidr
anon_max_rate=1024000  		#1000K,控制下载速率(+)
max_clients=2			#最大链接数(+)

chown_uploads=YES		#更改用户登陆时的用户
chown_username=westos

local_root=/directory		#本地用户家目录修改
local_umask=077			#本地用户上传文件的保留权限

上列所有参数带(+)的,配置文件中是没有的,需要写入到配置文件中。下面是这些参数的示例,所有修改都在配置文件/var/vsftpd/vsftpd.conf中,并且在修改后重启服务,建议在客户端退出登陆后再重启vsftpd

禁止匿名用户登陆
在这里插入图片描述
重启服务后如下图,登陆成功是可以浏览到其内容,否则为失败:
在这里插入图片描述
禁止本地用户登陆
在这里插入图片描述
客户端再次登陆会出现530的报错,即成功禁止本地用户登陆:
在这里插入图片描述
相应的错误号如下:

530:认证失败,服务不给认证或者认证过程有问题
550:服务本身未开放这样的功能
553:本地文件系统权限过小
500:本地文件系统权限过大

禁止登陆的用户可写
在这里插入图片描述
默认情况下匿名用户只有读权限,本地用户有写权限,所以是对本地用户写权限的控制,如下图,本地用户westos登陆后不能上传和删除文件:
在这里插入图片描述
匿名用户可以上传文件
在这里插入图片描述
上传文件时会有553的报错,是因为文件权限过小导致的:
在这里插入图片描述
所以需要将pub目录的属性进行更改:

[root@localhost westos]# chgrp ftp /var/ftp/pub/
[root@localhost westos]# chmod g+w /var/ftp/pub/ 

将pub目录的组改为ftp是因为匿名用户再登陆时默认为ftp用户,在给pub的组加上w权限之后,保证所有的匿名用户可以上传文件:
在这里插入图片描述
更改匿名用户家目录
默认情况下匿名用户在登陆之后的目录为/etc/var,更改为/westos
在这里插入图片描述
在这里插入图片描述
允许匿名用户上传
更改匿名用户上传文件的权限,默认为077,更改为022之后,如下:
在这里插入图片描述
group和passwd文件为修改前,inittab文件为修改默认权限后的文件。
允许匿名用户可以删除
anon_other_write_enable=YES
在这里插入图片描述
允许匿名用户可写
在这里插入图片描述
不存在touch命令
在这里插入图片描述
控制传输速率
执行以下命令生成一个大小为1000M的file文件:
在这里插入图片描述
正常情况下的传输速率如下:
在这里插入图片描述
将传输速率更改为1000K之后,传输速率明显变慢:
在这里插入图片描述
在这里插入图片描述
只允许同时存在2个链接
在这里插入图片描述
当有第三个链接时,登陆失败:
在这里插入图片描述
所有用户登陆的用户都为westos
在这里插入图片描述

在这里插入图片描述
修改之后在上传文件的所有人为westos,westos的id为1001
在这里插入图片描述
在这里插入图片描述
修改本地用户登陆的权限
在这里插入图片描述
group文件为修改之后上传的文件:
在这里插入图片描述
修改本地用户登陆的目录
本地用户默认登陆之后的目录为本用户的家目录,修改为/var/ftp:
在这里插入图片描述
在这里插入图片描述
除了以上这些参数外,还可以设置登陆黑名单,禁止一些用户登陆lftp服务器。涉及两个文件

/etc/vsftpd/user_list #临时黑名单
/etc/vsftpd/ftpusers #永久黑名单

将本地用户lee加入/etc/vsftpd/user_list文件之后,lee用户就不能登陆:
在这里插入图片描述
临时黑名单和永久黑名单最大的区别是,加入永久黑名单的用户永远不能登陆,但是加入临时黑名单的用户,在给配置文件加上以下参数之后,临时黑名单就转化为了白名单,只有在user_list文件中用户可以登陆,其余用户都禁止登陆:

userlist_deny=NO

在这里插入图片描述
 在实际生产应用中,客户端在登陆时需要注册帐号,就好像每个人的qq号。qq的用户非常多,如果每个用户注册帐号,服务端就要创建一个本地用户,是没有办法实现的。因为本地用户的创建个数是有一定数量的,比实际生产所需要的用户要少的多,所以就需要创建一些虚拟帐号,来满足这种生产环境。
要生成虚拟用户,首先需要以一张表去记录这些虚拟用户,在/etc/vsftpd/目录下创建一个文件,文件名根据自己的喜好而定:

[root@localhost vsftpd]# vim /etc/vsftpd/loginusers
westos1	#虚拟帐号westos1
westos1	#虚拟帐号westos1的密码
westos2	#虚拟帐号wetos2
westos2	#虚拟帐号westos2的密码

该文件是明文的,为了安全,需要对 该文件加密:

[root@localhost vsftpd]# db_load -T -t hash -f /etc/vsftpd/loginusers /etc/vsftpd/loginusers.db

-t #指定加密方式
-f #指定加密文件
/etc/vsftpd/loginusers.db #加密后的文件

加密完成之后需要在/etc/pam.d/目录下创建一个文件,如下:

[root@localhost vsftpd]# vim /etc/pam.d/ftpauth 
account required pam_userdb.so db=/etc/vsftpd/loginusers
auth    required pam_userdb.so db=/etc/vsftpd/loginusers

account #帐号
required #必须有帐号
pam_userdb.so db=/etc/vsftpd/loginusers #通过pam_userdb.so插件去/etc/vsftpd/loginusers文件中查找输入的帐号和loginusers中的帐号是否匹配,如果帐号存在,则输入密码进行认证,与account相同。否则登陆失败。

虚拟帐号的设置完成,此时就需要将虚拟帐号和ftp服务联系起来,编辑配置文件:

[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf 
pam_service_name=ftpauth	#帐号密码认证时去查找/etc/pam.d/ftpauth文件
guest_enable=YES	#允许虚拟帐号登陆

编辑配置文件需要重启文件生效策略:

[root@localhost vsftpd]# systemctl restart vsftpd

客户端使用虚拟帐号进行测试:

[root@foundation80 ~]# lftp 172.25.254.181 -u westos1

在这里插入图片描述
 虚拟帐号登陆成功,并且虚拟帐号在登陆之后在/var/ftp目录下,要使虚拟帐号在登陆时使用别的用户的身份,可以在配置文件中添加以下参数:

[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf 
guest_username=student	#让虚拟帐号在登陆ftp服务器时使用student用户的身份

在这里插入图片描述
 虚拟帐号如果以student的身份登陆时,则进入的是student用户的家目录/home/student/,在该目录下创建了一个studentfile文件进行测试,并且将/home/student/目录的权限改为555:

[root@localhost vsftpd]# systemctl restart vsftpd
[root@localhost vsftpd]# chmod 555 /home/student/
[root@localhost vsftpd]# touch /home/student/studentfile

测试效果如下:
在这里插入图片描述
如果需要让虚拟用户在登陆之后有自己独立的家目录,在配置文件中添加以下参数:

[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf 
local_root=/ftpuserhome/$USER	
user_sub_token=$USER

$USER #是shell中的一个变量,配置文件中是不识别的,所以需要添加user_sub_token=$USER参数声明$USER是一个shell中的变量。

创建虚拟帐号的独立家目录:

[root@localhost vsftpd]# mkdir -p /ftpuserhome/westos{1..2}
[root@localhost vsftpd]# mkdir /ftpuserhome/westos1/westos1data	#westos1的家目录
[root@localhost vsftpd]# mkdir /ftpuserhome/westos2/westos2data	#westos2的家目录

重启vsftpd,进行测试:
在这里插入图片描述
 westos1帐号登陆之后家目录为/ftpuserhome/westos1/,westos2帐号登陆后的家目录为/ftpuserhome/westos2/。
 如果在服务的配置文件/etc/vsftpd/vsftpd.conf文件中配置,改变的是所有帐号的配置,如果需要对单独的帐号进行配置,可以在/etc/vsftpd/user_conf/目录下创建文件,该文件名需要和帐号名相同。

[root@localhost vsftpd]# vim /etc/vsftpd/user_conf/westos1
anon_upload_enable=YES	#允许westos1帐号上传文件

 要上传文件,需要更改/ftpuserhome/westos1/westos1data/权限,让用户可以上传文件:

[root@localhost vsftpd]# chmod 777 /ftpuserhome/westos1/westos1data/
[root@localhost vsftpd]# systemctl restart vsftpd

此时,westos1帐号就可以上传文件,但是westos2帐号无法上传文件。
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值