Linux系统中的ftp服务

FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。

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

一、发布环境搭建--->软件vsftpd
1.下载服务
vim /etc/yum.repos.d/rhel_dvd.repo
---->设置为网络镜像
yum    clean      all
yum    search    ftp
yum    install         vsftpd.x86_64    -y
systemctl      start            vsftpd
systemctl     enable             vsftpd


2.设置火墙
firewall-config
---->Permanent--->ftp--->Option--->Reload Firewalld   ###启用vsftpd服务

firewall-cmd  --permanent  --add-service=ftp                        ##添加ftp服务到火墙白名单(不关闭防火墙)

firewall-cmd  --reload                                                             ##重新加载防火墙配置

firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client ftp ssh        ##查看启用成功

Linux系统中的ftp服务_第1张图片
3.关闭selinux

vim /etc/sysconfig/selinux   ###修改加强性认证火墙
reboot              ###内核中修改的,需要重启
ssh [email protected]    -X
getenforce                     ###查看加强性火墙
-->Disabled                ###回显

  


检测搭建成功:
[root@localhost ftp]# touch   file
[root@localhost ~]# lftp     172.25.254.87
bash: lftp: command not found...                        ###软件lftp:相当于浏览器
[root@localhost ftp]# yum   install    lftp            -y
[root@localhost ftp] lftp      172.25.254.87
lftp 172.25.254.87:~> ls
-rw-r--r--    1 0        0               0 Oct 28 03:26 file
drwxr-xr-x    2 0        0               6 Aug 03  2015 pub

二、用户登陆管理
1.匿名、本地用户登陆方法
[root@localhost ftp]# lftp 172.25.254.87                             ###匿名用户登陆,下载文件位置/var/ftp
lftp 172.25.254.87:/> rm -fr /var/ftp/file                                   ###匿名用户不可删除
lftp 172.25.254.87:/> ls
-rw-r--r--    1 0        0               0 Oct 28 03:26 file
drwxr-xr-x    2 0        0               6 Aug 03  2015 pub
lftp 172.25.254.87:/> put /etc/passwd                                                     ###匿名用户不可写入
put: Access failed: 550 Permission denied. (passwd)                       ###550本地服务不允许

[root@localhost ~]# lftp 172.25.254.87 -u student
Password:                                                                              ###本地用户登陆,服务的文件位置/home/用户
lftp [email protected]:~> ls      
lftp [email protected]:~> put /etc/passwd                 ###服务中上传文件(绝对路径)
2040 bytes transferred
lftp [email protected]:~> ls
-rw-r--r--    1 1000     1000         2040 Oct 28 03:54 passwd
lftp [email protected]:~> rm -fr passwd                        ###也可在服务中删除文件
rm ok, `passwd' removed
lftp [email protected]:~> ls
lftp [email protected]:~> quit
2.管理用户
vim /etc/vsftpd/vsftpd.conf             
anonymous_enable=YES | NO          ###匿名用户是否允许登陆
local_enable=YES | NO                     ###本地用户是否允许登陆
write_enable=YES | NO                    ###本地用户是否允许写入
#non_upload_enable=YES               ###匿名用户是否可写,默认注释(不可写)
anon_world_readable_only=NO      ###匿名用户可下载
anon_mkdir_write_enable=YES      ###匿名用户可建目录
anon_other_write_enable=YES      ###匿名用户可删除/var/ftp/pub,重命名
anon_max_rate=102400                 ###匿名用户上传的最大速率100K(自定义)
max_clients=2                                 ###最多允许几个同时连接
anon_root=/westos                       ###匿名用户登陆后默认文件位置为/westos
chown_uploads=YES
chown_username=westos           ###匿名用户使用的用户身份修改
chown_upload_mode=0644          ###westos用户上传文件权限
anon_umask=022    ##必须注释上一步  ###匿名用户上传文件权限777-022=755-111=644
systemctl restart vsftpd          ###更改完需要重启服务
local_root=/westos               ###更改本地用户默认位置
local_umask=077     ##更改本地用户上传文件权限,默认022
chroot_local_user=YES      #本地用户是否锁定在家目录,不可切到根目录
chroot_local_user=YES           ###切换根目录白名单建立
chroot_list_enable=YES         
chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user=NO           ###切换根目录黑名单建立
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
userlist_enable=YES        ####本地用户登陆黑名单
/etc/vsftpd/ftpusers             ###永久黑名单
/etc/vsftpd/user_list         ###临时黑名单
userlist_deny=NO              ###本地用户登陆白名单
#userlist_enable=YES
/etc/vsftpd/user_list
操作:
1)匿名用户开启写入
vim /etc/vsftpd/vsftpd.conf
加入:non_upload_enable=YES
systemctl restart vsftpd
测试:
[root@localhost ~]# lftp 172.25.254.87
lftp 172.25.254.87:~> ls
-rw-r--r--    1 0        0               0 Oct 28 03:26 file
drwxr-xr-x    2 0        0               6 Aug 03  2015 pub
lftp 172.25.254.87:/> cd pub/
lftp 172.25.254.87:/pub> ls
lftp 172.25.254.87:/pub> put /etc/passwd
put: Access failed: 553 Could not create file. (passwd)                  ###553:服务器文件系统不允许
依然不可写,匿名用户是ftp身份,/var/ftp/pub只有root可写
chmod 775 /var/ftp/pub/
chgrp ftp /var/ftp/pub/
测试:

[root@localhost ~]# ll -d /var/ftp/pub/
drwxrwxr-x. 2 root ftp 6 Aug  3  2015 /var/ftp/pub/
[root@localhost ~]# lftp 172.25.254.87
lftp 172.25.254.87:~> cd pub/
cd ok, cwd=/pub
lftp 172.25.254.87:/pub> put /etc/passwd
2040 bytes transferred
lftp 172.25.254.87:~> get passwd              ###本来不可以下载
get: Access failed: 550 Failed to open file. (passwd)

2)匿名用户开启下载
vim /etc/vsftpd/vsftpd.conf
加入:anon_world_readable_only=NO
systemctl restart vsftpd
测试:[root@localhost ~]# lftp 172.25.254.87
lftp 172.25.254.87:~> cd pub/
cd ok, cwd=/pub
lftp 172.25.254.87:/pub> get passwd
2040 bytes transferred                         ###可下载
lftp 172.25.254.87:/pub> rm -fr passwd
lftp 172.25.254.87:/pub> ls                    ###依然不可删除
-rw-------    1 14       50           2040 Oct 28 05:35 passwd

3)匿名用户开启建立目录
vim /etc/vsftpd/vsftpd.conf
加入:anon_mkdir_write_enable=YES
systemctl restart vsftpd
测试:[root@localhost ~]# lftp 172.25.254.87
lftp 172.25.254.87:~> cd pub/
cd ok, cwd=/pub
lftp 172.25.254.87:/pub> mkdir ll
mkdir ok, `ll' created

4)匿名用户可删除
vim /etc/vsftpd/vsftpd.conf
加入:anon_other_write_enable=YES
systemctl restart vsftpd
测试:[root@localhost ~]# lftp 172.25.254.87
lftp 172.25.254.87:~> cd pub/
cd ok, cwd=/pub
lftp 172.25.254.87:/pub> ls
drwx------    2 14       50              6 Oct 28 06:18 ll
lftp 172.25.254.87:/pub> rm -r ll/
rm ok, `ll/' removed

5)匿名用户上传的最大速率
[root@localhost mnt]# dd if=/dev/zero of=/mnt/bigfile bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 8.62895 s, 122 MB/s
[root@localhost mnt]# lftp 172.25.254.87
lftp 172.25.254.87:~> cd pub/         
cd ok, cwd=/pub
lftp 172.25.254.87:/pub> ls
lftp 172.25.254.87:/pub> put /mnt/bigfile
1048576000 bytes transferred in 11 seconds (90.34M/s)
vim /etc/vsftpd/vsftpd.conf
加入:anon_max_rate=102400
systemctl restart vsftpd

6)最多允许几个同时连接
vim /etc/vsftpd/vsftpd.conf
加入:max_clients=2
systemctl restart vsftpd

7)匿名用户登陆后默认文件位置
[root@localhost mnt]# mkdir -p /westos/westosdir
vim /etc/vsftpd/vsftpd.conf
加入:anon_root=/westos
systemctl restart vsftpd
[root@localhost mnt]# lftp 172.25.254.87
lftp 172.25.254.87:~> ls
drwxr-xr-x    2 0        0               6 Oct 28 07:03 westosdir

8)匿名用户使用的用户身份修改及权限
vim /etc/vsftpd/vsftpd.conf
加入:
chown_uploads=YES
chown_username=westos           ###匿名用户使用的用户身份修改
chown_upload_mode=0644         ###此用户上传文件权限
systemctl restart vsftpd
lftp 172.25.254.87:/pub> put /etc/passwd
2083 bytes transferred
lftp 172.25.254.87:/pub> ls
-rw-r--r--    1 14       50        6547538 Oct 28 07:02 bigfile
-rw-------    1 1002     50            491 Oct 28 06:48 inittab
-rw-r--r--    1 1002     50           2083 Oct 28 07:11 passwd

9)匿名用户上传文件权限       
vim /etc/vsftpd/vsftpd.conf
加入:anon_umask=022                    ##777-系统预留022-文件系统预留111=644
注释:8)中修改
systemctl restart vsftpd
lftp 172.25.254.87:/pub> put /mnt/bigfile
Interrupt                                                          
lftp 172.25.254.87:/pub> ls
-rw-r--r--    1 14       50        6547538 Oct 28 07:02 bigfile

10)更改本地用户默认位置
vim /etc/vsftpd/vsftpd.conf
加入:local_root=/westos
systemctl restart vsftpd

[root@localhost mnt]# lftp 172.25.254.87 -u student
Password:
lftp [email protected]:~> ls      
drwxr-xr-x    2 0        0               6 Oct 28 07:03 westos

11)更改本地用户上传文件权限

vim /etc/vsftpd/vsftpd.conf
加入:local_umask=077
systemctl restart vsftpd
[root@localhost mnt]# lftp 172.25.254.87 -u student
Password:
lftp [email protected]:~> ls      
-rw-r--r--    1 1000     1000         2083 Oct 28 08:07 passwd
lftp [email protected]:~> put /etc/inittab
491 bytes transferred
lftp [email protected]:~> ls
-rw-------    1 1000     1000          491 Oct 28 08:11 inittab
-rw-r--r--    1 1000     1000         2083 Oct 28 08:07 passwd

12)本地用户是否锁定在家目录,不可切到根目录

vim /etc/vsftpd/vsftpd.conf
加入:chroot_local_user=YES
systemctl restart vsftpd
[root@localhost mnt]# lftp 172.25.254.87 -u qq
Password:
lftp [email protected]:~> qq           
Unknown command `qq'.
lftp [email protected]:~> ls
ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
lftp [email protected]:~> quit
[root@localhost mnt]# chmod u-w /home/*
[root@localhost mnt]# lftp 172.25.254.87 -u qq
Password:
lftp [email protected]:~> ls           
lftp [email protected]:/> cd /        
lftp [email protected]:/> ls

13)切换根目录白名单建立

vim /etc/vsftpd/vsftpd.conf
加入:chroot_local_user=YES

             chroot_list_enable=YES
systemctl restart vsftpd
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
[root@localhost ~]# systemctl restart vsftpd
[root@localhost mnt]# touch /etc/vsftpd/chroot_list
[root@localhost mnt]# vim /etc/vsftpd/chroot_list
                  ------> student
[root@localhost ~]# lftp 172.25.254.87 -u qq
Password:
lftp [email protected]:~> ls           
Interrupt                          
lftp [email protected]:~> quit
[root@localhost ~]# lftp 172.25.254.87 -u student
Password:
lftp [email protected]:~> ls      
-rw-------    1 1000     1000          491 Oct 28 08:11 inittab
-rw-r--r--    1 1000     1000         2083 Oct 28 08:07 passwd
lftp [email protected]:~> cd /
cd ok, cwd=/
lftp [email protected]:/> ls
lrwxrwxrwx    1 0        0               7 May 07  2014 bin -> usr/bin
dr-xr-xr-x    4 0        0            4096 Jul 10  2014 boot

14)切换根目录黑名单建立

vim /etc/vsftpd/vsftpd.conf
加入:chroot_local_user=NO

             chroot_list_enable=YES
systemctl restart vsftpd
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
[root@localhost ~]# systemctl restart vsftpd
[root@localhost mnt]# touch /etc/vsftpd/chroot_list
[root@localhost mnt]# vim /etc/vsftpd/chroot_list
                  ------> student
[root@localhost ~]# lftp 172.25.254.87 -u qq
Password:
lftp [email protected]:~> ls           
lftp [email protected]:~> cd /        
cd ok, cwd=/
lftp [email protected]:/> ls
lrwxrwxrwx    1 0        0               7 May 07  2014 bin -> usr/bin
dr-xr-xr-x    4 0        0            4096 Jul 10  2014 boot
[root@localhost ~]# lftp 172.25.254.87 -u student
Password:
lftp [email protected]:~> ls      
-rw-------    1 1000     1000          491 Oct 28 08:11 inittab
-rw-r--r--    1 1000     1000         2083 Oct 28 08:07 passwd
lftp [email protected]:/> cd /
lftp [email protected]:/> ls

15)本地用户登陆黑名单

vim /etc/vsftpd/vsftpd.conf
加入: userlist_enable=YES
systemctl restart vsftpd
[root@localhost ~]# vim /etc/vsftpd/user_list |  vim /etc/vsftpd/ftpusers
               ---->westos
[root@localhost ~]# lftp 172.25.254.87 -u westos
Password:
lftp [email protected]:~> ls       
Interrupt                                    
 
[root@localhost ~]# lftp 172.25.254.87 -u qq
Password:
lftp [email protected]:~> ls           

16)本地用户登陆白名单

vim /etc/vsftpd/vsftpd.conf
加入:userlist_deny=NO            
           #userlist_enable=YES
systemctl restart vsftpd
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
[root@localhost ~]# systemctl restart vsftpd.service
[root@localhost ~]# vim /etc/vsftpd/user_list
           -----> qq   westos
[root@localhost ~]# lftp 172.25.254.87 -u qq
Password:
lftp [email protected]:~> ls     
[root@localhost ~]# lftp 172.25.254.87 -u westos
Password:
lftp [email protected]:~> ls       ###黑白名单同时存在,黑名单生效
ls: Login failed: 530 Login incorrect.     

三、ftp虚拟用户设定
1.创建虚拟帐号身份
vim /etc/vsftpd/ftplogin     ###文件名自定义
-->qq1
   111
   qq2
   222
   qq3
   333
2.虚拟名单加密
db_load -T -t hash -f /etc/vsftpd/ftplogin /etc/vsftpd/ftplogin.db                  ###-T 转换 -t 转换格式   -f  将谁转换为谁
3.对名单设置pam认证       ####名单与pam程序关联
vim /etc/pam.d/qq          ###文件名自定义
account         required        pam_userdb.so   db=/etc/vsftpd/ftplogin
auth            required        pam_userdb.so   db=/etc/vsftpd/ftplogin
用户|密码       通过或拒绝      认证程序pam    用户及密码名单(会自动补个.db)
注:找服务是否存在,在哪:find / -name pam_userdb.so
4.让vsftpd对虚拟用户采用pam认证方式   ####vsftpd与pam程序关联
vim /etc/vsftpd/vsftpd.conf   
pam_service_name=qq     ##关联;pam认证文件名
guest_enable=YES        ##激活
guest_username=ftp      ##登陆后真实身份都为此指定用户
systemctl restart vsftpd
测试:
[root@localhost ~]# lftp 172.25.254.87 -u  qq1
Password:
lftp [email protected]:~> ls          
-rw-r--r--    1 0        0               0 Oct 28 03:26 file
drwxrwxr-x    2 0        50             47 Oct 28 07:11 pub

[root@localhost ~]# lftp 172.25.254.87 -u  qq2
Password:
lftp [email protected]:~> ls          
-rw-r--r--    1 0        0               0 Oct 28 03:26 file
drwxrwxr-x    2 0        50             47 Oct 28 07:11 pub
[root@localhost ~]# lftp 172.25.254.87 -u  qq3
Password:
lftp [email protected]:~> ls          
-rw-r--r--    1 0        0               0 Oct 28 03:26 file
drwxrwxr-x    2 0        50             47 Oct 28 07:11 pub

5.设定虚拟用户登陆家目录
mkdir -p /ftphome/qq1/qq1dir/
mkdir -p /ftphome/qq2/qq2dir/
mkdir -p /ftphome/qq3/qq3dir/
vim /etc/vsftpd/vsftpd.conf
写入:
local_root=/ftphome/$USER    ###指定虚拟用户登陆家目录
user_sub_token=$USER     ###声明字符串变量$USER,与它在shell中用法一致
systemctl restart vsftpd
测试:
[root@localhost ~]# lftp 172.25.254.87 -u  qq1
Password:
lftp [email protected]:~> ls          
drwxr-xr-x    2 0        0               6 Oct 28 03:10 qq1dir
lftp [email protected]:/> quit
[root@localhost ~]# lftp 172.25.254.87 -u  qq2
Password:
lftp [email protected]:~> ls          
drwxr-xr-x    2 0        0               6 Oct 28 03:10 qq2dir
lftp [email protected]:/> quit

[root@localhost ~]# lftp 172.25.254.87 -u  qq3
Password:
lftp [email protected]:~> ls          
drwxr-xr-x    2 0        0               6 Oct 28 03:10 qq3dir

6.某个虚拟用户的单独管理
chmod 775 /fpthome/qq*/*       ###给家目录775 权限(组中人可写,其他人不可)
chgrp ftp /ftphome/qq*/*              ###设置家目录属于ftp组,因指定过虚拟用户以ftp身份(ftp组内)登陆,所以虚拟用户可读写
vim /etc/vsftpd/vsftpd.conf
取消之前写的权力       ###回收默认权限
写入:
user_config_dir=/etc/vsftpd/configdir    ###指定单个虚拟用户权限子配置文件的目录
mkdir /etc/vsftpd/configdir -p      
systemctl restart vsftpd.service
vim /etc/vsftpd/configdir/qq3   ##单独管理谁,文件名就是谁,且目录为文件指定目录
写入:anon_upload_enable=YES   ###虚拟用户qq3可上传
测试:
[root@localhost ftphome]# lftp 172.25.254.87 -u  qq3
Password:
lftp [email protected]:~> cd qq3dir/
cd ok, cwd=/qq3dir
lftp [email protected]:/qq3dir> ls
lftp [email protected]:/qq3dir> put /etc/passwd      ###qq3可上传
2157 bytes transferred
lftp [email protected]:/qq3dir> rm -fr  passwd           
lftp [email protected]:/qq3dir> ls                   ###qq3不可删
-rw-------    1 14       50           2157 Oct 28 04:00 passwd
[root@localhost ftphome]# lftp 172.25.254.87 -u  qq2
Password:
lftp [email protected]:~> cd qq2dir/
cd ok, cwd=/qq2dir
lftp [email protected]:/qq2dir> put /etc/passwd
put: Access failed: 550 Permission denied. (passwd)    ###qq2不可上传

 

你可能感兴趣的:(Linux系统中的ftp服务)