1.部署ftp服务
服务端:
1)在部署ftp服务之前需要关闭selinux
[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=disabled #这行改为disabled
[root@localhost ~]# reboot #重启
2)重启以后再进行ftp服务的部署
[root@localhost ~]# yum install vsftpd #下载ftp
[root@localhost ~]# systemctl start vsftpd #开启ftp服务
[root@localhost ~]# systemctl enable vsftpd #设置ftp开机启动
[root@localhost~]# firewall-cmd --permanent --add-service=ftp #允许ftp访问
[root@localhost ~]# firewall-cmd --reload #重新加载火墙
[root@localhost ~]# touch /var/ftp/file1 #建立文件
安装vsftpd
客户端:打开另一个虚拟机
安装lftp
[root@station ~]# yum install lftp
[root@station ~]# lftp 172.25.254.252
lftp 172.25.254.252:~> ls
-rw-r--r-- 1 0 0 0 May 09 04:17 file1 #可看到新建的文件
drwxr-xr-x 2 0 0 6 Mar 07 2014 pub
2.ftp服务的基本信息
软件安装包: vsftpd
默认发布目录: /var/ftp
协议接口: 21/tcp
服务配置文件: /etc/vsftpd/vsftpd.conf
报错id的解析:
500 文件系统权限guoda
530 用户认证失败
550 服务本身功能未开放
553 本地文件系统权限过大
3.更改匿名用户家目录
anon_root=/ftpdir #匿名用户家目录
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anon_root=/ftpdir #匿名用户家目录
[root@localhost ~]# systemctl restart vsftpd.service
[root@localhost ~]# mkdir /ftpdir #建立家目录
[root@station ~]# lftp 172.25.254.252
lftp 172.25.254.252:~> ls
[root@localhost ~]# touch /ftpdir/file #在新的家目录建立文件
[root@station ~]# lftp 172.25.254.252
lftp 172.25.254.252:/> ls
-rw-r--r-- 1 0 0 0 May 09 04:47 file #可看见新建文件
lftp 172.25.254.252:/> exit
4.匿名用户登录
anonymous_enable=YES|NO #匿名用户是否可以登录
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #匿名用户不可以登录
[root@localhost ~]# systemctl restart vsftpd.service
[root@station ~]# lftp 172.25.254.252
lftp 172.25.254.252:~> ls
Interrupt #不能登录
更改内容:如改为NO
结果:不能登录
5.本地用户登录
1)local_enable=YES|NO #本地用户是否可以登录
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
local_enable=YES #本地用户可以登录
[root@localhost ~]# systemctl restart vsftpd.service
[root@station ~]# lftp 172.25.254.252 -u student
Password:
lftp student@172.25.254.252:~> ls
更改内容:如改为YES
结果:可以登录
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
local_enable=NO #本地用户不能登录
[root@localhost ~]# systemctl restart vsftpd.service
[root@station ~]# lftp 172.25.254.252 -u student
Password:
lftp student@172.25.254.252:~> ls
Interrupt
更改内容:如改为NO
结果:不能登录
2)write_enable=YES|NO #ftp是否对登录用户可写
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
write_enable=YES #登录用户可写
[root@localhost ~]# systemctl restart vsftpd.service
[root@station ~]# lftp 172.25.254.252 -u student
Password:
lftp student@172.25.254.252:~> put /etc/passwd
2348 bytes transferred
更改内容:如改为YES
检测结果:可以上传,删除等
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
write_enable=NO #登录用户不可写
[root@localhost ~]# systemctl restart vsftpd.service
[root@station ~]# lftp 172.25.254.252 -u student
Password:
lftp student@172.25.254.252:~> put /etc/passwd
put: Access failed: 550 Permission denied. (passwd)
更改内容:如改为NO
检测结果:不能上传,当然也不能执行其他
6.匿名用户上传
anon_upload_enable=YES|NO #匿名用户是否可以上传
write_enable=YES #必须是yes,才可以设置匿名用户
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
write_enable=YES #必须是yes
anon_upload_enable=YES #匿名用户是否可以上传
[root@localhost ~]# systemctl restart vsftpd.service
[root@localhost ~]# chgrp ftp /var/ftp/pub/ #更改组
[root@localhost ~]# chmod 775 /var/ftp/pub/ #更改权限
[root@station ~]# lftp 172.25.254.252
lftp 172.25.254.252:~> cd /pub/
lftp 172.25.254.252:/pub> put /etc/passwd
2348 bytes transferred #已上传
更改内容:如改为YES
检测结果:可以上传
7.匿名用户下载
anon_world_readable_only=YES|NO #匿名用户是否可以下载
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anon_world_readable_only=NO #匿名用户可以下载
[root@localhost ~]# systemctl restart vsftpd.service
[root@station ~]# lftp 172.25.254.252
lftp 172.25.254.252:/> get /pub/passwd #从/pub里下载文件,须从有执行权的目录中下载
2348 bytes transferred #已下载
更改内容:如改为NO
结果:可以下载
8.匿名用户删除
anon_other_write_enable=YES|NO #匿名用户是否可以删除
更改之前:
[root@station ~]# lftp 172.25.254.252
lftp 172.25.254.252:~> rm -rf /pub/passwd #删除文件
lftp 172.25.254.252:/> cd /pub/
cd ok, cwd=/pub
lftp 172.25.254.252:/pub> ls
-rw------- 1 14 50 2348 May 09 09:41 passwd #没有删除掉
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anon_other_write_enable=YES #设置匿名用户可以删除
[root@localhost ~]# systemctl restart vsftpd.service
[root@station ~]# lftp 172.25.254.252
lftp 172.25.254.252:/> rm -fr /pub/passwd
rm ok, `/pub/passwd' removed #已删除
更改内容:如改为YES
测试结果:可以删除
9.匿名用户建立目录
anon_mkdir_write_enable=YES|NO #匿名用户是否可以建立目录
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anon_mkdir_write_enable=YES #匿名用户可以建立目录
[root@localhost ~]# systemctl restart vsftpd.service
[root@station ~]# lftp 172.25.254.252
lftp 172.25.254.252:~> mkdir /pub/linux
mkdir ok, `/pub/linux' created #已建立
lftp 172.25.254.252:/> ls /pub/
drwx------ 2 14 50 6 May 09 10:25 linux
更改内容:如改为YES
结果:可以建立
10.##限制用户上传速率
anon_max_rate=102400 #限制匿名用户下载上传速率,单位为字节
[root@station ~]# lftp 172.25.254.252 -u linux
Password:
lftp linux@172.25.254.252:~> exit
[root@station ~]# lftp 172.25.254.252
lftp 172.25.254.252:~> ls
-rw-r--r-- 1 0 0 0 May 09 04:17 file1
drwxrwxr-x 2 0 50 6 May 09 10:31 pub
lftp 172.25.254.252:/> cd/pub/
lftp 172.25.254.252:/pub> put /mnt/studentfile #上传
2097152000 bytes transferred in 138 seconds (14.52M/s) #每秒14M
[root@localhost userhome]# vim /etc/vsftpd/vsftpd.conf
anon_max_rate=102400 #限制到每秒100K
[root@localhost userhome]# systemctl restart vsftpd.service
[root@station ~]# lftp 172.25.254.252
lftp 172.25.254.252:~> cd /pub/
lftp 172.25.254.252:/pub> put /mnt/studentfile #再上传,结果如下截图
限速之前:
更改内容:
结果:
11.用户上传文件的umask值
local_umask=077 #本地用户
anon_umask=022 #匿名用户
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
local_umask=077 #本地用户改为077
anon_umask=022 #匿名用户改为022
[root@localhost ~]# systemctl restart vsftpd.service
[root@station ~]# lftp 172.25.254.252
lftp 172.25.254.252:~> cd /pub/
lftp 172.25.254.252:/pub> put /etc/passwd #匿名用户上传
2348 bytes transferred
lftp 172.25.254.252:/pub> ls
drwx------ 2 14 50 6 May 09 10:25 linux
-rw-r--r-- 1 14 50 2348 May 09 10:30 passwd #权限为644
lftp linux@172.25.254.252:~> exit
[root@station ~]# lftp 172.25.254.252 -u linux
Password:
lftp linux@172.25.254.252:~> ls
lftp linux@172.25.254.252:~> put /etc/group #本地用户上传
986 bytes transferred
lftp linux@172.25.254.252:~> ls
-rw------- 1 1001 1001 986 May 09 10:41 group #权限为600
更改内容:本地用户改为077,匿名用户改为022
结果:
匿名用户
本地用户
12.限制本地用户浏览目录
chroot_local_user=YES
chmod u-w /home/*
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
chroot_local_user=YES
[root@localhost ~]# systemctl restart vsftpd.service
[root@localhost ~]# chmod u-w /home/*
[root@station ~]# lftp 172.25.254.252 -u student
Password:
lftp student@172.25.254.252:~> cd /
cd ok, cwd=/
lftp student@172.25.254.252:/> ls
-rw-r--r-- 1 1000 1000 2348 May 09 10:32 passwd #不能出家目录
lftp student@172.25.254.252:/> exit
[root@station ~]# lftp 172.25.254.252 -u linux
Password:
lftp linux@172.25.254.252:~> cd /
cd ok, cwd=/
lftp linux@172.25.254.252:/> ls
-rw------- 1 1001 1001 986 May 09 10:41 group #不能出家目录
更改前:
更改内容:
更改后:
13.用户黑名单
chroot_local_user=NO #NO默认其他用户可以,名单的用户不可以
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
vim /etc/vsftpd/chroot_list #编辑名单
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
chroot_local_user=NO #NO默认其他用户可以,名单的用户不可以
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
[root@localhost ~]# systemctl restart vsftpd.service
[root@localhost ~]# vim /etc/vsftpd/chroot_list
student #添加student
[root@station ~]# lftp 172.25.254.252 -u linux #登录linux
Password:
lftp linux@172.25.254.252:~> cd / #切换到/
cd ok, cwd=/
lftp linux@172.25.254.252:/> 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 19 0 0 2980 May 09 08:44 dev
drwxr-xr-x 134 0 0 8192 May 09 10:38 etc
drwxr-xr-x 2 0 0 17 May 09 04:47 ftpdir
drwxr-xr-x 4 0 0 32 May 09 10:37 home
lrwxrwxrwx 1 0 0 7 May 07 2014 lib -> usr/lib
lrwxrwxrwx 1 0 0 9 May 07 2014 lib64 -> usr/lib64
drwxr-xr-x 2 0 0 6 Mar 13 2014 media
drwxr-xr-x 2 0 0 6 Mar 13 2014 mnt
drwxr-xr-x 3 0 0 15 Jul 10 2014 opt
dr-xr-xr-x 133 0 0 0 May 09 08:43 proc
dr-xr-x--- 15 0 0 4096 May 09 11:29 root
drwxr-xr-x 34 0 0 1100 May 09 08:44 run
lrwxrwxrwx 1 0 0 8 May 07 2014 sbin -> usr/sbin
drwxr-xr-x 2 0 0 6 Mar 13 2014 srv
dr-xr-xr-x 13 0 0 0 May 09 08:43 sys
drwxrwxrwt 16 0 0 4096 May 09 10:56 tmp
drwxr-xr-x 13 0 0 4096 May 07 2014 usr
drwxr-xr-x 23 0 0 4096 May 09 08:43 var
#可以出家目录
[root@station ~]# lftp 172.25.254.252 -u student #登录student
Password:
lftp student@172.25.254.252:~> cd / #切换到/
cd ok, cwd=/
lftp student@172.25.254.252:/> ls
-rw-r--r-- 1 1000 1000 2348 May 09 10:32 passwd #不能出家目录
更改内容:
结果:linux可以出家目录
student不可以
14.用户白名单
chroot_local_user=YES #YES默认其他用户不可以,名单用户可以
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
vim /etc/vsftpd/chroot_list #编辑名单
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
chroot_local_user=YES #YES默认其他用户不可以,名单用户可以
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
[root@localhost ~]# systemctl restart vsftpd.service
[root@localhost ~]# vim /etc/vsftpd/chroot_list #编辑名单
student #添加student
[root@station ~]# lftp 172.25.254.252 -u linux #登录linux
Password:
lftp linux@172.25.254.252:~> cd /
cd ok, cwd=/
lftp linux@172.25.254.252:/> ls
-rw------- 1 1001 1001 986 May 09 10:41 group #不能出家目录
lftp linux@172.25.254.252:/> exit
[root@station ~]# lftp 172.25.254.252 -u student #登录student
Password:
lftp student@172.25.254.252:~> cd /
cd ok, cwd=/
lftp student@172.25.254.252:/> 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 19 0 0 2980 May 09 08:44 dev
drwxr-xr-x 134 0 0 8192 May 09 10:38 etc
drwxr-xr-x 2 0 0 17 May 09 04:47 ftpdir
drwxr-xr-x 4 0 0 32 May 09 10:37 home
lrwxrwxrwx 1 0 0 7 May 07 2014 lib -> usr/lib
lrwxrwxrwx 1 0 0 9 May 07 2014 lib64 -> usr/lib64
drwxr-xr-x 2 0 0 6 Mar 13 2014 media
drwxr-xr-x 2 0 0 6 Mar 13 2014 mnt
drwxr-xr-x 3 0 0 15 Jul 10 2014 opt
dr-xr-xr-x 132 0 0 0 May 09 08:43 proc
dr-xr-x--- 15 0 0 4096 May 09 11:36 root
drwxr-xr-x 34 0 0 1100 May 09 08:44 run
lrwxrwxrwx 1 0 0 8 May 07 2014 sbin -> usr/sbin
drwxr-xr-x 2 0 0 6 Mar 13 2014 srv
dr-xr-xr-x 13 0 0 0 May 09 08:43 sys
drwxrwxrwt 16 0 0 4096 May 09 10:56 tmp
drwxr-xr-x 13 0 0 4096 May 07 2014 usr
drwxr-xr-x 23 0 0 4096 May 09 08:43 var
#可以出家目录
更改内容
结果:linux不能出家目录
student可以
15.限制本地用户登录
注释掉之前的
1)vim /etc/vsftpd/ftpusers #用户黑名单,优先级高
[root@localhost ~]# vim /etc/vsftpd/ftpusers
linux
[root@station ~]# lftp 172.25.254.252 -u linux
Password:
lftp linux@172.25.254.252:~> ls
ls: Login failed: 530 Login incorrect. #不能登录
lftp linux@172.25.254.252:~> exit
[root@station ~]# lftp 172.25.254.252 -u student
Password:
lftp student@172.25.254.252:~> ls
-rw-r--r-- 1 1000 1000 2348 May 09 10:32 passwd #可以登录
lftp student@172.25.254.252:~> exit
添加linux
2)vim /etc/vsftpd/user_list #临时黑名单
[root@localhost ~]# vim /etc/vsftpd/ftpusers
student #添加student
[root@station ~]# lftp 172.25.254.252 -u student
Password:
lftp student@172.25.254.252:~> ls
ls: Login failed: 530 Permission denied. #不能登录
lftp student@172.25.254.252:~> lftp 172.25.254.252 -u linux
Password:
lftp linux@172.25.254.252:~> ls
-rw------- 1 1001 1001 986 May 09 10:41 group #可以登录
添加student
结果:
3)用户白名单
vim /etc/vsftpd/vsftpd.conf
userlist_enable=YES
userlist_deny=NO #名单变为白名单
vim /etc/vsftpd/user_list
写入用户
白名单与黑名单有相同用户以/etc/vsftpd/ftpusers优先
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
userlist_enable=YES
userlist_deny=NO #名单变为白名单
[root@localhost ~]# systemctl restart vsftpd.service
[root@localhost ~]# vim /etc/vsftpd/user_list
student #加入student
[root@station ~]# lftp 172.25.254.252 -u linux
Password:
lftp linux@172.25.254.252:~> ls
ls: Login failed: 530 Permission denied. #不能登录
lftp linux@172.25.254.252:~> exit
[root@station ~]# lftp 172.25.254.252 -u student
Password:
lftp student@172.25.254.252:~> ls
-rw-r--r-- 1 1000 1000 2348 May 09 10:32 passwd #可以登录
[root@localhost ~]# vim /etc/vsftpd/ftpusers
student #与白名单填入同一用户
[root@station ~]# lftp 172.25.254.252 -u student
Password:
lftp student@172.25.254.252:~> ls
ls: Login failed: 530 Login incorrect. #不能登录
更改内容:
结果:
与白名单有相同用户:
结果:以/etc/vsftpd/ftpusers优先
16.虚拟用户建立
先删掉之前的黑名单
[root@localhost ~]# cd /etc/vsftpd/
[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]# vim /etc/pam.d/ftpuser
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
pam_service_name=ftpuser
guest_enable=YES
guest_username=ftp #虚拟帐号身份指定,用户存在即可
[root@localhost ~]# systemctl restart vsftpd.service
[root@station ~]# lftp 172.25.254.252 -u user1
Password:
lftp user1@172.25.254.252:~> ls
-rw-r--r-- 1 0 0 0 May 09 04:17 file1
drwxrwxr-x 2 0 50 6 May 09 10:31 pub
vim /etc/vsftpd/userdb
vim /etc/vsftpd/vsftpd.conf
结果:
17.虚拟帐号家目录独立设定
vim /etc/vsftpd/vsftpd.conf
local_root=/userhome/$USER #设定独立家目录
user_sub_token=$USER
[root@localhost vsftpd]# mkdir /userhome #建立家目录
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
local_root=/userhome #设置家目录
[root@localhost vsftpd]# systemctl restart vsftpd.service
[root@localhost vsftpd]# mkdir /userhome/pub
[root@station ~]# lftp 172.25.254.252 -u user1
Password:
lftp user1@172.25.254.252:~> ls
drwxr-xr-x 2 0 0 6 May 09 12:53 pub
lftp user1@172.25.254.252:/> exit
[root@station ~]# lftp 172.25.254.252 -u user2
Password:
lftp user2@172.25.254.252:~> ls
drwxr-xr-x 2 0 0 6 May 09 12:53 pub
lftp user2@172.25.254.252:/> exit
[root@station ~]# lftp 172.25.254.252 -u user3
Password:
lftp user3@172.25.254.252:~> ls
drwxr-xr-x 2 0 0 6 May 09 12:53 pub
lftp user3@172.25.254.252:/> exit
#user1 user2 user3的家目录为同一个
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
local_root=/userhome/$USER #设定独立家目录
user_sub_token=$USER
[root@localhost vsftpd]# systemctl restart vsftpd.service
[root@localhost vsftpd]# mkdir /userhome/user{1..3}
[root@localhost vsftpd]# touch /userhome/user1/file1
[root@localhost vsftpd]# touch /userhome/user2/file2
[root@localhost vsftpd]# touch /userhome/user3/file3
[root@station ~]# lftp 172.25.254.252 -u user1
Password:
lftp user1@172.25.254.252:~> ls
-rw-r--r-- 1 0 0 0 May 09 12:56 file1
lftp user1@172.25.254.252:/> exit
[root@station ~]# lftp 172.25.254.252 -u user2
Password:
lftp user2@172.25.254.252:~> ls
-rw-r--r-- 1 0 0 0 May 09 12:56 file2
lftp user2@172.25.254.252:/> exit
[root@station ~]# lftp 172.25.254.252 -u user3
Password:
lftp user3@172.25.254.252:~> ls
-rw-r--r-- 1 0 0 0 May 09 12:56 file3
#可看到它们家目录是独立的
公共家目录:
更改内容:
结果:
设置独立家目录:
更改内容:
结果:
18.虚拟帐号配置独立
虚拟用户用的是匿名用户权限,先把匿名用户权限注释掉
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/conf_dir
vim /etc/vsftpd/conf_dir/要被赋予权限的用户
写入要赋予的权限
[root@localhost userhome]# mkdir user{1..3}/pub #建立目录
[root@localhost userhome]# chgrp ftp user{1..3}/pub #更改组
[root@localhost userhome]# chmod 775 user{1..3}/pub #更改权限
[root@localhost userhome]# mkdir /etc/vsftpd/conf_dir
[root@localhost userhome]# vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/conf_di #独立配置
[root@localhost userhome]# systemctl restart vsftpd.service
[root@localhost userhome]# vim /etc/vsftpd/conf_dir/user1 #user1为被赋予权限的用户
anon_upload_enable=YES #允许用户上传文件
[root@station ~]# lftp 172.25.254.252 -u user1
Password:
lftp user1@172.25.254.252:/> cd /pub/
lftp user1@172.25.254.252:/pub> put /etc/passwd
2348 bytes transferred #已上传
lftp user1@172.25.254.252:/pub> ls
-rw-r--r-- 1 14 50 2348 May 09 13:24 passwd
lftp user1@172.25.254.252:/pub> rm -fr passwd
lftp user1@172.25.254.252:/pub> ls
-rw-r--r-- 1 14 50 2348 May 09 13:24 passwd #没有添加删除权限,不能删除
更改内容:
被赋予权限的用户:如user1
要赋予的权限:如上传文件
结果:只能上传,不能删除,要删除需要再添加删除的权限