首页 > 代码库 > Linux vsftpd服务器

Linux vsftpd服务器

Linux vsftpd服务器

1.1. 概述

Vsftpd是众多ftp中的一种,主要应用于生产环境网络访问共享文件使用。多用于网络环境

 

FTP

 

工作模式:

      主动模式  客户机向FTP服务器请求连接 随机端口>1024 20端口向客户机随机端口连接

      被动模式  客户机向FTP服务器连接21端口,并指定客户端端口与20相连

 

 

1.2. 软件安装

 

客户端软件  ftp lftp

yum install vsftpd -y

 

 

1.3. 服务和端口:

 

 

20 传输数据

21 传输验证信息

 

 

1.4. 防火墙配置

 

iptables -I INPUT 1 -p tcp --dport 20:21 -JACCEPT

 

service iptables save

 

 

1.5. 用户模式

 

 

匿名用户:

 

l 用户名为: ftp   anonymous

l 密码为:ftp

l 家目录  /var/ftp

l Shell  /sbin/nologin

 

 

当使用匿名用户上传文件时需注意以下三点:

1.      目录的权限 755  有修改权

2.      配置文件允许上传

3.      修改selinux

 

# 匿名用户不具备删除权限,只有上传修改的权限

 

allow_ftpd_anon_write --> off

 

普通用户:

 

普通用户以自已的家目录为共享主目录

 

setsebool-P ftp_home_dir on

 

 

 

跨网段访问,采用被动模式

 

 

1.6. 配置文件

:注意:当匿名更改为普通用户模式时,不能使用#注释的方式取消,必须使用NO给值

 

Cd /etc/vsftpd/

vsftpd.conf:   # 主配置文件;

ftpusers:     # 指定哪些用户不能访问FTP服务器;

user_list:    # 指定的用户是否可以访问ftp服务器由vsftpd.conf文件中的userlist_deny的取值来决定。

 

 

 

/etc/vsftpd/vsftpd.conf   # 主配置文件

************************************************************************************************************************

#匿名用户配置

anonymous_enable=YES     # 是否启用匿名用户 ftp anonymousNO为需要验证方式

anon_root=/xx            # 指定匿名用户根目录

#anon_upload_enable=YES          # 是否允许匿名用户写上传

#anon_mkdir_write_enable=YES     # 是否允许匿名用户删创建

 

# 普通用户配置

local_enable=YES         # 是否允许本地用户登录

local_root=/xx             # 指定普通用户的根目录

 

#开启ftp普通用户登录家目录访问权限

write_enable=YES    # 是否允许写入

local_umask=022     # umask

dirmessage_enable=YES      # 切换目录时的欢迎词

# 设置  vi /etc/ftp/.message

xferlog_std_format=YES    # 是否启用日志

#xferlog_file=/var/log/xferlog   # 日志路径

xferlog_std_format=YES  # 日志格式

#chown_uploads=YES          # 上传文件的所有者会被改变

#chown_username=whoever     # 指定上传文件后改变的所有者

#idle_session_timeout=600   # 连接后闲置时间600

#ftpd_banner=Welcome to blah FTP service. #FTP登录欢迎词

# 目录锁定

# users to NOT chroot().   

#chroot_local_user=YES     # 锁定目录,不允许本地用户切换其它目录

#chroot_list_enable=YES    # 指定用户锁定目录

#chroot_list_file=/etc/vsftpd/chroot_list   出现在此文件的用户做锁定目录

 

 防止用户返回到上一级目录:

如果你想禁止所有用户调转到上级目录,可以设置
chroot_local_user=YES 
前提:需要设置local_root目录;
然后将要禁止的用户添加到chroot_list里面即可。

 

# 安全限制

pam_service_name=vsftpd    # /etc/pam.d/vsftpd  是属于pam管理

userlist_enable=YES        #

userlist_deny=YES          # 拒绝用户列表   NO 为出现在文件中的用户为同意

userlist_file=/etc/vsftpd/user_list    # 列表文件        

tcp_wrappers=YES       # ip限制 /etc/host.deny

deny_file={*.mp3,*.exe}    # 拒绝上传文件格式为exe mp3

**************************************************************************************************************************

 

修改家目录布尔值

 

getsebool -a | grep ftp

 

ftp_home_dir --> off

 

setsebool -P ftp_home_dir on

 

 

/etc/pam.d/vsftpd   # PAM管理文件

 

#%PAM-1.0

session   optional     pam_keyinit.so    force revoke

auth      required     pam_listfile.soitem=user sense=deny (拒绝)   file=/etc/vsftpd/ftpusersonerr=succeed   

auth      required     pam_shells.so

auth      include      password-auth

account   include      password-auth

session   required     pam_loginuid.so

session   include      password-auth

 

 

/etc/vsftpd/ftpusers   # 出现在此文件中的为不能登录用户

 

 

 

 

上传模式:ascii   文本文件可编

          bin    图片语音 不可编

 

 

 

 

1.7. 配置用户

 

1.7.1.创建系统用户:

 

2.创建一个用户来访问FTP,并指定该用户的FTP 目录:

[root@singledb \]# useradd -d /var/www/html/qs -g ftp -s /sbin/nologin user1

[root@singledb \]# passwd uesr1

  以上创建用户的方法可以用该帐号登录系统,但是我们要创建的帐号是可以登录FTP但是不可以登录系统。

#useradd-d /var/www/html/qs -g ftp -s /sbin/nologin user1   //-d是指定目录(必须为相对根的跟路径,否则提示阿弥有home家目录)-g指定分组为ftp组,-s指定该用户不能返回上一级。

#passwduser1 //设置密码

 

 

1.7.2.创建虚拟用户

1.7.2.1.创建普通虚拟用户ftp站点

  首先安装FTP 虚拟用户需要用到的软件及认证模块

yum  install  pam* db4*  --skip-broken  –y

yum  install  pam* libdb-utils libdb*--skip-broken  –y  #centos 7安装方法

 

创建并生成vsftpd数据库文件vi /etc/vsftpd/user,  # 建立user用户文件

******************************************************************

1.   user01    # 用户名

2.    123      # 密码

3.   user02

4.    123

以此类推,一直添加账号

*******************************************************************

  生成数据库文件命令:

db_load -T -t hash -f /etc/vsftpd/ftpusers.txt/etc/vsftpd/vsftpd_login.db

chmod 700 /etc/vsftpd/vsftpd_login.db    给权限

 

  配置PAM验证文件:

在配置文件vi /etc/pam.d/vsftpd 行首加入如下两行认证语句:(如果是32位,lib64需改成lib,如果RedHat,加入的语句不一样,需注意)

auth    sufficient      /lib64/security/pam_userdb.so    db=/etc/vsftpd/vsftpd_login

account sufficient     /lib64/security/pam_userdb.so     db=/etc/vsftpd/vsftpd_login

 

  创建vsftpd映射本地用户:

所有的FTP虚拟用户需要使用一个系统用户,这个系统用户不需要密码,也不需要登录。主要用来做虚拟用户映射使用。

useradd   –d  /home/ftpuser -s /sbin/nologin  ftpuser

 

  修改完整版配置文件内容如下:

Vi/etc/vsftpd/vsftpd.conf

anonymous_enable=NO  //禁止匿名用户访问

local_enable=YES    //允许本地用户登录FTP

write_enable=YES   //允许用户在FTP目录有写入的权限

local_umask=022     //设置本地用户的文件生成掩码为022,默认是077

dirmessage_enable=YES   //激活目录信息,当远程用户更改目录时,将出现提示信息

xferlog_enable=YES    //启用上传和下载日志功能

connect_from_port_20=YES   //启用FTP数据端口的连接请求

xferlog_file=/var/log/vsftpd.log    //是否使用标准的ftpd xferlog日志文件格式

xferlog_std_format=YES  

ascii_upload_enable=YES

ascii_download_enable=YES

listen=YES   /使vsftpd处于独立启动监听端口模式

 

guest_enable=YES           # 开启虚拟用户

guest_username=ftpuser      # 虚拟用户

pam_service_name=vsftpd   //设置PAM认证服务配置文件名称,文件存放在/etc/pam.d/目录

user_config_dir=/etc/vsftpd/vsftpd_user_conf         # 指定虚拟用户独立目录配置文件

virtual_use_local_privs=YES       # 虚拟用户和本地用户权限匹配

 

      保存重启,/etc/init.d/vsftpd restart 即可使用虚拟用户登录,这时候所有的虚拟用户共同使用/home/ftpuser目录上传下载,如果想使用自己独立的目录,可以在/etc/vsftpd/vsftpd_user_conf目录创建各自的配置文件,如给user01创建独立的配置文件:多个用户创建多个

vi  /etc/vsftpd/vsftpd_user_conf/user01

local_root=/home/ftpsite/wugk       # 锁定目录

write_enable=YES                    # 开启写入

anon_world_readable_only=YES       # 允许读取

anon_upload_enable=YES            # 允许上传

anon_mkdir_write_enable=YES         # 允许写入

anon_other_write_enable=YES         #

 

同时,要在/home/ftpuser/下创建对应用户的家目录,例如:/home/ftpuser/user01

 重启,使用客户端登录FTP,测试即可。关于FTP讲解就到此,windows还可以使用Server-U来搭建FTP服务器端,有兴趣的童鞋可以研究一下。

 

 

 

1.7.2.2.创建public公共账号和管理账号

实验目的:

Public 可以公共下载文件,但不能删除文件

Ftpadmin有所有权限。

**********前面省略 与上相同******

5.创建虚拟帐号对应的系统用户

 

普通帐号:

public对应系统帐号ftp_public,并指定其主目录为/var/ftp/public

# 对家目录做权限设置, chmod-R 500 /var/ftp/public/

普通帐号public只允许下载,修改public目录用户权限为rx可读可执行。

 

管理帐号:

ftpadmin对应系统帐号ftp_admin,指定主目录为/var/ftp/ftpadmin

# 对家目录做权限设置,chmod-R 700 /var/ftp/ftpadmin/

专用帐号ftpadmin允许上传和下载,所以对ftpadmin目录权限设置为rwx,可读可写可执

 

[root@red-hat-5 ftp]# useradd -d /home/ftpadmin/-s /sbin/nologin ftpadmin

[root@red-hat-5 ftp]# useradd -d/home/ftppublic/ -s /sbin/nologin  ftppublic 

[root@red-hat-5 ftp]# chmod -R 500/home/public/

[root@red-hat-5 ftp]# chmod -R 700/home/ftpadmin/

 

6.建立配置文件

设置多个虚拟帐号的不同权限,需要为每个虚拟帐号建立独立的配置文件,并根据需要进行相应的设置

 

1)修改vsftpd.conf主配置文件

配置主配置文件/etc/vsftpd/vsftpd.conf

添加user_config_dir字段,设置虚拟用户配置文件和目录

此主配置文件是全局配置,所有账号生效

 

anonymous_enable=NO(修改配置)      禁用匿名用户登录  

write_enable=YES (默认开启)          允许使用任何可以修改文件系统的FTP的指令 

local_enable=YES (默认开启)          启用本地用户登录设置  

chroot_local_enable=YES (自建配置)    将所有本地用户限制在家目录中  

pam_service_name=vsftpd:(默认开启)配置vsftpd使用的PAM模块为vsftpd  user_config_dir=/etc/vsftpd/vsftpd_login:(自建配置)设置虚拟帐号的主目录为/

vsftpd_login  max_clients=300:(自建配置)  设置FTP服务器最大接入客户端数为300个

max_per_ip=10:  (自建配置)            设置每个IP地址最大连接数为10个 

port_enable=NO (自建配置)             取消PORT模式进行数据传输  

pasv_min_port=65341 (自建配置)          PASV模式下数据传输所使用port范围下界 

pasv_max_port=65351 (自建配置)          PASV模式下数据传输所使用port范围上界

connect_from_port_20=NO (修改配置)    PORT模式进行数据传输不使用20端口 

pasv_enable=YES  (自建配置)             允许PASV模式进行数据传输

 

 

(2)建立虚拟帐号配置文件

在user_config_dir=/etc/vsftpd_login指定路径下,建立与虚拟帐号同名的配置文件并添加相应的配置字段

[root@red-hat-5 vsftpd]# mkdir /vsftpd_login 

[root@red-hat-5 vsftpd]# touch/etc/vsftpd/vsftpd_login/public

[root@red-hat-5 vsftpd]# touch/etc/vsftpd//vsftpd_login/ftpadmin

 

首先建立普通帐号public的配置文件

vi /etc/vsftpd/vsftpd_login/public

 

guest_enable=yes         开启虚拟帐号登录 

guest_username=ftp_public     设置ftp对应的系统帐号为ftppublic 

anon_world_readable_only=no   允许匿名用户浏览器整个服务器的文件系统

anon_max_rate=50000   限定传输速率为50KB/s

 

建立专用帐号的配置文件ftpadmin

vi /etc/vsftpd/vsftpd_login/ftpadmin

 

guest_enable=yes:           开启虚拟帐号登录  

guest_username=ftp_ personal:设置ftp对应的系统帐号为ftp_personal

anon_other_write_enable=YES:  允许匿名账号具有删除.更名权限

anon_mkdir_write_enable=yes:允许创建文件夹  

anon_upload_enable=yes:    开启匿名帐号的上传功能  

anon_world_readable_only=no   允许匿名用户浏览器整个服务器的文件系统

anon_max_rate=100000:     限定传输速度为100KB/s

 

重启服务 service vsftpd restart

 

如果ftpadmin用户需要复制文件到public中,方便它人下载,可以在ftpadmin的配置文件中加入下面两行代码

还有一种方法就是在personal配置文件加入以下两个参 

chown_uploads=YES 激活匿名用户所上传文件的修改所有权

chown_username=root 拥有匿名用户上传文件所有权的用户

然后就可以直接拷贝文件到public目录下

 

1.8. ftp客户端软件lftp

lftp user1@10.204.2.200   登录FTP  指定用户名   

口令:

 

ls 查看 
cd
切换目录 
put
文件名  上传  
get   
文件名  下载

 

 

1.9. 故障排除

 

 

 

 

  • 如果无法上传,故障排除:

  • 检查配置文件是否有允许写

  • 目录权限

 getsebool -a | grep ftp 查询Bool

 allow_ftpd_anon_write --> off

 allow_ftpd_full_access --> off

 

 setsebool -P allow_ftpd_anon_write on

 setsebool -P allow_ftpd_full_access on

 

 

 

  • 登录后无法执行命令,提示没有主机路由

 

vim /etc/sysconfig/iptables-config

 

IPTABLES_MODULES="ip_conntrack_ftp"

 

 

 


本文出自 “钟良的linux技术交流博客” 博客,请务必保留此出处http://zhongliang.blog.51cto.com/4507905/1878980

Linux vsftpd服务器