许久没有在服务器上安装过FTP了,现在代码提交都偏向于svn版本库管理;今天遇到金主说需要给前端配置个FTP上传文件。配置过程中遇到些问题,记录下过程。
yum安装vsftpd
vsftpd 是 linux服务器上的FTP服务器程序(相当服务端)
ftp 是 linux服务器上的FTP服务(相当客户端)
在安装前需提前确认是否已经安装了vsftpd 命令如下:
rpm -qa|grep vsftpd
另外,默认的配置文件路径为: /etc/vsftpd/vsftpd.conf
安装命令:
yum install -y vsftpd
开启 重启 关闭命令:
systemctl start vsftpd
systemctl restart vsftpd
systemctl stop vsftpd
这里建议先用客户端匿名访问下FTP,是否已经安装成功。
因为这里服务可能存在防火墙,需要开放21端口
创建FTP使用的用户
useradd -s /sbin/nologin -d /var/www/html ftpuser
passwd ftpuser
参数说明 :
useradd
-d:指定用户登入时的主目录,替换系统默认值/home/<用户名>
-s:指定用户登入后所使用的shell。默认值为/bin/bash。
参考地址:# linux命令useradd添加用户详解
passwd 是修改用户密码
相关命令:
usermod -s /sbin/nologin ftpuser 修改用户登入后所使用的shell
usermod -d /var/www/html ftpuser 修改用户登入时的主目录
userdel -r ftpuser 删除指定用户 -r 参数是指删除用户全部文件
配置FTP服务
配置文件路径:
vim /etc/vsftpd/vsftpd.conf
这里要关注的几个配置项
1.不允许匿名访问
anonymous_enable=NO
2.是否允许使用本地帐户进行FTP用户登录验证
local_enable=YES/NO
本地账号和虚拟账号区别主要在于能否登录系统,账号有权限可以登录操作系统的为本地账号,而不能登录操作系统只能使用某些服务登录的为虚拟系统。
- userlist_enable , userlist_deny 和 名单文件 /etc/vsftpd/user_list
userlist_enable=YES
userlist_deny=NO
当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入;
当userlist_enable=YES时,userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入);
参考:vsftpd中关于ftpusers和user_list两个文件的说明以及vsftpd.conf中的userlist_enable和userlist_deny两个配置项的解释
按上面得设置,则需要在名单文件 /etc/vsftpd/user_list中添加ftpuser(一行一个用户名),ftpuser才可以登陆。
4.用户不能离开主目录
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user
是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)
chroot_list_enable
是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用)
chroot_list_file=/etc/vsftpd/chroot_list
是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值。
参考:vsftpd 配置:chroot_local_user与chroot_list_enable详解
按上面得设置,则需要在名单文件 /etc/vsftpd/chroot_list中添加ftpuser(一行一个用户名),ftpuser才会被现在在主目录中,不允许离开。
5.用户的主目录写权限
从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。
要修复这个错误,你可以在vsftpd的配置文件中增加下列项:
allow_writeable_chroot=YES
还有一种方法:可以用命令 chmod a-w /var/www/html 去除用户主目录的写权限
6.基本配置以上选项即可了,也可以查看详细配置介绍
常见问题
1.500 OOPS: vsftpd: refusing to run with writable root inside chroot() 错误,解决请参考配置第5项;
2.530 Login incorrect错误 :
- 用户没权限,先查看 userlist_enable userlist_deny 得设置也就是配置第3项;
- 系统环境默认/etc/shells文件有没有/sbin/nologin这个项,没有请添加上,因为这里配置这一项为用户登陆后使用的shell;
- 确保FTP用户密码正确,可以修改密码后测试;
- 服务器防火墙需要开放21端口(阿里云主机记得控制台也需要开放端口);
- Selinux原因,可以临时关闭setenforce 0,发现可以正常连接了,修改/etc/sysconfig/selinux文件可以永久地禁用它。将文件中 SELINUX=enforcing 修改为:SELINUX=disabled;