linux---vsftpd服务

vsftpd服务

1.ftp的定义: ftp:// ##文件传输协议
2.ftp协议提供的软件: 在rhel7中:vsftpd
3.部署ftp服务

[root@localhost ~]# vim /etc/sysconfig/selinux    ##更改防火墙状态 SELINUX=disabled
[root@localhost ~]# reboot   ##reboot之后火墙状态才会更改
[root@localhost ~]# getenforce  ##查看火墙状态

这里写图片描述

[root@localhost ~]# yum install vsftpd  lftp -y   ##安装ftp和lftp
[root@localhost ~]# systemctl start vsftpd   ##开启ftp
[root@localhost ~]# systemctl enable vsftpd
[root@localhost ~]# lftp 172.25.254.228
lftp 172.25.254.228:~> ls
drwxr-xr-x    2 0        0               6 Mar 07  2014 pub

这里写图片描述

报错:
[root@localhost ~]# lftp 172.25.254.228
lftp 172.25.254.228:~> ls              
`ls' at 0 [Delaying before reconnect: 29]     ##说明没有连接上,防火墙阻止
[root@localhost ~]# firewall-cmd --permanent --add-service=ftp   ##将ftp服务加进防火墙
 success
[root@localhost ~]# firewall-cmd --reload   ##重新加载防火墙
 success
[root@localhost ~]# lftp 172.25.254.228  ##再次查看就可以了
lftp 172.25.254.228:~> ls
drwxr-xr-x    2 0        0               6 Mar 07  2014 pub

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


(1)匿名用户家目录修改

[root@localhost ~]# cd  /var/ftp
[root@localhost ftp]# ls
 pub
[root@localhost ftp]# touch  westosfile     ##建立一个文件有利于后面操作查看的结果
[root@localhost ftp]# ls
  pub   westosfile
[root@localhost ftp]# mkdir /ftpdir/westosdir -p   ##建立一个新的家目录
[root@localhost ftp]# vim /etc/vsftpd/vsftpd.conf
     13 anon_root=/ftpdir     ##用户家目录修改
[root@localhost ftp]# systemctl restart vsftpd  ##重启vsftpd
[root@localhost ftp]# lftp 172.25.254.228
lftp 172.25.254.228:~> ls
drwxr-xr-x    2 0        0               6 May 07 11:10 westosdir   ##可以看到家目录的修改

这里写图片描述
这里写图片描述


(2)用匿名用户是否可以登陆

[root@localhost ftp]# vim /etc/vsftpd/vsftpd.conf
  12 anonymous_enable=NO      ##用匿名用户不可以登陆
[root@localhost ftp]# systemctl restart vsftpd
[root@localhost ftp]# lftp 172.25.254.228
lftp 172.25.254.228:~> ls
##登录不上,处于无法连接状态 (如图所示)

这里写图片描述
这里写图片描述
这里写图片描述


(3)本地用户是否可以登陆

[root@localhost ftp]# vim /etc/vsftpd/vsftpd.conf 
  12 anonymous_enable=YES
  16 local_enable=NO    ##本地用户是否可以登陆
[root@localhost ftp]# systemctl restart vsftpd
[root@localhost ftp]# useradd westos  ##建立用户
[root@localhost ftp]# lftp 172.25.254.228 -u westos
Password: 
lftp dmf@172.25.254.228:~> ls          
ls: Login failed: 530 This FTP server is anonymous only.    ##服务本身功能未开放

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

注意: 要将之前做的匿名登录改为YES,否则会出现报错,如下:

报错:
[root@localhost ftp]# vim /etc/vsftpd/vsftpd.conf
[root@localhost ftp]# systemctl restart vsftpd
[root@localhost ftp]# useradd westos
[root@localhost ftp]# lftp 172.25.254.228 -u westos
Password: 
lftp westos@172.25.254.228:~> ls       
`ls' at 0 [Delaying before reconnect: 8]   ##会显示连接不上

(4)是否对登陆的用户可写

[root@localhost ~]# su - student
[student@localhost ~]$ cd /home/student
[student@localhost ~]$ ls
[student@localhost ~]$ mkdir pub  ##建立一个目录
[student@localhost ~]$ ls
pub
[student@localhost ~]$ exit
logout
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
local_enable=YES    ##本地用户可登录
write_enable=YES    ##本地用户登录可写
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# lftp 172.25.254.228 -u student
Password: 
lftp student@172.25.254.228:~> cd pub
cd ok, cwd=/home/student/pub
lftp [email protected]:~/pub> put /etc/passwd  ##可以上传文件说明对登录的用户是可写的
2048 bytes transferred

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述


(5)匿名用户上传

[root@localhost ftp]# vim /etc/vsftpd/vsftpd.conf 
   28 anon_upload_enable=YES    ##匿名用户上传
[root@localhost ftp]# systemctl restart vsftpd
[root@localhost ftp]# chgrp ftp /var/ftp/pub  ##建立一个组
[root@localhost ftp]# chmod 775 /var/ftp/pub
[root@localhost ftp]# lftp 172.25.254.228   ##匿名用户
lftp 172.25.254.228:~> ls
drwxr-xr-x    2 0        0               6 Mar 07  2014 pub
-rw-r--r--    1 0        0               0 May 05 07:33 westosfile
[root@localhost ftp]# lftp 172.25.254.228
lftp 172.25.254.228:~> cd /pub   ##必须要有这个目录才可以上传到这里
cd ok, cwd=/pub
lftp 172.25.254.228:/pub> put /etc/passwd
2397 bytes transferred     ##上传成功

这里写图片描述这里写图片描述这里写图片描述


(6)匿名用户下载

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
13 anon_world_readable_only=NO   ##设定参数为no表示匿名用户可以下载
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# lftp 172.25.254.228
lftp 172.25.254.228:~> cd /pub
cd ok, cwd=/pub
lftp 172.25.254.228:/pub> ls
-rw-------    1 14       50           2048 May 08 12:40 passwd
lftp 172.25.254.228:/pub> get passwd   ##下载pub目录里有的文件
2048 bytes transferred   ##下载成功

这里写图片描述这里写图片描述这里写图片描述


(7)匿名用户删除

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
 12 anonymous_enable=YES   ##需要可以匿名登录
 13 anon_world_readable_only=NO  
 14 anon_other_write_enable=YES   ##删除
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# lftp 172.25.254.228
lftp 172.25.254.228:~> cd /pub
cd ok, cwd=/pub
lftp 172.25.254.228:/pub> rm passwd   ##删除pub里的文件
rm ok, `passwd' removed   ##删除成功

这里写图片描述这里写图片描述
这里写图片描述


(8)匿名用户建立目录

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
   34 anon_mkdir_write_enable=YES   ##匿名用户建立目录
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# lftp 172.25.254.228
lftp 172.25.254.228:~> cd /pub
cd ok, cwd=/pub
lftp 172.25.254.228:/pub> mkdir test   ##建立一个目录
mkdir ok, `test' created     ##建立成功
lftp 172.25.254.228:/pub> ls
drwx------    2 14       50              6 May 08 12:57 test

这里写图片描述
这里写图片描述
这里写图片描述


(9)限制上传速度

没有限制时的速度:
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
    30 anon_upload_enable=YES   ##匿名上传
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# dd if=/dev/zero of=/mnt/bigfile bs=1M count=2000     ##截取一个文件
2000+0 records in
2000+0 records out
2097152000 bytes (2.1 GB) copied, 26.685 s, 78.6 MB/s
[root@localhost ~]# lftp 172.25.254.228
lftp 172.25.254.228:~> cd /pub         
cd ok, cwd=/pub                  
lftp 172.25.254.228:/pub> put /mnt/bigfile
2097152000 bytes transferred in 65 seconds (30.92M/s)               ###没有限制的时候速度
lftp 172.25.254.228:/pub> quit
[root@localhost ~]# rm -fr /var/ftp/pub/bigfile  ##删除刚才上传的文件(保证再做下一个限速实验的时候是没有上传过的,不然会出错)

这里写图片描述这里写图片描述
这里写图片描述

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
     30 anon_upload_enable=YES
     31 anon_max_rate=102400(设定的字节)   ##限制网速
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# lftp 172.25.254.228
lftp 172.25.254.228:~> cd /pub         
cd ok, cwd=/pub
lftp 172.25.254.228:/pub> put /mnt/bigfile   ##限制网速

这里写图片描述
这里写图片描述
这里写图片描述


(10)本地用户上传文件权限

没有修改权限时:
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
 24 local_umask=022  ##本地用户上传权限
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# lftp 172.25.254.228 -u student  
Password: 
lftp student@172.25.254.228:~> put /etc/passwd
2048 bytes transferred
lftp student@172.25.254.228:~> ls
-rw-r--r--    1 1000     1000         2048 May 08 13:26 passwd      ##上传的passwd权限为644
drwxrwxr-x    2 1000     1000           19 May 08 12:27 pub

这里写图片描述这里写图片描述这里写图片描述

更改本地用户的上传权限后:
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
    24 local_umask=077    ##本地用户上传权限
    25 anon_umask=022     ##匿名用户上传权限
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# lftp 172.25.254.228 -u student
Password: 
lftp student@172.25.254.228:~> put /etc/group
865 bytes transferred in 10 seconds (86b/s)       
lftp student@172.25.254.228:~> ls
-rw-------    1 1000     1000          865 May 08 13:32 group      ##再一次上传的权限为600
-rw-r--r--    1 1000     1000         2048 May 08 13:26 passwd
drwxrwxr-x    2 1000     1000           19 May 08 12:27 pub
lftp student@172.25.254.228:~> rm group   ##在开启本地用户删除的情况下可以先把文件删除,以便于下一次实验
rm ok, `group' removed
lftp [email protected]:~> rm passwd
rm ok, `passwd' removed

这里写图片描述这里写图片描述这里写图片描述


(11)限制本地用户浏览/目录

不可以访问家目录:
[root@localhost ~]# chmod u-w /home/*  ##所有用户被锁定到自己的家目录中
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
    102 chroot_local_user=YES ##默认任何人都不可以访问家目录
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# lftp 172.25.254.228 -u student
Password: 
lftp student@172.25.254.228:~> ls      
drwxrwxr-x    2 1000     1000           19 May 08 12:27 pub
lftp student@172.25.254.228:/> cd /    ##切换到 / 下家目录,不能访问到
lftp student@172.25.254.228:/> ls
drwxrwxr-x    2 1000     1000           19 May 08 12:27 pub
lftp student@172.25.254.228:/> quit

这里写图片描述

任何人可以随意浏览/目录:
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
  102 chroot_local_user=NO   ##表示默认任何人可以随意浏览
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# chmod u-w /home/*
[root@localhost ~]# lftp 172.25.254.228 -u student
Password: 
lftp student@172.25.254.228:~> ls      
drwxrwxr-x    2 1000     1000           19 May 08 12:27 pub
lftp student@172.25.254.228:~> 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
drwxr-xr-x   18 0        0            2860 May 08 12:10 dev
drwxr-xr-x  134 0        0            8192 May 08 12:09 etc

这里写图片描述


(12)用户黑名单建立

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
 102 chroot_local_user=NO    ##黑名单
 103 chroot_list_enable=YES
 105 chroot_list_file=/etc/vsftpd/chroot_list
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# vim /etc/vsftpd/chroot_list   ##编写黑名单,list是黑名单,默认任何人都可以,只有名单里的人不可以
[root@localhost ~]# cat /etc/vsftpd/chroot_list
westos    ##westos为黑名单
[root@localhost ~]# lftp 172.25.254.228 -u westos   ##用westos登录
Password: 
lftp westos@172.25.254.228:~> cd /      
cd ok, cwd=/                      
lftp westos@172.25.254.228:/> ls   ##查看不到家目录里的内容

[root@localhost ~]# lftp 172.25.254.228 -u student  ##登录到没有添加到黑名单的用户
Password: 
lftp student@172.25.254.228:~> ls       ##可以查看到目录
drwxrwxr-x    2 1000     1000           19 May 08 12:27 pub
lftp student@172.25.254.228:~> cd /    
cd ok, cwd=/
lftp student@172.25.254.228:/> ls    ##可以看到家目录
lrwxrwxrwx    1 0        0               7 May 07  2014 bin -> usr/bin
dr-xr-xr-x    4 0        0            4096 Jul 10  2014 boot
drwxr-xr-x   18 0        0            2860 May 09 08:11 dev
drwxr-xr-x  134 0        0            8192 May 09 08:23 etc

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述


(13)用户白名单建立

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
      102 chroot_local_user=YES   ##白名单
      103 chroot_list_enable=YES
      105 chroot_list_file=/etc/vsftpd/chroot_list
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# cat /etc/vsftpd/chroot_list   
westos      ##白名单中只有名单里的人可以,默认任何人都不可以
[root@localhost ~]# lftp 172.25.254.228 -u westos
Password: 
lftp westos@172.25.254.228:~> ls
lftp westos@172.25.254.228:~> cd /   
cd ok, cwd=/
lftp westos@172.25.254.228:/> ls   ##在白名单中的用户可以访问到家目录
lrwxrwxrwx    1 0        0               7 May 07  2014 bin -> usr/bin
dr-xr-xr-x    4 0        0            4096 Jul 10  2014 boot
drwxr-xr-x   18 0        0            2860 May 09 08:11 dev

[root@localhost ~]# lftp 172.25.254.228 -u student  ##登录不在白名单的用户
Password: 
lftp student@172.25.254.228:~> ls      
drwxrwxr-x    2 1000     1000           19 May 08 12:27 pub
lftp student@172.25.254.228:/> cd /    ##访问不到家目录
lftp student@172.25.254.228:/> ls
drwxrwxr-x    2 1000     1000           19 May 08 12:27 pub

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

注意: 黑白名单的区分就是chroot_local_user=YES | NO,当这个命令为YES时,默认/etc/vsftpd/chroot_list为白名单,若为NO时,则反之为黑名单。


(14)限制本地用户登陆
用户黑名单:

[root@localhost ~]# vim /etc/vsftpd/ftpusers   ##用户黑名单
[root@localhost ~]# cat /etc/vsftpd/ftpusers
westos    ##将westos设为黑名单里
[root@localhost ~]# lftp 172.25.254.228 -u student   ##登录不是黑名单的用户可以看到目录
Password: 
lftp student@172.25.254.228:~> ls      
drwxrwxr-x    2 1000     1000           19 May 08 12:27 pub
lftp student@172.25.254.228:/> quit
[root@localhost ~]# lftp 172.25.254.228 -u westos   ##登录到黑名单用户
Password: 
lftp westos@172.25.254.228:~> ls       
ls: Login failed: 530 Login incorrect.     ##用户认证失败      

这里写图片描述
这里写图片描述

注意:
vim /etc/vsftpd/user_list ##用户临时黑名单
ftpusers的黑名单强度大于user_list黑名单

用户白名单:

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
 128 userlist_enable=YES
 129 userlist_deny=NO    
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# vim /etc/vsftpd/user_list  ##参数设定,此文件变成用户白名单,只在名单中出现的用户可以登陆ftp
将student写入  
[root@localhost ~]# lftp 172.25.254.228 -u student  ##白名单中的用户登录
Password: 
lftp student@172.25.254.228:~> ls       ##可以查看
drwxrwxr-x    2 1000     1000           19 May 08 12:27 pub
lftp student@172.25.254.228:/> quit
[root@localhost ~]# lftp 172.25.254.228 -u westos  ##不在白名单中的用户
Password: 
lftp westos@172.25.254.228:~> ls       
ls: Login failed: 530 Permission denied.    ##530表示用户认证失败

这里写图片描述
这里写图片描述
这里写图片描述

分析: 将student写进白名单时,westos就不可以登陆


(15)ftp虚拟用户的设定

[root@localhost ~]# cd /etc/vsftpd
[root@localhost vsftpd]# ls
[root@localhost vsftpd]# vim userdb   ##文件名称任意
   user1   ##用户名
   123     ##登陆密码
   user2
   123
   user3
   123
[root@localhost vsftpd]# db_load -T -t hash -f userdb userdb.db  ##加密
[root@localhost vsftpd]# file userdb
userdb: ASCII text
[root@localhost vsftpd]# file userdb.db
userdb.db: Berkeley DB (Hash, version 9, native byte-order)
[root@localhost vsftpd]# vim /etc/pam.d/westos  ##文件名称任意,加密的认证钥匙
account    required     pam_userdb.so    db=/etc/vsftpd/userdb  ##自己建立的帐号和密码
auth       required     pam_userdb.so    db=/etc/vsftpd/userdb
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
   127 pam_service_name=westos   
   128 guest_enable=YES
   129 guest_username=ftp    ##虚拟帐号身份指定     
                             ##如果用student的权限过大chmod u-w /home/student
   130 userlist_enable=YES
[root@localhost vsftpd]# systemctl restart vsftpd
[root@localhost vsftpd]# lftp 172.25.254.228 -u user1  ##登录user1
Password: 
lftp user1@172.25.254.228:~> ls         ##可以查看到目录或文件
drwxrwxr-x    3 0        50             31 May 08 13:10 pub
-rw-r--r--    1 0        0               0 May 07 11:06 westosfile
报错:
[root@localhost vsftpd]# lftp 172.25.254.228 -u user1
Password: 
lftp user1@172.25.254.228:~> ls        
ls: Login failed: 530 Permission denied.          

注意: 要是有以上报错是需要将上次实验的白名单在/etc/vsftpd/vsftpd.conf注释掉,否则会出现用户认证失败。
在/etc/pam.d/westos下写的帐号和密码是自己建立并编写的


(16)虚拟帐号家目录独立设定

[root@localhost ~]# mkdir /vftpdir   ##文件名任意
[root@localhost ~]# cd /vftpdir
[root@localhost vftpdir]# ls
[root@localhost vftpdir]# mkdir user{1..3}
[root@localhost vftpdir]# ll
total 0
drwxr-xr-x 2 root root 6 May  6 02:39 user1
drwxr-xr-x 2 root root 6 May  6 02:39 user2
drwxr-xr-x 2 root root 6 May  6 02:39 user3
[root@localhost vftpdir]# touch user1/user1file
[root@localhost vftpdir]# touch user2/user2file
[root@localhost vftpdir]# touch user3/user3file
[root@localhost vftpdir]# vim /etc/vsftpd/vsftpd.conf
  133 local_root=/vftpdir/$USER     ##虚拟帐号家目录独立设定 
  134 user_sub_token=$USER          ##执行USER
[root@localhost vftpdir]# systemctl restart vsftpd
[root@localhost vftpdir]# lftp 172.25.254.228 -u user1
Password: 
lftp user1@172.25.254.228:~> ls        
-rw-r--r--    1 0        0               0 May 06 07:38 user1file

这里写图片描述
这里写图片描述
这里写图片描述


(17)虚拟帐号配置独立

[root@localhost vftpdir]# mkdir user{1..3}/pub
[root@localhost vftpdir]# chgrp westos user{1..3}/pub
[root@localhost vftpdir]# chmod 775 user{1..3}/pub
[root@localhost vftpdir]# vim /etc/vsftpd/vsftpd.conf 
##注释掉14 anon_other_write_enable=YES
       31 anon_upload_enable=YES
       32 anon_max_rate=102400
 ##写入:135 user_config_dir=/etc/vsftpd/conf_dir
[root@localhost vftpdir]# systemctl restart vsftpd
[root@localhost vftpdir]# lftp 172.25.254.228 -u user1  ##此时是没有给user1的配置独立的结果
Password: 
lftp user1@172.25.254.228:~> ls        
drwxrwxr-x    2 0        1001            6 May 06 07:41 pub
-rw-r--r--    1 0        0               0 May 06 07:38 user1file
lftp user1@172.25.254.228:/> cd /pub
lftp user1@172.25.254.228:/pub> put /etc/passwd
put: Access failed: 550 Permission denied. (passwd)  ##550服务本身功能
虚拟帐号user1配置独立:
[root@localhost vftpdir]# mkdir /etc/vsftpd/conf_dir -p   
[root@localhost vftpdir]# vim /etc/vsftpd/conf_dir/user1      ##在此文件中设定配置文件中的所有参数,此文件的优先级高
      anon_upload_enable=YES      ##里面编写的只允许user1的上传
[root@localhost vftpdir]# lftp 172.25.254.228 -u user1
Password: 
lftp user1@172.25.254.228:~> ls        
drwxrwxr-x    2 0        1001            6 May 06 07:41 pub
-rw-r--r--    1 0        0               0 May 06 07:38 user1file
lftp user1@172.25.254.228:/> cd /pub
lftp user1@172.25.254.228:/pub> put /etc/passwd  ##上传
2085 bytes transferred
lftp user1@172.25.254.228:/pub> rm passwd     ##删除passwd  
rm: Access failed: 550 Permission denied. (passwd)  ##550服务本身功能未开放,没有在/etc/vsftpd/conf_dir/user1里面编入可删除功能
lftp user1@172.25.254.228:/pub> quit
[root@localhost vftpdir]# lftp 172.25.254.228 -u user2
Password: 
lftp user2@172.25.254.228:~> cd /pub   
cd ok, cwd=/pub
lftp user2@172.25.254.228:/pub> put /etc/group    ##在上面文件只写了user1可上传,所以其他用户没有权力
put: Access failed: 550 Permission denied. (group)
lftp user2@172.25.254.228:/pub> quit
报错:
[root@localhost vftpdir]# lftp 172.25.254.228 -u user1
Password: 
lftp user1@172.25.254.228:~> ls        
drwxrwxr-x    2 0        1001            6 May 09 09:47 pub
-rw-r--r--    1 0        0               0 May 09 09:39 user1file
lftp user1@172.25.254.228:/> cd /pub
lftp user1@172.25.254.228:/pub> put /etc/passwd
put: Access failed: 553 Could not create file. (passwd)

注意: 以上报错553说明本地文件系统权限过小,需要给一个权限
看/etc/vsftpd/vsftpd.conf配置文件里的该开的权限有没有开启。

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/argued_d/article/details/80230678