Linux 之 ftp服务篇

何谓ftp?
ftp为一种文件传输协议,使得主机间可以共享文件。我们经常接触的http为超文本传输协议,它主要基于网络。


ftp服务器配置

实验前,我们首先需要打开一个虚拟机,作为ftp服务端,另外,我们把真机作为客户端。服务端需要安装vsftpd服务软件,客户端需要安装lftp。

首先,编辑文件:vim /etc/sysconfig/selinux ,改变SELINUX为:disabled;然后,reboot
(这里只有 reboot了之后文件的改变才会生效,重启后,getenforce查询如果显示disabled,则成功)

服务端:

1、安装vsftpd

[root@localhost ~]# yum install vsftpd -y

2、开启ftp服务、设置防火墙允许ftp通过

 [root@localhost ~]# systemctl start vsftpd
[root@localhost ~]# systemctl enable vsftpd     //开启ftp服务
[root@localhost ~]# netstat -antlupe | grep vsftpd  //查看ftp端口是否成功开启
[root@localhost ~]# firewall-cmd --permanent --add-service=ftp   //火墙设置
[root@localhost ~]# firewall-cmd --reload     
[root@localhost ~]# firewall-cmd --list-all  //查看是否成功设置火墙

这里写图片描述
这里写图片描述
3、建立一个测试文件

 [root@localhost ~]# cd /var/ftp //此目录是ftp服务的默认目录          
 [root@localhost ftp]# ls
 pub
 [root@localhost ftp]# touch westosfile  //我们现在建立一个文件westosfile
 [root@localhost ftp]# ls
 pub  westosfile

这里写图片描述
客户端:

安装好lftp软件后,开始测试:

[root@foundation74 Desktop]$ lftp 172.25.254.247  //进行ftp服务设置的机子ip
lftp 172.25.254.247:~> ls              
drwxr-xr-x    2 0        0               6 Aug 03  2015 pub
-rw-r--r--    1 0        0               0 May 05 07:10 westosfile

这里写图片描述


ftp服务信息

默认目录:/var/ftp
协议接口: 21/tcp
服务配置文件:/etc/vsftpd/vsftpd.conf
报错id的解析:
     500   ##文件系统权限过大
     530   ##服务认证失败
     550   ##服务本身功能未开放
     553   ##本地文件系统权限过小

ftp服务参数配置

 vim /etc/vsftpd/vsftpd.conf

注意,在编辑完配置文件后,记得执行重启ftp服务操作:
systemctl restart vsftpd
1)匿名用户登录:

anonymous_enable=YES | NO  ##匿名用户是否可以登录

客户端测试:

当服务端设置为 YES:
这里写图片描述
当服务端设置为 NO:
这里写图片描述
2)本地用户登录

local_enable=YES|NO  #本地用户是否可以登陆

客户端测试:

当服务端设置为 NO,会出现如下报错:
这里写图片描述
3)本地用户可写

write_enable=YES|NO  #ftp是否对登陆用户可写

4)匿名用户家目录修改

anon_root=/direcotry  ##指明匿名家目录
服务端:
mkdir /ftpdir  ##建立匿名用户家目录
cd /ftpdir/
touch file
vim /etc/vsftpd/vsftpd.conf ##编辑配置文件
    anon_root=/ftpdir  ##添加这一行
systemctl restart vsftpd  ##重启ftp服务

5)匿名用户上传

anon_upload_enable=YES | NO
服务端:
vim /etc/vsftpd/vsftpd.conf  ##编辑配置文件
    anon_upload_enable=YES   ##文件中有命令,只需取消注释即可
systemctl restart vsftpd    ##重启ftp服务
chgrp ftp /var/ftp/pub      ##修改pub的组
chmod 775 /var/ftp/pub      ##修改权限
客户端测试:

当服务端设置为 YES:
这里写图片描述
6)匿名用户建立目录

anon_mkdir_write_enable=YES|NO  ##可在文件中找到,取消注释即可

客户端测试:
这里写图片描述
7)匿名用户下载

anon_world_readable_only=NO ##(需要手动添加)是否允许匿名用户设置仅读,因为是要下载,修改为NO

8)匿名用户删除

anon_other_write_enable=YES  ##匿名用户可写,包括删除动作;(文件没有,手动添加)

客户端测试:
这里写图片描述
9)匿名用户上传限速(用户上传必须是YES):

anon_upload_enable=YES 
anon_max_rate=102400    //上传限速为100K左右,默认单位为字节

客户端测试:
这里写图片描述
10)匿名用户和本地用户上传文件默认权限

local_umask=022    //本地用户上传文件权限为644
anon_umask=077     //匿名用户上传文件权限为600

11) 限制本地用户浏览根目录:

所有用户被锁在自己的家目录中**

chroot_local_user=YES
chmod u-w /home/*

客户端测试:
首先,更改前student用户是可以浏览根目录的,
这里写图片描述
更改后student用户只能浏览自己的家目录,
这里写图片描述
12)用户黑名单的建立
(修改黑白名单不需要重启,修改配置文件必须重启)

//相当于黑名单,默认的所有人是可以浏览根目录的,只有文件/etc/vsftpd/chroot_list的用户是不可以
chroot_local_user=NO  
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list  #chroot_list

13)用户白名单的建立

//白名单,默认的所有人是不可以浏览根目录的,只有文件/etc/vsftpd/chroot_list的用户是可以
chroot_local_user=YES  
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

限制本地用户登陆:

默认情况下,ftpusers,user_list都是黑名单,但/etc/vsftpd/ftpusers是永久黑名单,且优先级最高;/etc/vsftpd/user_list是临时黑名单,会有可能变成白名单。如果改变文件内容:userlist_deny=NO,那么user_list变成白名单,只有白名单上的用户,可以登陆ftp。

//注:如果user_list和ftpusers出现同一用户,则由于ftpusers的优先级更高,只有黑名单生效。


创建虚拟用户

当虚拟用户开启之后,原始用户是不能通过认证;

1) yum whatprovides */pam_userdb.so #查找软件,并下载
2)创建虚拟帐号身份

vim /etc/vsftpd/westosfile  ##编辑文件

文件编辑内容如图所示:
这里写图片描述
3)生成加密文件

db_load -T -t hash -f /etc/vsftpd/westosfile /etc/vsftpd/westosfile.db  //将明文内容加密(hash函数)

4)设定策略文件

vim /etc/pam.d/westos  ##编辑策略文件内容
    account    required              pam_userdb.so  db=/etc/vsftpd/westosfile
    auth       required              pam_userdb.so  db=/etc/vsftpd/westosfile

帐号/密码 必须要通过模块认证,否则失败
5)修改配置文件

vim /etc/vsftpd/vsftpd.conf ##编辑文件
    pam_service_name=westos ##修改为自己创建的策略文件名
    userlist_enable=YES  
    guest_enable=YES
    guest_username=ftp  #ftp是存在的用户,虚拟帐号身份指定
systemctl restart vsftpd  ##重启ftp服务

6)客户端测试
这里写图片描述


虚拟账号家目录独立设定
服务端:

mkdir /ftpuserhome
mkdir /ftpuserhome/user{1..3}
touch /ftpuserhome/user1/user1file
touch /ftpuserhome/user2/user2file
touch /ftpuserhome/user3/user3file
vim /etc/vsftpd/vsftpd.conf   ##编辑配置文件
   local_root=/ftpuserhome/$USER
   user_sub_token=$USER
systemctl restart vsftpd ##重启ftp服务

这里写图片描述
这里写图片描述
客户端测试:
user1用户只能看到user1file
这里写图片描述


虚拟帐号配置独立

[root@localhost ~]# cd /vftdir
[root@localhost vftdir]# mkdir user{1..3}/pub
[root@localhost vftdir]# chgrp ftp user{1..3}/pub   //改变其组为已经存在的组
[root@localhost vftdir]# chmod 775 user{1..3}/pub   //改变权限
[root@localhost vftdir]# mkdir -p /etc/vsftpd/userconf  
[root@localhost vftdir]# vim /etc/vsftpd/vsftpd.conf  //编辑主配置文件
                     末尾添加一行  user_config_dir=/etc/vsftpd/userconf   //
                     注释这一行 anon_upload_enable=YES  //因为虚拟用户使用的还是匿名用户的参数设置,注释可以查看效果
[root@localhost vftdir]# systemctl restart vsftpd   //重启服务
[root@localhost vftdir]# vim /etc/vsftpd/userconf/user1  //编辑user1用户可以上传文件的操作命令,只对user1有用,其他的虚拟用户不可以的
                         添加内容  :anon_upload_enable=YES //匿名用户上传文件

这里写图片描述
客户端测试:
我们是对user1用户做的设定,先用user3用户实验,
这里写图片描述

猜你喜欢

转载自blog.csdn.net/wangkana/article/details/80275738