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
三.在配置服务器之前先了解几个配置件;
1 /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;
2./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时,所有的用户均可以切换到其他目录。
3.配置文件/etc/vsftpd/ftpusers
ftpusers:(黑名单)在这个文件中加入本地用户后此用户就登不上了.
白名单:在配置文件中加userlist_deny=NO #启动白名单服务,只有加入的本地用户才可以登录.
*************************************虚拟用户的创建*******************************
3.虚拟用户的特点是只能访问服务器为其提供的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服务器)
4.打开配置文件
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这个文件需要自己创建)
以上就是我对/etc/vsftpd的修改(注意,如果源文件有此变量,则修改,没有则直接添加)
5.把已有的本地用户 添加到chroot_list和user_list中.
至此,你的ftp服务器 就搭建成功了,如果想创建虚拟用户,请参照上面进行添加.