Linux下打造ftp服务器(转载)


  • 安装vfftpd主服务器程序

Rpm –ivh vsftpd.xxx.rpm

  • 安装db4-utils和db4 (实现虚似用户)

Rpm –ivh db4-utils ;rpm –ivh db4;

  • Vsftpd的三种用户形式

1、匿名用户形式:在默认安装的情况下,系统只提供匿名用户访问

2、本地用户形式:以/etc/passwd中的用户名为认证方式

3、虚拟用户形式:支持将用户名和口令保存在数据库文件或数据库服务器中。相对于FTP的本地用户形式来说,虚拟用户只是FTP服务器的专有用户, 虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件, 增加了对用户和下载的可管理性。 对于需要提供下载服务,但又不希望所有人都可以匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极好的 解决方案。

  • Vfftpd配置文件

/etc/pam.d/vsftpd(用来加强vsftpd服务器用户的认证)

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

/etc/vsftpd/ftpusers (位于此文件内的用户都不能访问vsftpd服务)

/etc/vsftpd/user_list此文件是有可能被拒绝的用户,也可能是允许的,取决于 user_list=yes或no ,等于yes列表中的用户禁止登录.

/var/ftp/pub (下载目录)

  • Vsftpd程序

/usr/sbin/vsftpd (vsftpd 程序)

/etc/rc.d/init.d/vsftpd(启动脚本)

/etc/pam.d/vsftpd(pam认证)

#################匿名权限控制###############

anonymous_enable=YES #是否启用匿名用户
no_anon_password=YES #匿名用户login时不询问口令

下面这四个主要语句控制这文件和文件夹的上传、下载、创建、删除和重命名。
anon_upload_enable=(yes/no);  #控制匿名用户对文件(非目录)上传权限。
anon_world_readable_only=(yes/no); #控制匿名用户对文件的下载权限(注 意:设置为yes不能下载,设置no能下载)
anon_mkdir_write_enable=(yes/no); #控制匿名用户对文件夹的创建权限
anon_other_write_enable=(yes/no); #控制匿名用户对文件和文件夹的删除和重命名

注:匿名用户下载是使用的是nobody这个用户,所以相应的O这个位置要有R权限才能被下载。若想让匿名用户能上传和删除权限,必需设置

write_enable=YES #全局设置,是否容许写入(无论是匿名用户还是本地用户,若要启用上传权限 的话,就要开启他)
anon_root=(none) #匿名用户主目录
anon_umask=(077) #匿名用户上传文件时有掩码(若想让匿名用户上传的文件能直接被匿名下载,就这设 置这里为073)
chown_uploads=YES #所有匿名上传的文件的所属用户将会被更改成chown_username
chown_username=whoever #匿名上传文件所属用户名

#################本地用户权限控制###############

write_enable=YES #可以上传(全局控制) 删除,重命名
local_umask=022  #本地用户上传文件的umask
local_root  #设置一个本地用户登录后进入到的目录
download_enable  #限制用户的下载权限

chown_uploads=YES #所有匿名上传的文件的所属用户将会被更改成 chown_username
chown_username=whoever #匿名上传文件所属用户名

user_config_dir=/etc/vsftpd/user_conf/ #后面跟存放配置文件的目 录,用来实现不同用户不同权限。

vim /etc/vsftpd/user_conf/username    #加入指定的目录local_root=/data/www

chroot_list_enable=YES   #如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录 .默认值为yes。

chroot_list_file=/etc/vsftpd/chroot_list  #指出被锁定在自家目录中的用户的列表文件。

vim /etc/vsftpd/chroot_list #写入限制的用户名
可以通过以下三条配置文件来控制用户切换目录
通过与chroot_local_user=YES/NO搭配能实现以下几种效果:
1、当chroot_list_enable=YES,chroot_local_user=YES时,在/etc /vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。
2、当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list 文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。
3、当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。
4、当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。

###################虚拟用户设置###################

pam_service_name=vsftpd  #设置PAM使用的名称,默认值为/etc/pam.d /vsftpd。

check_shell=YES   #(注意:仅在没有pam验证版本时有用,是否检查用户有一个有效的 shell来登录 )
guest_enable= YES/NO  #启用虚拟用户。默认值为NO。
guest_username=ftp  #这里用来映射虚拟用户。默认值为ftp。(在此可以随便建一个用户,不要 设置密码)
virtual_use_local_privs=YES/NO #当该参数激活(YES)时,虚拟用户使用与本地用 户相同的权限。
    #当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限。默认情况下此参数是关闭的(NO)。

虚似用户的实现:

  1. 首先在/etc/vsftpd/新建一个用户列表文件,kuangye.users
  2. 用db_load命令生成pam_userdb认证所需要的账号认证文件.

格式:db_load  –T –t hash –f /etc/kuangye.users /etc/vsftpd/kuangye.login.db

  1. 在/etc/pam.d下新建一个文件,名字为kuangye.pam,内容如下:

auth  required pam_userdb.so db=/etc/vsftpd/kuangye.login

account  required pam_userdb.so db=/etc/vsftpd/kuangye.login

  1. 为虚似用户分别创建目录

修改配置文件,添加user_config_dir=/etc/vsftpd/local_root 条目;然后在/etc/vs        ftpd目录下,新建local_root目录;

在local_root下新建相应的虚似用户文件,在文件中写入:local_root=/home/kuangye/xxx;然 后更改权限:chmod 777 xxx;

在此还可以做虚似用户权限的细化,实现多个虚似用户登录同一文件夹而具有不同的权限.OK

 #################服务器性能选项##############
ls_recurse_enable=YES  #是否能使用ls -R命令以防止浪费大量的服务器资源
one_process_model  #是否使用单进程模式
use_localtime=NO   #显示目录清单时是用本地时间还是GMT时间,可以通过mdtm命令来达到 一样的效果
pam_service_name=vsftpd  #定义PAM 所使用的名称,预设为vsftpd

pasv_promiscuous=NO   #关闭安全检查,小心呀.

nopriv_user=nobody   #当服务器运行于最底层时使用的用户名
pasv_address=(none)   #使vsftpd在pasv命令 回复时跳转到指定的IP地址.(服务器联接跳转)

 ################用户登录控制###############

ftpd_banner=welcome to FTP . #login时显示欢迎信息.如果设置了 banner_file则此设置无效

banner_file=/etc/vsftpd/banner    #定义登录信息文件的位置

cmds_allowed     #设置客户端登录vsftpd服务器后,客户端可以执行的命令集合.如果设 置了该命令,则其它没有列在其中的命令都拒绝执行.
setproctitle_enable=YES  #显示会话状态信息,关!

两种控制方式:一种控制主机访问,另一种控制用户访问

tcp_wrappers=YES/NO #设置vsftpd是否与tcp wrapper相结合来进行主机的访问控制。默认值为YES。如果启用,则vsftpd服务器会检查/etc/hosts.allow 和/etc/hosts.deny 中的设置,来决定请求连接的主机,是否允许访问该FTP服务器。这两个文件可以起到简易的防火墙功能。

vsftpd.ftpusers  #用于保存不允许进行FTP登录的本地用户帐号。就是vsftp用户的黑名 单

userlist_enable=yes
userlist_deny=yes
#userlist_deny设置使用vsftpd.user_list文件来控制用户的访问 权限,当userlist_deny设置为"yes"时,vsftpd.user_list中的用户都不能登录vsftpd服务器;设置为"NO "时,只有该文件中的用户才能登录访问vsftpd服务器,当然,这些都是在userlist_enable被设置为"YES"时才生效.

userlist_file=/etc/vsftpd/vsftpd.user_list  #定义限制/允许 用户登录的文件

############## 日志设置##################

xferlog_enable=YES   #开启日记功能
xferlog_std_format=YES  #使用标准格式
log_ftp_protocol=NO   #当 xferlog_std_format关闭且本选项开启时,记录所有ftp请求和回复,当调试比较有用.

xferlog_file=/var/log/vsftpd.log   #日志文件位置
############## 目录定义 #################

Dirlist_enable =YES #设置是否允许用户列目录.默认值为"yes",即允许列目录.

Dirmessage_enable=YES   #设置当用户切换到一个目录时,是否显示目录切换信息,如果 设置为"yes”,则显示"message_file"指定文件中的信息(默认是显示.message)文件信息.

Force_dot_files=YES    #设置是否显示以"."开头的文件,默认是不显示的.

Message_file=.mesage   #用于指定目录切换时显示的信息所在的文件,默认值 为".message".

Hide_ids=YES     #隐藏文件的所有者和组信息,匿名用户看到的文件所有者和组全变成ftp

#############用户连接选项#################

max_clients=100   #可接受的最大client数目
max_per_ip=5   #每个ip的最大client数目
connect_from_port_20=YES  #使用标准的20端口来连接ftp
listen_address=192.168.0.2  #绑定到某个IP, 其它IP不能访问
listen_port=2121   #绑定到某个端口
ftp_data_port=2020   #数据传输端口
pasv_max_port=0   #pasv连接模式时可以使用port 范围的上界,0 表示任意。默认值为0。
pasv_min_port=0   #pasv连接模式时可以使用port 范围的下界,0 表示任意。默认值为0。

port_enable=yes       #允许使用主动模式

pasv_enable=yes        #允许使用被动模式

banned_email_file=/etc/vsftpd.banned_emails  #禁止使用的匿 名用户登陆时作为密码的电子邮件地址

##############安全选项#################

Idle_session_timeout=600 #(用户会话空闲后10分钟)
Data_connection_timeout=120 #(将数据连接空闲2分钟断)
Accept_timeout=60  #(将客户端空闲1分钟后断)
Connect_timeout=60  #(中断1分钟后又重新连接)
Local_max_rate=50000  #(本地用户传输率50K)
Anon_max_rate=30000  # (匿名用户传输率30K)

对于参数的详细的解释
cmds_allowed=ABOR,ACCT,APPE,CWD,CDUP,DELE,HELP,LIST,MODE,MDTM,MKD,NOOP,NLST,PASS,PASV,PORT,PWD,QUIT,REIN,RETR,RMD,RNFR,RNTO,SITE,SIZE,STOR,STAT,STOU,STRU,SYST,TYPE,USER

CWD – change working directory 更改目录
DELE – delete a remote file 删除文件
LIST – list remote files 列目录
MKD – make a remote directory 新建文件夹
NLST – name list of remote directory
PWD – print working directory 显示当前工作目录
RETR – retrieve a remote file 下载文件
RMD – remove a remote directory 删除目录
RNFR – rename from 重命名
RNTO – rename to 重命名
STOR – store a file on the remote host 上传文件
# ABOR – abort a file transfer 取消文件传输
# CWD – change working directory 更改目录
# DELE – delete a remote file 删除文件
# LIST – list remote files 列目录
# MDTM – return the modification time of a file 返回文件的更新时间
# MKD – make a remote directory 新建文件夹
# NLST – name list of remote directory
# PASS – send password
# PASV – enter passive mode
# PORT – open a data port 打开一个传输端口
# PWD – print working directory 显示当前工作目录
# QUIT – terminate the connection 退出
# RETR – retrieve a remote file 下载文件
# RMD – remove a remote directory
# RNFR – rename from
# RNTO – rename to
# SITE – site-specific commands
# SIZE – return the size of a file 返回文件大小
# STOR – store a file on the remote host 上传文件
# TYPE – set transfer type
# USER – send username

# less common commands:

# ACCT* – send account information
# APPE – append to a remote file
# CDUP – CWD to the parent of the current directory
# HELP – return help on using the server
# MODE – set transfer mode
# NOOP – do nothing
# REIN* – reinitialize the connection
# STAT – return server status
# STOU – store a file uniquely
# STRU – set file transfer structure
# SYST – return system type


MSN空间完美搬家到新浪博客!

你可能感兴趣的:(Linux下打造ftp服务器(转载))