vsftpd服务的三种搭建模式
FTP是⼀种传输协议,实现了这种协议的⼯具,有⼀款Linux平台上的程序,名为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