CentOS FTP安装及配置

CentOS  FTP安装及配置

LINUX下实现FTP服务的软件很多,最常见的有vsftpd,Wu-ftpd和Proftp等.Red Hat Enterprise Linux中默认安装的是vsftpd.
访问FTP服务器时需要经过验证,只有经过了FTP服务器的相关验证,用户才能访问和传输文件.vsftpd提供了3种ftp登录形式:

    (1)anonymous(匿名帐号)
使用anonymous是应用广泛的一种FTP服务器.如果用户在FTP服务器上没有帐号,那么用户可以以anonymous为用户名,以自己的电子邮件地址为密码进行登录.当匿名用户登录FTP服务器后,其登录目录为匿名FTP服务器的根目录/var/ftp.为了减轻FTP服务器的负载,一般情况下,应关闭匿名帐号的上传功能.

    (2)real(真实帐号)
real也称为本地帐号,就是以真实的用户名和密码进行登录,但前提条件是用户在FTP服务器上拥有自己的帐号.用真实帐号登录后,其登录的目录为用户自己的目录,该目录在系统建立帐号时系统就自动创建.

    (3)guest(虚拟帐号)
如果用户在FTP服务器上拥有帐号,但此帐号只能用于文件传输服务,那么该帐号就是guest,guest是真实帐号的一种形式,它们的不同之处在于,geust登录FTP服务器后,不能访问除宿主目录以外的内容.

===================================================================

FTP的安装   (vsftp默认安装完之后,就允许匿名用户本地用户登陆)

1、检测是否安装了FTP :[root@localhost ~]# rpm -q vsftpd

      如果安装了会显示版本信息:

      [root@localhost ~]# vsftpd-2.0.5-16.el5_5.1

      否则显示:[root@localhost ~]# package vsftpd is not installed

2、如果没安装FTP,运行yum install vsftpd命令

  具体的细节如下:(如果无法更新,你先配置能访问互联网,我有文档叫 CentOS 在 VMware下,如何联网到Internet的解决办法 可以解决无法上网的问题)

  [root@localhost ~]# yum install vsftpd

  [root@localhost ~]# touch /var/log/vsftpd.log     #创建vsftp的日志文件

3、 不应该给root用户开启 ftp的功能,因为别人就能用ftp一直测试你root的密码 (默认是禁止root用户登录的,此处只用于说明,不需要操作)  

 
4、执行以下命令

  # setsebool -P ftp_home_dir=1    (SELinux命令,Redhat从FC3开始,就使用了SELinux来增强安全。为防止出现下面 500 OOPS 的错误
     -P 参数表示永久有效。

     ftp连接的时候 出现 "500 OOPS:cannot change directory:/" 错误: 修改方法:  (会出现在虚拟用户登录的情况下)

     setsebool -P ftp_home_dir on 或者 setsebool -P ftpd_disable_trans on
     setsebool -P ftp_home_dir=1 或者 setsebool -P ftpd_disable_trans=1 效果同上

  修改/etc/vsftpd/vsftpd.conf,在最后一行处添加local_root=/           (本地用户访问目录)

5、重启ftp进程   #service vsftpd restart

启动和关闭分别把restart改为start/stop即可.
如果是源码安装的,到安装文件夹下找到start.sh和shutdown.sh文件,执行它们就可以了.

注:每次修改过ftp相关的配置文件,都需要重启ftp进程来生效。ftp服务器就可以使用了。

最后为了防止服务器由于断电、重启等现象发生,导致ftp进程在开机后未启动,将其添加到开机启动文件中:

(1)找到/etc/rc.local文件

(2)打开该文件,在最后一行添加:service vsftpd start

(3)保存,退出


这样就可以完成了一个简单的匿名FTP的搭建。你可以通过访问ftp://yourip来进行,不过这个FTP没有任何权限。

匿名用户登录,不需要输入用户名

windows doc 下登陆成功:


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

与vsftpd服务器有关的文件和文件夹
vsftpd服务器的配置文件的是: /etc/vsftpd/vsftpd.conf
vsftpd服务器的根目录,即FTP服务器的主目录:/var/ftp/pub
如果你想修改服务器目录的路径,那么你只要修改/var/ftp到别处就行了

linux中vsftp修改默认路径:

如果是默认安装vsftpd的话,以下是一些文件的位置约定:
/usr/sbin/vsftpd ---- VSFTPD的主程序
/etc/rc.d/init.d/vsftpd ---- 启动脚本
/etc/vsftpd/vsftpd.conf ---- 主配置文件
/etc/pam.d/vsftpd ---- PAM认证文件
/etc/vsftpd.ftpusers ---- 禁止使用VSFTPD的用户列表文件
/etc/vsftpd.user_list ---- 禁止或允许使用VSFTPD的用户列表文件
/var/ftp ---- 匿名用户主目录
/var/ftp/pub ---- 匿名用户的下载目录
 
如果要更改默认下载目录,修改/etc/vsftpd/vsftpd.conf,加入如下三行:
local_root=/                #表示使用本地用户登录到ftp时的默认目录              
chroot_local_user=YES
anon_root=/                 #表示匿名用户登录到ftp时的默认目录,例如:anon_root=/usr/local/apache/htdocs/anon             
 
上面的chroot_list_file是设定锁定登陆用户在其home目录的列表,要在chroot_list_enable=YES情况下才生效。
 
另外,如luo_rc所述,最好不要设置默认目录为/,使用建议使用mount --bind来挂载需要的目录。
 
最后重启服务:   service  vsftpd restart

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

虚拟账户

1.建立虚拟用户口令库文件

vi logins.txt     //文件名随意

文件内容:  (这些用户在linux中不需要存在,虚拟的)

user1
passwd1
user2
passwd2
.....
.....

2.生成vsftpd的认证文件

db_load -T -t hash -f ./logins.txt /etc/vsftpd/ftp_login.db

将用户信息文件转换为数据库并用hash加密

说明 : db_load : 触发db4转换程序,需要安装db4_utils程序包
           -T          : 允许应用程序能够将文本文件转译载入数据库。  由于我们之后是将虚拟用户的信息(logins.txt)以文件方式存储在这个文件里,为了让vsftp应用程序能够通过文本来载入用户数据,必须要使用这个选项
           -t          : 子选项-t,追加在-T选项后,用来指定转译载入的数据库类型。 -t可以指定的数据类型有 Btree,Hash,Queue和Recon数据库。
           -f          : 参数后面接包含用户名和密码的文本文件,文件内容是: 奇数行用户名,偶数行密码。

添加虚拟用户口令数据库的读写权限

chmod 600 /etc/vsftpd/ftp_login.db

3.建立虚拟用户所需的PAM配置文件

cd /etc/pam.d  //进入到这个目录下
vi ftp.v       //配置文件名 ftp.v 可以任取,例如  ftp.uv,ftpv,ftpvirtual

配置文件内容

auth required /lib/security/pam_userdb.so  db=/etc/vsftpd/ftp_login              //指向的文件为第二步创建的vsftp认证数据库文件名
account required  /lib/security/pam_userdb.so db=/etc/vsftpd/ftp_login

4.建立虚拟用户所需要访问的目录,并设置相应的权限

useradd virtual            //用户名任意
chmod -R 755 /home/virtual //为要访问的目录设置权限,如果没有设置,虚拟用户虽然能登陆,但看不到里面的文件,虚拟用户为其它用户范

5.设置vsftpd.conf 配置文件

pam_service _name=ftp_login
guest_enable=YES
guest_username=virtual  //所有虚拟用户登陆的时候,都映射为virtual用户,访问该用户的目录

之后可以再 window通过doc界面 或者  FLASHFXP.EXE 软件,使用 user1,passwd1等虚拟用户访问 virtual用户的目录。

 ------------------------------------------------------------------------------------------------------------------

对不同的虚拟用户设置不同的权限    (没尝试的欲望)
1) 设置主配置文件
在vsftpd.conf文件中添加用户配置文件目录设置
user_config_dir=/etc/vsftpd/vsftpd_user_conf
2)  建立用户配置文件目录
# mkdir /etc/vsftpd/vsftpd_user_conf
3)  为虚拟用户建立单独的配置文件
a.用户配置文件名称与用户名相同
touch /etc/vsftpd/vsftpd_user_conf/zhangsan
touch /etc/vsftpd/vsftpd_user_conf/lisi
b.每个FTP虚拟用户都可以独立设置其权限
anon_world_readable_only=NO   //如果是NO,说明用户还可以下载等权限
anon_upload_enable=YES          //是否可以上传文件
anon_mkdir_write_enable=YES   //是否可以创建文件
anon_other_write_enable=YES   //是否可以修改文件包括删除

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

本地帐号
vsftpd 使用默认的vsftpd.conf 就能实现 本地账号的登陆。

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

二、vsftpd的配置文件说明:

   vsftpd.ftpusers:位于/etc目录下。它指定了哪些用户账户不能访问FTP服务器,例如root等。

  vsftpd.user_list:位于/etc目录下。该文件里的用户账户在默认情况下也不能访问FTP服务器,仅当vsftpd .conf配置文件里启用userlist_enable=NO选项时才允许访问。

  vsftpd.conf:位于/etc/vsftpd目录下。来自定义用户登录控制、用户权限控制、超时设置、服务器功能选项、服务器性能选项、服务器响应消息等FTP服务器的配置。

  (1)用户登录控制

  anonymous_enable=YES,允许匿名用户登录。

  no_anon_password=YES,匿名用户登录时不需要输入密码。

  local_enable=YES,允许本地用户登录。

  deny_email_enable=YES,可以创建一个文件保存某些匿名电子邮件的黑名单,以防止这些人使用Dos攻击。

    banned_email_file=/etc/vsftpd.banned_emails,当启用deny_email_enable功能时,所需的电子邮件黑名单保存路径(默认为/etc/vsftpd.banned_emails)。

  (2)用户权限控制

  write_enable=YES,开启全局上传权限。

  local_umask=022,本地用户的上传文件的umask设为022(系统默认是077,一般都可以改为022)。

  anon_upload_enable=YES,允许匿名用户具有上传权限,很明显,必须启用write_enable=YES,才可以使用此项。同时我们还必须建立一个允许ftp用户可以读写的目录(前面说过,ftp是匿名用户的映射用户账号)。

  anon_mkdir_write_enable=YES,允许匿名用户有创建目录的权利。

  chown_uploads=YES,启用此项,匿名上传文件的属主用户将改为别的用户账户,注意,这里建议不要指定root账号为匿名上传文件的属主用户!

  chown_username=whoever,当启用chown_uploads=YES时,所指定的属主用户账号,此处的whoever自然要用合适的用户账号来代替。

  chroot_list_enable=YES,可以用一个列表限定哪些本地用户只能在自己目录下活动,如果chroot_local_user=YES,那么这个列表里指定的用户是不受限制的。

   chroot_list_file=/etc/vsftpd.chroot_list,如果chroot_local_user=YES,则指定该列表(chroot_local_user)的保存路径(默认是/etc/vsftpd.chroot_list)。

  nopriv_user=ftpsecure,指定一个安全用户账号,让FTP服务器用作完全隔离和没有特权的独立用户。这是vsftpd系统推荐选项。

  async_abor_enable=YES,强烈建议不要启用该选项,否则将可能导致出错!

  ascii_upload_enable=YES;ascii_download_enable=YES,默认情况下服务器会假装接受ASCⅡ模式请求但实际上是忽略这样的请求,启用上述的两个选项可以让服务器真正实现ASCⅡ模式的传输。

  注意:启用ascii_download_enable选项会让恶意远程用户们在ASCⅡ模式下用“SIZE/big/file”这样的指令大量消耗FTP服务器的I/O资源。

  这些ASCⅡ模式的设置选项分成上传和下载两个,这样我们就可以允许ASCⅡ模式的上传(可以防止上传脚本等恶意文件而导致崩溃),而不会遭受拒绝服务攻击的危险。

  (3)用户连接和超时选项

  idle_session_timeout=600,可以设定默认的空闲超时时间,用户超过这段时间不动作将被服务器踢出。

  data_connection_timeout=120,设定默认的数据连接超时时间。

  (4)服务器日志和欢迎信息

  dirmessage_enable=YES,允许为目录配置显示信息,显示每个目录下面的message_file文件的内容。

  ftpd_banner=Welcome to blah FTP service,可以自定义FTP用户登录到服务器所看到的欢迎信息。

  xferlog_enable=YES,启用记录上传/下载活动日志功能。

  xferlog_file=/var/log/vsftpd.log,可以自定义日志文件的保存路径和文件名,默认是/var/log/vsftpd.log。

  anonymous_enable=YES 允许匿名登录local_enable=YES 允许本地用户登录

  write_enable=YES 开放本地用户写权限

  local_umask=022 设置本地用户生成文件的掩码为022

  #anon_upload_enable=YES 此项设置允许匿名用户上传文件

  #anon_mkdir_write_enable=YES 开启匿名用户的写和创建目录的权限

  dirmessage_enable=YES 当切换到目录时,显示该目录下的.message隐藏文件的内容

  xferlog_enable=YES 激活上传和下载日志

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

  #chown_uploads=YES 是否具有上传权限. 用户由chown_username参数指定。

  #chown_username=whoever 指定拥有上传文件权限的用户。此参数与chown_uploads联用。

  #xferlog_file=/var/log/vsftpd.log

  xferlog_std_format=YES 使用标准的ftpd xferlog日志格式

  #idle_session_timeout=600 此设置将在用户会话空闲10分钟后被中断

  #data_connection_timeout=120 将在数据连接空闲2分钟后被中断

  #ascii_upload_enable=YES 启用上传的ASCII传输方式

  #ascii_download_enable=YES 启用下载的ASCII传输方式

  #ftpd_banner=Welcome to blah FTP service 设置用户连接服务器后显示消息

  #deny_email_enable=NO 此参数默认值为NO。当值为YES时,拒绝使用banned_email_file参数指定文件中所列出的e-mail地址用户登录。

  #banned_email_file=/etc/vsftpd.banned_emails 指定包含拒绝的e-mail地址的文件.

  #chroot_list_enable=YES 设置本地用户登录后不能切换到自家目录以外的别的目录

  #chroot_list_file=/etc/vsftpd.chroot_list

  #ls_recurse_enable=YES

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

  userlist_enable=YES 此项配置/etc/vsftpd.user_list中指定的用户也不能访问服务器,若添加userlist_deny=No,则仅仅/etc/vsftpd.user_list文件中的用户可以访问,其他用户都不可以访问服务器。如过userlist_enable=NO,userlist_deny=YES,则指定使文件/etc/vsftpd.user_list中指定的用户不可以访问服务器,其他本地用户可以访问服务器。
  listen=YES 指明VSFTPD以独立运行方式启动

  tcp_wrappers=YES 在VSFTPD中使用TCP_Wrappers远程访问控制机制,默认值为YES 

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

其它文献:

RedHat9-vsftp配置大全 http://doc.linuxpk.com/4231.html

原文地址:https://www.cnblogs.com/zhiqixue/p/2800803.html