linux系统安装vsftpd-最佳实践与遇到的坑

linux系统安装vsftpd-最佳实践与遇到的坑

记录一下自己遇到的坑,以后再安装的时候看一下,大家没搭过vsfptd的也可以看一下哈!需要马上安装的先看最佳实践,如果遇到问题了去下面找找,要是问题相同的话就解决试试看!

一、最佳实践

1.安装vsftpd

$ yum -y install vsftpd

2.关闭防火墙和SELinux和设置开机自启

关闭防火墙和禁止防火墙开机自启:

$ systemctl stop firewalld.service
$ systemctl disable firewalld.service

关闭SELinux和使SELinux失效

设置文件/etc/sysconfig/selinux(永久生效)

SELINUX=disabled

执行命令(临时生效)

$ setenforce 0

设置vsftpd开机自启:

$ chkconfig vsftpd on

3.添加用户(可以不添加,用原来的用户)

添加用户,用户的主目录为/home/ftp1

$ useradd ftp1

赋予用户密码(需输入两遍密码)

$ passwd ftp1

4.修改/etc/vsftpd/vsftpd.conf(参考2.13)若启动失败,则查看文件是否后空格和空行,复制是否完全!!!一定要仔细确认!

5.创建对应的文件和文件夹

$ touch /var/log/vsftpd.log
$ mkdir /etc/vsftpd/vuser_conf
$ touch /etc/vsftpd/chroot_list

6.启动
$ service vsftpd start

7.其他配置事项

  1. chroot_list 里面放可以【/】访问权限的用户,否则都是家访问权限
  2. ftpusers 里面放的是拒绝访问的用户
  3. user_list 里面放的是用户组,具体是白名单用户还是黑名单用户需要看userlist相关配置项,后面有说

二、过程和资料记录

1.网络一定要通,先通过ping测试网络是否通畅
2.防火墙关掉,有需求的话测通之后再打开

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

3.生成数据库需要db_load命令,需要安装一下

yum install db4*

4./etc/pam.d/vsftpd文件是配置客户端验证的文件,其中,db后面的是需要改的值,要写上通过db_load命令生成的.db文件的位置

auth       required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account    required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd

5.最好建立一个ftp用户,用来当虚拟用户的宿主用户(访问端口用户)

mkdir  /ftpdir
useradd  -d  /ftpdir vuser
chown  vuser.vuser  /ftpdir
usermod -s /sbin/nologin vuser

6.修改etc/vsftpd/vsftpd.conf
pam_service_name:就是vsftpd加载的pam文件,在上面说过,里面装载了db_load生成的账号和密码

    guest_enable=YES              ####激活虚拟账户  
    guest_username=vuser           ####把虚拟账户绑定为系统账户vuser  
    pam_service_name=vsftpd        ####使用PAM验证  
    user_config_dir=/etc/vsftpd/vuser   ####各个虚拟用户对应的个性配置文件夹

7.登录权限和目录权限

登录权限:

  1. local_enable 本地用户登录权限
  2. ftpusers文件 拒绝访问ftp的用户
  3. userlist_enable 启用user_list文件的功能
  4. userlist_deny 确定user_list的功能是黑名单还是白名单
  5. user_list文件 加入黑/白名单的用户列表

3、4要一起用,3为NO时,userlist_deny属性和user_list文件无效(注:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous)

例子:
vsftpd.conf:

local_enable=YES
userlist_enable=YES
userlist_deny=YES

ftpusers:

# Users that are not allowed to login via ftp
root
bin

user_list:

root
bin

目录权限

  1. chroot_local_user 把本地用户限制在自己主目录下
  2. chroot_list_enable 是否启用例外列表
  3. chroot_list_file 例外用户列表文件

例子 :
vsftpd.conf:

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

7.启动相关

启动、关闭、重启、状态

service vsftpd start
service vsftpd stop
service vsftpd restart
service vsftpd status

查看是否开机自启:

chkconfig --list

设置开机自启

chkconfig vsftpd on

8 创建文件权限
local_umask属性,创建文件的权限掩码,默认022,则创建文件的权限为755,需要设置此值。

9.其他linux命令

添加用户,之后必须设置密码!

useradd test //增加用户test,并制定test用户的主目录为/home/test

设置密码

passwd test //为test设置密码

更改用户家目录

usermod -d /test test //更改用户test的主目录为/test

限制用户登录权限(更改用户登录的shell脚本)

usermod -s /sbin/nologin test //限定用户test不能telnet,只能ftp

解开用户登录权限(更改用户登录的shell脚本)


usermod -s /sbin/bash test //用户test恢复正常

10.关闭SELinux

设置文件/etc/sysconfig/selinux(永久生效)

SELINUX=disabled

执行命令(临时生效)

setenforce 0

11.解决500 OOPS:refusing to run with writable root inside chroot()的方法

配置文件中加上这句话:

allow_writeable_chroot=YES

12.有一个配置很全的博客,留给以后查看

http://blog.csdn.net/haoge921026/article/details/51956983

13.最后成功的配置文件

#
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_std_format=YES
listen=YES
tcp_wrappers=YES
hide_ids=YES
#
#设定不允许匿名访问
anonymous_enable=NO
#禁止匿名用户上传
anon_upload_enable=NO
#禁止匿名用户建立目录
anon_mkdir_write_enable=NO
#设定开启目录标语功能
dirmessage_enable=YES
#设定开启日志记录功能
xferlog_enable=YES
#设定端口20进行数据连接
connect_from_port_20=YES
#设定禁止上传文件更改宿主
chown_uploads=NO
#设定Vsftpd的服务日志保存路径
xferlog_file=/var/log/vsftpd.log
#设定Vsftpd的登陆标语。
ftpd_banner="Welcome to FTP Server!"
#
#限制用户在自己的家目录之内
chroot_local_user=YES
#启用不被chroot的使用者账号
chroot_list_enable=YES
#不被chroot的使用者账号的列表文件
chroot_list_file=/etc/vsftpd/chroot_list
user_config_dir=/etc/vsftpd/vuser_conf
#
#针对不同的用户做不同的配置,这个目录下都是以用户名作为文件名
#限制某些用户的访问
userlist_file=/etc/vsftpd/user_list
userlist_deny=YES
userlist_enable=YES
#认证配置
pam_service_name=vsftpd
pam_service_name=/etc/pam.d/vsftpd
#解决500 OOPS:refusing to run with writable root inside chroot()
allow_writeable_chroot=YES

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
vsftpd搭建步骤 1、首先安装vsftpd,并设置开机启动 yum -y install vsftpd chkconfig vsftpd on 2、基于虚拟用户配置,(所谓虚拟用户就是没有使用真实的帐户,只是通过映射到真实帐户和设置权限的目的。虚拟用户不能登录CentOS系统)  2.1 配置参数 [root@ftp vuser_conf]# sed -n '/^[^#]/P' /etc/vsftpd/vsftpd.conf anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/xferlog xferlog_std_format=YES idle_session_timeout=600 data_connection_timeout=120 ascii_upload_enable=YES ascii_download_enable=YES chroot_list_enable=YES listen=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES guest_enable=YEs guest_username=ftp user_config_dir=/etc/vsftpd/vuser_conf pasv_enable=YES pasv_min_port=40000 pasv_max_port=40080 pasv_promiscuous=YES accept_timeout=60 connect_timeout=60  2.2 参数解释 [root@ftp /]# sed -n '/^[^#]/P' /etc/vsftpd/vsftpd.conf #设定不允许匿名访问 anonymous_enable=NO #设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问 local_enable=YES #允许用户上传数据(包括文档与目录) write_enable=YES #建立新目录(775)与档案(644)的权限 local_umask=022 #若目录下有.message则显示该文档内容 dirmessage_enable=YES #启动登录文件记录,记录于 /var/log/xferlog xferlog_enable=YES #支持主动式联机功能 connect_from_port_20=YES #如果上一个xferlog_enable=YES的话,这里可以设定了!这个是登录档案的档名。 xferlog_file=/var/log/xferlog #是否设定为 wu ftp 相同的登录档格式?预设为 NO ,因为登录档会比较容易读! 不过,如果你有使用 wu ftp 登录文件的分析软件,这里才需要设定为 YES xferlog_std_format=YES #若匿名者发呆超过 10 分钟就断线 idle_session_timeout=600 #如果服务器与客户端的数据联机已经成功建立 (不论主动还是被动联机),但是可能由于线路问题导致 120 秒内还是无法顺利的完成数据的传送,那客户端的联机就会被我们的 vsftpd 强制剔除! data_connection_timeout=120 #如果设定为 YES ,那么 client 就优先 (预设) 使用 ASCII 格式上传文件。 ascii_upload_enable=YES #如果设定为 YES ,那么 client 就优先 (预设) 使用 ASCII 格式下载文件。 ascii_download_enable=YES #是否启用 chroot 写入列表的功能?与底下的 chroot_list_flie 有关!这个项目得要开启,否则底下的列表档案会无效。 chroot_list_enable=YES #若设定为 YES 表示 vsftpd 是以 standalone 的方式来启动的!预设是 NO !所以我们的 CentOS 将它改为 YES !这样才能使用 stand alone 的方式来唤醒。 listen=YES #这个是 pam 模块的名称,我们放置在 /etc/pam.d/vsftpd 即是这个。 pam_service_name=vsftpd #支持 /etc/vsftpd/user_list 档案内的账号登入管控! userlist_enable=YES #支持 TCP Wrappers 的防火墙机制 tcp_wrappers=YES #若这个值设定为 YES 时,那么任何实体账号,均会被假设成为 guest (所以预设是不开放的)! 至于访客在 vsftpd 当中,预设会取得 ftp 这个使用者的相关权限。但可以透过 guest_username 来修改。 guest_enable=YES #指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了 guest_username=ftp # FTP服务文件(配置文件名=虚拟用户名) user_config_dir=/etc/vsftpd/vuser_conf #支持数据流的被动式联机模式(passive mode),一定要设定为 YES pasv_enable=YES #在防火墙配置内开启40000到40080端口(没有测试过) -A INPUT -m state --state NEW -m tcp -p -dport 40000:40080 -j ACCEPT pasv_min_port=40000 pasv_max_port=40080 #是否屏蔽对pasv进行安全检查,(当有安全隧道时可禁用) pasv_promiscuous=YES #当用户以被动式 PASV 来进行数据传输时,如果服务器启用 passive port 并等待 client 超过 60 秒而无回应, 那么就给他强制断线!这个设定值与 connect_timeout accept_timeout=60 #单位是秒,在数据连接的主动式联机模式下,我们发出的连接讯号在 60 秒内得不到客户端的响应,则不等待并强制断线 connect_timeout=60  2.3 FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。 一、PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。 当需要传送数据时,客户端在命令链路上用 PORT命令告诉服务器:“我打开了****端口,你过来连接我”。于是服务器从20端口向客户端的****端口发送连接请求,建立一条数据链路来传送数据。 二、PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。 当需要传送数据时,服务器在命令链路上用 PASV命令告诉客户端:“我打开了****端口,你过来连接我”。于是客户端向服务器的****端口发送连接请求,建立一条数据链路来传送数据。 从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而FTP的复杂性就在于此。 3 进行认证  安装Berkeley DB工具,很多人找不到db_load的问题就是没有安装这个包 yum install db4 db4-utils  创建用户密码文本,注意奇行是用户名,偶行是密码 [root@ftp /]# cat /etc/vsftpd/vuser_passwd.txt lixiang 8qu.com.cn shuaicong 8qu.com.cn gaojingyuan 8qu.com.cn  生成虚拟用户认证的db文件 db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db 注:(每添加一用户和秘密就得生成一次)  编辑认证文件,全部注释掉原来语句,再增加以下两句 [root@ftp /]# 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/vuser_passwd account required pam_userdb.so db=/etc/vsftpd/vuser_passwd  创建虚拟用户配置文件 mkdir /etc/vsftpd/vuser_conf/ -p [root@ftp /]# cd /etc/vsftpd/vuser_conf/  文件名等于vuser_passwd.txt里面的账户名,否则下面设置无效 [root@ftp /]# cat /etc/vsftpd/vuser_passwd.txt lixiang 8qu.com.cn shuaicong 8qu.com.cn gaojingyuan 8qu.com.cn [root@ftp /]# cd /etc/vsftpd/vuser_conf/ [root@ftp vuser_conf]# ll total 12 -rw-r--r-- 1 root root 159 Apr 1 17:57 gaojingyuan -rw-r--r-- 1 root root 161 Apr 1 16:27 lixiang -rw-r--r-- 1 root root 161 Apr 1 17:00 shuaicong  虚拟用户根目录,根据实际情况修改 #指定虚拟用户的具体主路径。 local_root=/data/ftp #设定可以进行写操作 write_enable=YES # umask = 022 时,新建的目录 权限是755,文件的权限是 644 umask = 077 时,新建的目录 权限是700,文件的权限时 600。这里应该是anonymous用户创建的文件权限。 anon_umask=022 #仅允许 anonymous 具有下载可读档案的权限 anon_world_readable_only=NO #是否让 anonymous 具有上传数据的功能,默认是 NO,如果要设定为 YES ,则 anon_other_write_enable=YES 必须设定 anon_upload_enable=YES #是否让 anonymous 具有建立目录的权限?默认值是 NO!如果要设定为 YES, 那么 anony_other_write_enable 必须设定为 YES ! anon_mkdir_write_enable=YES #是否允许 anonymous 具有除了写入之外的权限?包括删除与改写服务器上的档案及档名等权限。预设当然是 NO!如果要设定为 YES, anon_other_write_enable=YES 4 设置FTP根目录权限  最新的vsftpd要求对主目录不能有写的权限所以ftp为755,主目录下面的子目录再设置777权限 mkdir /data/ftp chmod -R 755 /data chmod -R 777 /data/ftp [root@ftp data]# ls -ld /data/ drwxr-xr-x 3 root root 4096 Apr 1 16:25 /data/ [root@ftp data]# ll total 4 drwxrwxrwx 2 root root 4096 Apr 1 17:21 ftp  建立限制用户访问目录的空文件(不需要也得创建) touch /etc/vsftpd/chroot_list  如果启用vsftpd日志需手动建立日志文件 touch /var/log/xferlog touch /var/log/vsftpd.log  重启iptabls和vsftpd service iptables restart service vsftpd restart 5 Selinux和防火墙  该关闭的关闭,该放行的放行 1 2 3 4 5 #关闭selinux/iptables sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config setenforce 0 chkconfig iptables off service iptables stop 常见问题 如果登录时出现 500 OOPS: priv_sock_get_result. Connection closed by remote host. 这样的错误,需要升级pam yum update pam 6日志分析 vsftpd的两个日志文件分析如下: /var/log/xferlog 记录内容举例 /var/log/vsftpd.log Sat Apr 1 16:34:14 2017 1 10.13.98.101 55 /vsftpd(1).txt b _ i g lixiang ftp 0 * c /var/log/xferlog日志文件中数据的分析和参数说明 记录数据 参数名称 参数说明 Thu Sep 6 09:07:48 2007 当前时间 当前服务器本地时间,格式为: DDD MMM dd hh:mm:ss YYY 7 传输时间 传送文件所用时间,单位为秒 192.168.57.1 远程主机名称/IP 远程主机名称/IP 4323279 文件大小 传送文件的大小,单位为byte /home/student/phpMyadmin- 2.11.0-all-languages.tar.gz 文件名 传输文件名,包括路径 b 传输类型 传输方式的类型,包括两种: a以ASCII传输 b以二进制文件传输 – 特殊处理标志 特殊处理的标志位,可能的值包括: _ 不做任何特殊处理 C 文件是压缩格式 U 文件是非压缩格式 T 文件是tar格式 i 传输方向 文件传输方向,包括两种: o 从FTP服务器向客户端传输 i 从客户端向FTP服务器传输 r 访问模式 用户访问模式,包括: a 匿名用户 g 来宾用户 r 真实用户,即系统中的用户 student 用户名 用户名称 ftp 服务名 所使用的服务名称,一般为FTP 0 认证方式 认证方式,包括: 0 无 1 RFC931认证 * 认证用户id 认证用户的id,如果使用*,则表示无法获得该id c 完成状态 传输的状态: c 表示传输已完成 i 表示传输示完成
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值