在改变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 开机启动
出来顾客端就可以进行测试,可以在本机上测试linux通配符,也可以在别的主机上测试。
[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:
不仅以上这种参数外,还可以设置登录黑名单linux的ftp文件,严禁一些用户登录lftp服务器。涉及两个文件
/etc/vsftpd/user_list#临时黑名单
/etc/vsftpd/ftpusers#永久黑名单
将本地用户lee加入/etc/vsftpd/user_list文件以后,lee用户就不能登入:
临时黑名单和永久黑名单最大的区别是,加入永久黑名单的用户永远不能登入,并且加入临时黑名单的用户,在给配置文件加上以下参数以后,临时黑名单就转化为了白名单,只有在user_list文件中用户可以登录linux的ftp文件,其余用户都严禁登录:
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.sodb=/etc/vsftpd/loginusers#通过pam_userdb.so插件去/etc/vsftpd/loginusers文件中查找输入的账号和loginusers中的账号是否匹配linux运维招聘,假如账号存在,则输入密码进行认证,与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账号未能上传文件。