运维都知道但凡能用其他工具代替ftp的绝对不会用ftp,没办法项目三方必须要用到ftp,所以就搭一个,过程就省略了,把配置贴出来,以及花了我几个小时踩的坑发出来给有需要的人
环境:
os:centos7.9,yum源是aliyun的
安装方式:yum
# yum -y install vsftpd
配置,这配置是在别人那里抄来的,谁的忘记了,主要是他的注释写的很详细,所以解决了我懒的问题
#是否允许匿名,默认no
anonymous_enable=NO
#这个设定值必须要为YES 时,在/etc/passwd内的账号才能以实体用户的方式登入我们的vsftpd主机
local_enable=YES
#具有写权限
write_enable=YES
#本地用户创建文件或目录的掩码
local_umask=022
#当dirmessage_enable=YES时,可以设定这个项目来让vsftpd寻找该档案来显示讯息!您也可以设定其它档名!
dirmessage_enable=YES
#当设定为YES时,使用者上传与下载日志都会被纪录起来。记录日志与下一个xferlog_file设定选项有关
xferlog_enable=YESxferlog_std_format=YES
#上传与下载日志存放路径
xferlog_file=/var/log/xferlog
#开启20端口
connect_from_port_20=YES
#关于系统安全的设定值:
#ascii_download_enable=YES(NO)
#如果设定为YES ,那么 client 就可以使用 ASCII 格式下载档案。
#一般来说,由于启动了这个设定项目可能会导致DoS 的攻击,因此预设是NO。
#ascii_upload_enable=YES(NO)
#与上一个设定类似的,只是这个设定针对上传而言!预设是NO。
ascii_upload_enable=NO
ascii_download_enable=NO
#通过搭配能实现以下几种效果:
#①当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。
#②当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。
#③当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。
#④当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#这个是pam模块的名称,我们放置在/etc/pam.d/vsftpd
pam_service_name=vsftpd
#当然我们都习惯支持TCP Wrappers的啦!
tcp_wrappers=YES
#不添加下面这个会报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES
#ftp的端口号
listen_port=21
#启动被动式联机(passivemode)
pasv_enable=YES
#上面两个是与passive mode 使用的 port number 有关,如果您想要使用65400到65410 这 11 个 port 来进行被动式资料的连接,可以这样设定
pasv_min_port=65400
pasv_max_port=65410
#FTP访问目录
local_root=/data/ftp/
如果你这么配置的话直接起服务是没问题的,就是登录的时候会出现类似这样的问题
Password:
530 Login incorrect.
Login failed.
如果你看日志会有类似这样的
Dec 23 20:58:01 centos polkitd[108766]: Registered Authentication Agent for unix-process:44380:252086848 (system bus name :1.178214 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8)
Dec 23 20:58:01 centos polkitd[108766]: Unregistered Authentication Agent for unix-process:44380:252086848 (system bus name :1.178214, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)
大概意思就是用户没有通过认证,看了有很多解决办法,但我这里测试有效的就一种,出现这种情况的原因是我创建的ftp用户指定了shell为nologin
ftpuser:x:1002:1002::/data/ftp/:/sbin/nologin
而在vsftp的配置文件中有一个配置是使用pam来认证用户,该pam模块叫vsftpd
pam_service_name=vsftpd
有的说把这个注释掉,但我测试还是不行
刚才说到了创建ftp用户时指定了shell是不能登录的nologin,而vsftpd的pam模块配置是这样的:
[root@centos vsftpd]# 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 required pam_nologin.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
原因就是注释掉的那行:auth required pam_shells.so 他所使用的认证文件是pam_shells.so,而这个是正常可以登录的用户,所以把这个改成pam_nologin.so即可