公司有个落地页需要我们放在阿里云上,但是他们经常需要改动,我们每次都帮他们发布有些繁琐,索性弄一个FTP服务让他们自个上传去,按照百度的各种教程搭建了,虽然步骤简单但是过程中还是有不少小坑,看了好多个帖子才弄好了,国际惯例,记录学习过程;
一、安装:
直接使用yum方式安装:
1 2 3 4 5
| yum install vsftpd
相关操作: # 启动|停止|重启 service vsftpd start|stop|restart
|
添加用户:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 一般出于安全考虑,ftp用户是不允许登陆系统的,且只能访问自己主目录下的文件
# 先创建ftp根目录 mkdir -p /home/ftp # 添加用户并指定目录和用户组,设置为不可登陆系统 useradd -d /home/ftp/guitu -g ftp -s /sbin/nologin guitu
# -d 命令是指定用户主目录 # -g 是指定用户分组 # -s /sbin/nologin 禁止用户登陆系统 # guitu 新建ftp用户的用户名。
# 为用户 guitu 设置密码,按提示操作输入两次密码: passwd guitu
|
二、配置:
重启vsftpd服务,这时候使用ftp工具应该就能连接上了(比如FIleZilla),别忘记防火墙放行端口,ftp默认端口是21;
但是连上之后会发现刚添加的用户guitu能够跳到上一层目录,访问系统中其他的目录,guitu作为ftp用户组的成员,此时对于其他目录guitu是拥有着ftp用户组的权限的,这时候需要限制guitu只能访问其自身根目录;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
可以组合成四种情况: 1. chroot_local_user=YES chroot_list_enable=YES 所有用户都被限制在其根目录下,但chroot_list_file指定的用户例外,不受限制,相当于白名单模式 2. chroot_local_user=YES chroot_list_enable=NO 不使用chroot_list_file文件,所有用户都被限制在其根目录下,没有任何用户例外 3. chroot_local_user=NO chroot_list_enable=YES 所有用户都不被限制其根目录下,但chroot_list_file指定的用户例外,收到限制,相当于黑名单模式 4. chroot_local_user=NO chroot_list_enable=NO 不使用chroot_list_file文件,所有用户都不被限制
一般默认使用第一种就行了,如果需要按照自己的需求配置
|
还有一些配置是控制哪些用户能够访问ftp的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO userlist_file=/etc/vsftpd/user_list
|
三、遇到的问题
前面的两个问题弄清楚之后,ftp的权限控制思路就比较清晰了,但是,这里特别强调,我在这里折腾了不少时间;
从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误:
1 2 3 4 5 6
| 响应: 220 (vsFTPd 3.0.2) 命令: USER guitu 响应: 331 Please specify the password. 命令: PASS ***** 响应: 500 OOPS: vsftpd: refusing to run with writable root inside chroot() 错误: 严重错误: 无法连接到服务器
|
意思是不能拥有根目录的写权限,要解决有两个办法
去除用户根目录的写权限,在根目录下再建立一个文件夹,赋予用户guitu写权限
1 2 3 4 5 6
| # 去除用户根目录写权限 chmod -w /home/ftp/guitu # 在根目录下新建文件夹并授权用户和组 mkdir -p /home/ftp/guitu/writefolder chown -R guitu:ftp /home/ftp/guitu/writefolder # 这里的的用户组和文件夹根据自己的实际情况修改
|
在vsftpd的配置文件添加一行配置
1 2
| allow_writeable_chroot=YES
|
推荐使用第二种方式,简单快捷,教程结束,应该算比较完善了;
四、vsftpd.conf配置文件详解
[引用:https://www.cnblogs.com/xiaojiaocx/p/6410015.html]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| anonymous_enable=NO #禁止匿名用户登录
local_enable=YES #允许本地用户登录ftp服务器 write_enable=YES #允许用户想服务器执行写入操作 local_umask=022 #设置服务器上本地用户创建文件的权限掩码
dirmessage_enable=YES #启用目录提示消息
xferlog_enable=YES #启用日志文件功能,记录于/var/log/xferlog xferlog_std_format=YES #启用标准的日志格式
connect_from_port_20=YES #主动模式下,是否启用默认的20端口进行数据传输
listen=NO #vsftpd不是以独立的服务运行,要受到xinetd服务的管控,功能上会受到限制 listen_ipv6=YES
chroot_list_enable=YES #开启限制用户在主目录的功能 chroot_list_file=/etc/vsftpd/chroot_list #在chroot_list文件中加入你要限制的用户名,一行一个用户
pam_service_name=vsftpd #虚拟用户使用PAM认证方式
userlist_enable=YES #是否启用userlist_file文件 userlist_file=/etc/vsftpd/user_list #允许user_list文件中加入的用户访问ftp服务器
tcp_wrappers=YES #vsftpd服务器检查/etc/hosts.allow和/etc/hosts.deny中的设置,来决定请求连接的主机,是否允许访问该FTP服务器
allow_writeable_chroot=YES #去除用户主目录的写权限
|