# 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用户注释掉保存退出,重启访问即可。
- Linux的安装
- Linux的软件安装管理
- Linux零碎的命令
- 了解ssh
- 系统调优及安全设置
- Linux系统中的硬链接和软连接
- Linux文件和目录的属性及权限
- 命令总结
- 文件目录管理命令
- cat
- cd
- cp
- ls
- mkdir
- mv
- rm
- touch
- vi
- 硬件检测内核shell命令
- echo
- alias
- dd
- diff
- date
- grep(重要)
- head
- rpm
- sed(重要)
- tree
- unalias
- yum
- seq
- su
- less
- more
- tail
- awk(重要)
- pwd
- history
- whoami
- find(重要)
- which
- vimdiff
- sudo
- wget
- ln
- chmod
- chown
- vim常用技巧
- scp
- 工作场景应用总结
- 自动删除n天前日志
- 删除一个目录下的所有文件但保留一个文件
- Linux软件安装
- php安装(apache版本)
- vsftpd安装
- git安装
- python安装
- LNMP安装
- LAMP安装I
- LAMP安装II
- svn安装
- svn在Linux下的命令操作
- svn钩子简介
- svn代码上传流程
- Crond介绍
- sersync应用指南
- 其他
- 小结一
- 系统调优重新整理tmp
- linux禁止root用户直接登录sshd并修改默认端口