🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# FTP服务器的安装与配置(CentOS 6.5) [TOC] ## vsftpd说明   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服务端vsftpd `yum install vsftpd -y` ## 安装ftp客户端 `yum install ftp -y` ## FTP服务器相关配置文件说明 ### `/etc/vsftpd/vsftpd.conf` 配置 >[success] **`anonymous_enable=YES`** # 是否允许anonymous登录FTP服务器,默认是允许的 **`local_enable=YES`** # 是否允许本地用户登录FTP服务器,默认是允许 **`write_enable=YES`** # 是否允许用户具有在FTP服务器文件中执行写的权限,默认是允许 `local_umask=022` # 设置本地用户的文件生成掩码为022,默认是077 # `anon_mkdir_write_enable=YES` # 是否允许匿名账户在FTP服务器中创建目录 `dirmessage_enable=YES` # 激活目录信息,当远程用户更改目录时,将出现提示信息 `xferlog_enable=YES` # 启用上传和下载日志功能 `connect_from_port_20=YES` # 启用FTP数据端口的连接请求 # `xferlog_file=/var/log/vsftpd.log` # 设置日志文件的文件名和存储路径,这是默认的 `xferlog_std_format=YES` # 是否使用标准的ftpd xferlog日志文件格式 # `idle_session_timeout=600` # 设置空闲的用户会话中断时间,默认是10分钟 # `data_connection_timeout=120` # 设置数据连接超时时间,默认是120秒 # `ascii_download_enable=YES` # 是否允许使用ASCII格式来上传和下载文件 # **`chroot_list_enable=YES`** # 如果希望用户登录后不能切换到自己目录以外的其它目录,需要设置该项,如果设置`chroot_list_enable=YES`,那么只允许`/etc/vsftpd.chroot_list`中列出的用户具有该功能.如果希望所有的本地用户都执行者chroot,可以增加一行:`chroot_local_user=YES` `listen=YES` # 使vsftpd 处于独立启动模式 `pam_service_name=vsftpd` # 设置PAM认证服务的配置文件名称,该文件存放在`/etc/pam.d/`目录下 **`userlist_enable=YES`** # 用户列表中的用户是否允许登录FTP服务器,默认是不允许 `tcp_wrappers=YES` # 使用tcp_wrqppers作为主机访问控制方式 ### `/etc/vsftpd/ftpusers` 说明 >[info] **说明:**这个文件是用来记录"不允许"登录到FTP服务器的用户,通常是一些系统默认的用户。默认情况下,root和它以下的用户是不允许登录FTP服务器的.可以将不允许登录的用户添加到这里来.但切记每个用户都要单独占用一行. 内容如下: ~~~ # Users that are not allowed to login via ftp root bin daemon adm lp sync shutdown halt mail news uucp operator games nobody ~~~ ### `/etc/vsftpd/user_list` 说明   它可以实现与ftpusers文件相同的功能。FTP服务器启动的时首先会检测vsftpd.conf文件,如果检测到该文件中存在如下语句:`userlist_deny=YES`   则user_list文件中存在的用户不允许登录FTP服务器,YES为该句的默认选项: `userlist_deny=NO`   则只允许该文件中的用户登录FTP服务器,其他用户无法登录FTP服务器。该文件与ftpusers的格式相同。如要添加用户则每个用户名要独占一行 * * * * * ## 相关实例 ### 限制用户`test`只能访问`/var/www/html/test`,不能访问其他路径,且限定用户`test`不能Telnet、Shell #### 方法一 真实账号 1. 新增系统用户`test`并设置密码; 2. 将`/etc/vsftpd/vsftpd.conf`中的`chroot_list_enable=YES`和`chroot_list_file=/etc/vsftpd/chroot_list`配置打开; 3. 将`test`用户加入禁用列表`/etc/vsftpd/chroot_list`中; 4. 重启vsftpd服务器; 5. 登录ftp服务器查看效果。 操作过程如下: ~~~ useradd -s /sbin/nologin -d /var/www/html/test test && echo 'aaaaaa' |passwd --stdin test sed -i 's/#chroot_list/chroot_list/g' /etc/vsftpd/vsftpd.conf egrep -i 'chroot_list' /etc/vsftpd/vsftpd.conf echo test >> /etc/vsftpd/chroot_list service vsftpd restart ~~~ #### [方法二 虚拟账号](http://blog.chinaunix.net/uid-20329764-id-1965724.html) 1. 建立虚拟用户口令库文件 2. 生成vsftpd的认证文件 3. 建立虚拟用户所需的PAM配置文件 4. 建立虚拟用户及要访问的目录并设置相应的权限。 5. 设置vsftpd.cong主配置文件。 6. 设置test用户的配置文件 7. 重新启动vsftpd服务,使所有配置文件的设置生效 ##### 建立虚拟用户口令库文件 ~~~ cat >>/etc/vsftpd/vsftpd_login.txt<<EOF test aaaaaa EOF cat /etc/vsftpd/vsftpd_login.txt ~~~ >[info] vsftpd_login.txt文件内容 输入奇数为账号,偶数为其密码 ##### 生成vsftpd的认证文件 ~~~ db_load -T -t hash -f /etc/vsftpd/vsftpd_login.txt /etc/vsftpd/vsftpd_login.db chmod 600 /etc/vsftpd/vsftpd_login.txt chmod 600 /etc/vsftpd/vsftpd_login.db ~~~ ##### 建立虚拟用户所需的PAM配置文件 ~~~ sed -i 's/^/# /g' /etc/pam.d/vsftpd cat >>/etc/pam.d/vsftpd <<EOF auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/users_config account required /lib64/security/pam_userdb.so db=/etc/vsftpd/users_config EOF tail /etc/pam.d/vsftpd ~~~ ##### 建立虚拟用户及要访问的目录并设置相应的权限 ~~~ useradd -s /sbin/nologin -d /var/www/html/test test tail -1 /etc/passwd ~~~ ##### 设置vsftpd.conf主配置文件 ~~~ cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak vim /etc/vsftpd/vsftpd.conf # 替换或写入如下内容 anonymous_enable=NO local_enable=YES chroot_local_user=YES pam_service_name=vsftpd user_config_dir=/etc/vsftpd/users_config max_clients=100 max_per_ip=3 local_max_rate=300000 anon_max_rate=100000 ~~~ >[info] **释义:** anonymous_enable=NO # 禁用匿名用户登录 local_enable=YES # 启用本地用户登录(本质上是为了能够让虚拟用户登录) chroot_local_user=YES # 将所有本地用户限制在自己的目录中 pam_service_name=vsftpd # 配置vsftpd使用的PAM模块为vsftpd user_config_dir=/etc/vsftpd/users_config # 设置虚拟账户配置文件的主目录为 /users_config(后面创建) max_clients=100 # 设置FTP服务器最大接入客户端数为100个 max_per_ip=3 # 设置每个IP地址最大连接数为3个 local_max_rate=300000 # FTP服务器的本地用户最大传输速率设置为300KB/s anon_max_rate=100000 # FTP服务器匿名用户最大传输速率设置为100KB/s ##### 设置用户test的配置文件 ~~~ mkdir /etc/vsftpd/users_config cat >>/etc/vsftpd/users_config/test<<EOF guest_enable=YES guest_username=test anon_world_readable_only=NO anon_other_write_enable=YES anon_mkdir_write_enable=YES anon_upload_enable=YES anon_max_rate=300000 EOF cat /etc/vsftpd/users_config/test ~~~ >[info] **释义:** guest_enable=YES 开启虚拟账户登录 guest_username=test 设置test对应的系统账户为test anon_world_readable_only=NO 允许用户浏览FTP目录和下载文件 anon_other_write_enable=YES 允许用户进行文件改名和删除文件的权限 anon_mkdir_write_enable=YES 表示用户具有建立和删除目录的权利 anon_upload_enable=YES 表示用户可以上传文件 anon_max_rate=300000 限制传输速度为300KB/s ##### 重新启动vsftpd服务,使所有配置文件的设置生效 `service vsftpd restart` ## 如何以root用户登陆ftp服务器 为了安全vsftpd服务器默认不允许root用户使用ftp服务,但是我们有时又想通过root访问我们刚刚假设好的ftp服务器。具体设置如下: > 修改vsftpd禁止访问的用户列表 `/etc/vsftpdftpusers`文件将root用户注释掉保存退出,重启访问即可。