文章转自:http://blog.csdn.net/whoamiyang/article/details/50860709
FTP服务器(File Transfer Protocol
Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。 FTP是File Transfer
Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器。听起来好像很高上的样子,所以,我今天也在自己的服务器上搭了一个ftp服务器玩玩,现在,分享一下经验哦!
一. 查看是否安装vsftpd:
rpm -qa | grep vsftpd
如果已经安装过了,则会提示vsftpd的版本.如果没有安装则什么都不会提示.
[yang@yang ~]$ rpm -qa | grep vsftpd
vsftpd-2.2.2-14.el6.i686
二.安装
(如果上一步没有任何提示,则证明没有安装vsftpd,如果有版本信息,则跳过这一步)
yum -y install vsftpd
三.配置服务器
在配置服务器之前先了解几个配置文件;
配置文件一: /etc/sysconfig/selinux
(以下内容和安装配置的关系不大,但最好能了解一下)
什么是selinux呢.selinux是一个安全体系结构,它通过LSM(Linux Security Modules)框架被集成到linux Kernel2.6.x中,它是NSA(united States National Security Agency)和selinux社区的联合项目.
selinux提供了一种灵活的强制访问控制(MAC)系统,且内嵌在Linux Kernel中,selinux 定义每个用户,进程,应用,和文件的访问和转变的权限,然后它使用了一个安全策略来控制这些实体(用户,进程,应用和文件)之间的交互,安全策略指定如何严格或宽松地进行检查.
selinux对系统管理员是透明的,只有系统管理员需要考虑在他的服务器中如何制定严格的策略,策略可以根据需要是严格的或是宽松的。
只有同时满足[标准Linux访问控制]和[selinux访问控制]时,主体才能访问客体.
在上面我提到了MAC,其实,和它相对应的还有一个DAC:来看看它们之间有什么不同呢:
安全增强型的Linux(SElinux)开始是由NSA(国家安全局)启动并加入到Linux系统中的一套核心组建及用户工具,可以让应用程序在其所需的最低权限上运行,未经修改的Linux系统是使用自主访问控制的,用户可以自己请求更高的root权限,由此恶意软件几乎可以访问任何它想访问的文件,而如果你授予其root权 限,那它就无所不能了.
在SElinux中没有root这个概念,安全策略是由管理员来定义的,任何软件都无法取代它.这就意味着那些潜在的恶意软件所造成的损害可以控制在最小.
操作系统有两类访问控制,自主访问(DAC)和强制访问控制(MAC),标准Linux安全是一种DAC,SElinux为linux增加了一个灵活和可配置的MAC.
所有DAC机制都有一个共同的弱点,就是它们不能识别自然人与计算机程序之间最基本的区别。简单点说就是,如果一个用户被授权允许访问,意味着程序也被授权访问,如果程序被授权访问,那么恶意程序也将有同样的访问权。 DAC最根本的弱点是主体容易受到多种多样的恶意软件的攻击,MAC就是避免这些攻击的出路,大多数MAC特性组成了多层安全模型。
SELinux实现了一个更灵活的MAC形式,叫做类型强制(Type Enforcement)和一个非强制的多层安全形式(Multi-Level Security)。
当然,在这里只是对其做简单的介绍,在这里,我们的FTP服务器配置里,我们选择直接关闭其服务.
1.查看SELinux
[root@yang ~]# /usr/sbin/sestatus -v
SELinux status: disabled
[root@yang ~]# getenforce
Disabled
用上面的两种方法都可以disabled代表关闭,enabled即为开启状态.
2. 修改配置文件(重启服务)
修改/etc/sysconfig/selinux文件,将SELINUX=enabled 改为 disabled;
配置文件二: /etc/vsftpd/vsftpd.conf
(这个配置文件很重要,注意, 以下的配置变量可能在你的/etc/vsftpd/vsftpd.conf中已经存在,只需要去掉注释即可,没有的,你可以根据需要自行添加.)
匿名权限控制
anonymous_enable=YES(NO) #是否允许匿名用户登录
no_anon_password=YES(NO) #匿名用户登录时不询问口令.
下面这四个主要语句控制这个文件和文件夹的上传,下载,创建,删除和重命名;
anono_upload_enable=YES(NO) #来控制匿名用户对文件(非目录)上传权限.
anno_world_readable_only=YES(NO) #控制匿名用户对文件的下载权限
anon_mkdir_write_enable=(YES/NO); #控制匿名用户对文件夹的创建权限
anon_other_write_enable=(YES/NO); #控制匿名用户对文件和文件夹的删除和重命名write_enable=YES #全局设置,是否容许写入(无论是匿名用户还是本地用户,若要启用上传权限的话,就要开启它)
anon_root=(none) #匿名用户主目录none-指的是匿名用户目录,匿名用户的默认目录是/var/ftp
anon_max_rate=(0) #匿名用户速度限制
anon_umask=(077) #匿名用户上传文件时有掩码(若想让匿名用户上传的文件能直接被匿名下载,就这设置这里为073)
chown_uploads=YES #所有匿名上传的文件的所属用户将会被更改成chown_username
chown_username=whoever #匿名上传文件所属用户名
本地用户权限控制
write_enable=YES #可以上传(全局控制) 删除,重命名
local_umask=022 #本地用户上传文件的umask
chroot_local_user=YES #开启本地用户可登录ftp chroot_list_enable=YES
#如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录chroot_list_file=/etc/vsftpd/chroot_list #指定限制的用户文件
user_config_dir= #后面跟存放配置文件的目录。用来实现不同用户不同权限。
#在vsftpd.conf文件中加入这一句,
#在相应的目录里面,为每个用户创建自己的配置文件,用来实现不同的权限可以通过以下三条配置文件来控制用户切换目录:
chroot_list_enable=YES/NO #设置是否启用chroot_list_file配置项指定的用户列表文件。
#如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录 .默认值为yes。chroot_list_file=/etc/vsftpd/chroot_list #指出被锁定在自家目录中的用户的列表文件。
chroot_list_enable=YES 通过与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时,所有的用户均可以切换到其他目录。
配置文件三:/etc/vsftpd/ftpusers
ftpusers:(黑名单)在这个文件中加入本地用户后此用户就登不上了.
白名单:在配置文件中加userlist_deny=NO #启动白名单服务,只有加入的本地用户才可以登录.
四. 虚拟用户的创建
虚拟用户的特点是只能访问服务器为其提供的FTP服务,而不能访问系统的其它资源。所以,如果想让用户对FTP服务器站内具有写权限,但又不允许访问系统其它资源,可以使用虚拟用户来提高系统的安全性。
在VSFTP中,认证这些虚拟用户使用的是单独的口令库文件(pam_userdb),由可插入认证模块(PAM)认证。使用这种方式更加安全,并且配置更加灵活。
(1)创建虚拟用户:vim/etc/vsftpd/users ( 新建文件users)
添加以下内容:(奇数行为用户名,偶数行为密码)
yang
1234
long
1234
(2)对 users进行加密:
db_load -T -t hash -f users vsftpd.login.db
源文件users就可以删掉了.
(3)打开 /etc/pam.d/vsftpd
注释掉所有内容,在其后添加:
auth required pam_userdb.so db=/etc/vsftpd/login 本地用户的登陆
account required pam_userdb.so db=/etc/vsftpd/login 匿名登陆
(4) 配置文件加入
pam_service_name=vsftpd
guest_enable=YES (允许客人登录)
guest_username=ftp(默认用户名为ftp)
(5)建立属于自己的环境:
mkdir /var/ftphome
在ftphome中建立用户yang和用户long 的家目录.再其各自的家目录下创建测试文件.
(6)加入配置文件配置文件
local_root=/var/ftphome/$USER
user_sub_token=$USER
上面是配置文件的介绍, 下面,看个具体的实例:(ps:这是我今天搭的ftp服务器)
配置文件
vim /etc/vsftpd/vsftpd.conf 去掉local_enable=YES前面的#
去掉write_enable=YES前面的#
去掉local_umask=022前面的#
加上anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_umask=022
anon_root=/var/ftp/pub
chroot_local_user=YES
chroot_list_enable=YES //不能切换根目录
chroot_list_file=/etc/vsftpd/chroot_list(注意,chroot_list这个文件需要自己创建)
(7) 添加用户
把已有的本地用户 添加到chroot_list和user_list中.
至此,你的ftp服务器 就搭建成功了,如果想创建虚拟用户,请参照上面进行添加.