平台上的程序,名为vsftpd(ver secure ftp daemon,⾮常安全的FTP守护进程)。
【准备工作】
1、安装vsftpd工具
[root@junwu_server ~]# yum install -y vsftpd
2、关闭防火墙规则
[root@junwu_server ~]# iptables -F
3、安装ftp命令行
[root@junwu_server ~]# yum install ftp -y
【一、匿名用户模式】
1、修改/etc/vsftpd/vsftpd.conf 配置文件如下
[root@junwu_server ~]# grep '^anon' /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
2、启动服务并设置开机自启
[root@junwu_server ~]# systemctl restart vsftpd
[root@junwu_server ~]# systemctl enable vsftpd
3、另一台主机client按照准备工作操作后就可以使用ftp命令连接到10.0.0.10的ftp服务器(默认目录/var/ftp/)
[root@junwu_server ~]# cd /var/ftp
[root@junwu_server ftp]# ls
pub
4、使用ftp客户端连接(默认账号anonymous,密码为空)
[root@junwu_client ~]# ftp 10.0.0.10
Connected to 10.0.0.10 (10.0.0.10).
220 (vsFTPd 3.0.2)
Name (10.0.0.10:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,0,0,10,152,45).
150 Here comes the directory listing.
drwxr-xr-x 4 14 50 32 Nov 22 17:01 pub
226 Directory send OK.
ftp> cd pub #切换工作目录
250 Directory successfully changed.
ftp> mkdir jkhf #发现在这⾥创建⽂件夹报错了
550 Create directory operation failed.
注意:使用匿名用户登录ftp,默认访问的是/var/ftp文件夹,而默认此文件夹是属于root主、组,因此ftp无法写入内容,需要修改文件夹的user、group
[root@junwu_server ftp]# ll
total 0
drwxr-xr-x. 5 root root 45 Nov 22 12:06 pub
[root@junwu_server ftp]# chown -Rf ftp.ftp /var/ftp/pub/ ##R递归执行、f强制修改
[root@junwu_server ftp]# ll
total 0
drwxr-xr-x. 5 ftp ftp 45 Nov 22 12:06 pub
5、ftp服务器上检查文件是否写入
[root@junwu_server pub]# ls
fsjkf ghdsf jkfjk jkhkshhsjfhkjf
【本地用户模式】
1、修改配置文件/etc/vsftpd/vsftpd.conf
anonymous_enable=NO #关闭匿名⽤户模式
local_enable=YES #开启本地⽤户模式
write_enable=YES #设置可写权限
local_umask=022 #⽂件umask值
userlist_enable=YES #启⽤【禁⽌登录的⽤户名单】⽂件名是,ftpusers
userlist_deny=YES #开启禁⽌登录名单
2、重启vsftpd服务,加载配置
systemctl restart vsftpd
systemctl enable vsftpd
3、在当前服务器上创建一个本地用户 junwu
[root@junwu_server ~]# grep 'junwu' /etc/passwd
junwu:x:1000:1000::/home/junwu:/bin/bash
4、客户端使用此用户连接ftp,默认访问该用户的家目录也就是/home/junwu文件夹中的内容
[root@junwu_client ~]# ftp 10.0.0.10
Connected to 10.0.0.10 (10.0.0.10).
220 (vsFTPd 3.0.2)
Name (10.0.0.10:root): junwu
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir 到此一游
257 "/home/junwu/到此一游" created
5、查看服务器
[root@junwu_server junwu]# ls
到此一游
**补充:ftpusers文件是vsftpd禁止登录的用户名单
[root@junwu_server vsftpd]# cat ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
virtual_luo
【虚拟用户模式】
虚拟用户模式相比较匿名用户、本地用户而言,是更为安全的。
1、安装Berkeley DB工具
yum install db4 db4-utils -y
2、创建用于进行FTP认证的用户数据库,奇数行账户名、偶数行密码
[root@junwu_server ~]# cat /etc/vsftpd/ftp_user.txt
peng
123456
zhiqiang
123456
3、很显然,这样的账户密码以明文存储很不安全,更重要的是vsftpd无法加载该格式的数据,因此得用到刚开始安装的Berkeley DB工具,使用db_load命令对ftp_user.txt文件进行加密,且设置权限使得普通用户无权限查阅
[root@junwu_server ~]# db_load -T -t hash -f /etc/vsftpd/ftp_user.txt /etc/vsftpd/ftp_user.db
[root@junwu_server ~]# file /etc/vsftpd/ftp_user.db
/etc/vsftpd/ftp_user.db: Berkeley DB (Hash, version 9, native byte-order)
4、降低文件权限
[root@junwu_server vsftpd]# ll ftp_user.db
-rw-r--r-- 1 root root 12288 Nov 23 00:46 ftp_user.db
[root@junwu_server vsftpd]# chmod 600 ftp_user.db
[root@junwu_server vsftpd]# ll ftp_user.db
-rw------- 1 root root 12288 Nov 23 00:46 ftp_user.db
5、创建当虚拟用户登录后默认访问的文件夹路径/var/ftpdirs/,且和本地用户做一个映射关系,防止虚拟用户登录后,创建了文件夹,但是系统没有此用户权限报错问题
[root@junwu_server vsftpd]# useradd -d /var/ftpdirs/ -s /sbin/nologin virtual_junwu
#检查ftpdirs的权限
[root@junwu_server var]# ll -d /var/ftpdirs/
drwx------ 2 virtual_junwu virtual_junwu 62 Nov 23 00:51 /var/ftpdirs/
#更改权限
[root@junwu_server var]# chmod -Rf 755 /var/ftpdirs/
[root@junwu_server var]# ll -d /var/ftpdirs/
drwxr-xr-x 2 virtual_junwu virtual_junwu 62 Nov 23 00:51 /var/ftpdirs
6、此时需要创建支持虚拟用户的PAM文件,PAM是一组安全机制的模块,编辑认证文件/etc/pam.d/vsftpd,指定db_load生成的文件路径,添加如下两行:(注意:一定要将其它行注释掉,否则客户端登录用户名会报错)
auth required pam_userdb.so db=/etc/vsftpd/ftp_user
account required pam_userdb.so db=/etc/vsftpd/ftp_user
[root@junwu_server ~]# cat /etc/pam.d/vsftpd
#%PAM-1.0
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth
auth required pam_userdb.so db=/etc/vsftpd/ftp_user
account required pam_userdb.so db=/etc/vsftpd/ftp_user
7、最后修改vsftpd配置文件
[root@junwu_server ~]# grep -Ev '^$|^#' /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
anon_other_write_enable=YES
guest_enable=YES
guest_username=virtual_junwu
allow_writeable_chroot=YES
user_config_dir=/etc/vsftpd/virtual_user_dir
8、针对不通的,配置不通的权限
[root@junwu_server virtual_user_dir]# cat peng
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@junwu_server virtual_user_dir]# cat zhiqiang
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
9、重启vsftpd服务,注意配置文件不要有空格或者书写错误,否则重启会报错
[root@junwu_server ~]# systemctl restart vsftpd
10、客户端登录用户peng、zhiqiang
##登录peng用户
[root@junwu_client ~]# ftp 10.0.0.10
Connected to 10.0.0.10 (10.0.0.10).
220 (vsFTPd 3.0.2)
Name (10.0.0.10:root): peng
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,0,0,10,43,25).
150 Here comes the directory listing.
226 Directory send OK.
ftp> mkdir 啦啦啦我是卖报的小行家
257 "/啦啦啦我是卖报的小行家" created
##登录zhiqiang用户创建文件显示权限不够,这是什么原因呢?
[root@junwu_client ~]# ftp 10.0.0.10
Connected to 10.0.0.10 (10.0.0.10).
220 (vsFTPd 3.0.2)
Name (10.0.0.10:root): zhiqiang
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir 学习使我快乐
550 Permission denied.
##因为虚拟用户zhiqiang的的权限文件夹中设置禁止写入
[root@junwu_server virtual_user_dir]# cat zhiqiang
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
##到服务器指定虚拟用户的家目录查看刚刚创建的文件
[root@junwu_server ftpdirs]# cd /var/ftpdirs/
[root@junwu_server ftpdirs]# ls
啦啦啦我是卖报的小行家
只有经历过生活的苦难 才会更加努力去生活 自己梦想的一切 更加需要自己脚踏实地的去践行 结果未必尽如人意 但是路途中的努力 一定比结果更加美丽 ----by ljw