首页 > 代码库 > Ubunton下搭建ftp服务器 实现虚拟用户、本地用户、匿名用户的登陆及权限

Ubunton下搭建ftp服务器 实现虚拟用户、本地用户、匿名用户的登陆及权限

#在ubunton系统下安装和配置ftp可以说是比较简单的

本篇教程是为了解决一下问题


需要搭建ftp服务器实现三种用户的登陆及权限管理

其中 anon可以自由的到特定的目录里下载东东;
stu则可以到特定的目录里上传东东; 
而tearcher,则可以对特定的目录里上传、下载东东;
admin则可以对stu、teacher的数据进行统一的管理。
另外,做为系统上已经有的本地用户则可以登录自己的home目录。

针对上面的需求,ftp需要开通对匿名用户、本地用户、及虚拟用户的支持。并且特别对虚拟用户中的(stu、teacher、admin)分别授予不同的权限。

下面就vsftpd支持三类用户加以说明:
1.匿名用户,也就是不需要输入密码就可登录ftp服务器的用户,这个用户名通常是ftp或anonymous; 与匿名用户有关的设置多以 anon_选项开头。
2.本地用户,也就是你Linux系统上可登录到系统的用户,这些用户是在系统上实实在在存在的用户。通常会有自己的home,shell等。与本地用户有关的设置多以local_开头或包含local_的选项。
3.虚拟用户,只对ftp有效的用户。这些用户不可以登录Linux系统,只可以登录ftp服务器。其实就是一个本地用户映射成多个只对ftp服务器有效的虚拟用户。虚拟用户可以有自己的ftp配置文件,因此通常利用虚拟用户来对ftp系统的不同用户制定不同的权限,以达到安全控制的目的。与虚拟用户有关的设置以guest_开头。


如果你只是想用ftp实现对自己的共享,你可以开启本地用户;
如果你想对很多人共享,那你可以用匿名用户;
如果你需要针对不同的用户群给予不同的权限,那你就要设置更复杂的虚拟用户了。

闲话少叙,开始安装vsftpd服务器。而对于全新安装的vsftpd,它是默认支持本地用户登录的,而且匿名用户是无法使用的。所以我先要在安装之后,开启匿名登录。

1. 安装vsftpd:

sudo apt-get install vsftpd

此时可以使用 ftp localhost 测试是否安装成功

现在你就可以用你Ubuntu的用户名和密码登录ftp服务器了,登录目录是用户对应的Home目录。


1.1查看和配置 vsftdp.conf中的内容

使用

cat /etc/vsftpd.conf | grep -v ‘^#‘


查看默认生成的配置,部分选项的意思如下

listen=YES                        将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
anonymous_enable=NO   不允许匿名访问
local_enable=YES      允许本地用户访问,即系统上已经有的用户可以直接登录
dirmessage_enable=YES 是否激活目录欢迎信息功能。 当用户用CMD模式首次访问服务器上某个目录时,FTP服务器将显示欢迎信息。
		        默认情况下,欢迎信息是通过该目录下的.message文件获得的。此文件保存自定义的欢迎信息,由用户自己建立
use_localtime=YES     是否使用本地时间,默认是使用GMT时间,和中国的标准时间大概相差8个小时
xferlog_enable=YES    让系统自动维护上传和下载的日志文件,默认情况该日志文件为/var/log/vsftpd.log
connect_from_port_20=YES                是否采用ftp的默认端口来控制和传送数据
secure_chroot_dir=/var/run/vsftpd/empty 这个选项必须指定一个空的资料夹且任何登入者都不能有写入的权限,
					当vsftpd不需要file system 的权限时,就会将使用者限制在此资料夹中。
pam_service_name=vsftpd                 设置PAM外挂模块提供的认证服务所使用的配置文件名,该文件是在/etc/pam.d/目录下查询的。
rsa_cert_file=/etc/ssl/private/vsftpd.pem     指定SSL中RSA认证证书的位置



2.我们先来开通匿名用户:

因为vsftpd的匿名用户的登录目录默认是ftp的home目录,所以我们先看看Ubuntu系统里的ftp用户的Home目录是什么?

使用

root@iZb8uz4c6idgl0Z:~# cat /etc/passwd | grep ftp
ftp:x:105:111:ftp daemon,,,:/srv/ftp:/bin/false


可以看到ftp的home是/srv/ftp,但是/srv/ftp这个目录并不我想放文件的地方,我要放在/var/ftp/anon ,所以在这里需要修改一个ftp的home目录。

root@iZb8uz4c6idgl0Z:/# sudo usermod -d /var/ftp/anon ftp
root@iZb8uz4c6idgl0Z:/# cat /etc/passwd | grep ftp
ftp:x:105:111:ftp daemon,,,:/var/ftp/anon:/bin/false


开启匿名用户需要在/etc/vsftpd.conf添加下面几项:

chroot_local_user=YES   #把本地用户限制在自己的home文件夹中,这样子登录之后就不能访问自己home之外的文件了,这样子是出于安全上的考虑
anonymous_enable=YES    #开启匿名访问
anon_root=/var/ftp/anon #指定匿名登录后的根文件夹,也就是对于匿名用户,会把/var/ftp/anon映射为它的根目录,

3. 建立本地虚拟用户

就像上面的分析的,我需要三个用户stu、teacher、admin,分别赋予不同的权限,那我们就要开始建立虚拟用户了。我们要先在系统上建建立一个真实的用户(guest),以供ftp的虚拟用户进行映射。但是为了安全其间,我们要让这个新建的用户并不能登录Ubuntu,这样子我们就可以把ftp的用户和ubuntu系统的用户分隔开来了,即使你ftp的密码丢了,也不会对你的系统造成太大的影响 。
而建立虚拟用户主要与下面两项相关(在vsftpd.conf里加上下面两句):

guest_enable=YES            #开启虚拟用户
guest_username=guest        #把虚拟用户映射到哪个本地用户上,这个是可以自定义的,我取guest.

建立本地不能登录的用户

root@iZb8uz4c6idgl0Z:/# sudo useradd guest -d /var/ftp -s /bin/nologin

其中 -s /bin/nologin是为禁止使用guest登录ubuntu
接着新建guest及其他用户的的登录目录:

root@iZb8uz4c6idgl0Z:/# sudo mkdir /var/ftp/guest
root@iZb8uz4c6idgl0Z:/# sudo mkdir -p /var/ftp/anon /var/ftp/admin /var/ftp/teacher /var/ftp/stu

修改目录权限,让/var/ftp目录的属主是guest,要不然会登录不上的。

root@iZb8uz4c6idgl0Z:/#  chown  guest:guest -R /var/ftp

4.建立ftp虚拟用户及认证文件

4.1新建一些必要的配置文件
在ubuntu中,vsftpd的所有的配置文件都是直接放在/etc目录下面的,这样子不方便管理,还有备份的时候也不方便,所以我就再建一个文件夹,专门来放那些配置文件:

sudo mkdir /etc/vsftpd
sudo touch /etc/vsftpd/stu  /etc/vsftpd/admin  /etc/vsftpd/teacher
4. 2 建立用户数据库ftpguests
因为我们要用ftp虚拟用户登录ftp服务器,这些ftp虚拟用户又是映射到前面新建的guest本地用户的,但是虚拟用户又不归Ubuntu系统管理,它们不是用useradd命令生成的。而是需要我们专门建立一个存放这些虚拟用户及它们密码的数据库ftpguests。这个数据库的格式是一行放用户名,一行对应它的密码,一个数据库文件中可以存放多个用户名及其密码。
ftpguests文件内容如下 cat ftpguests 

root@iZb8uz4c6idgl0Z:/home/uftp# cat ftpguests
stu
stu
teacher
teacher
admin
4.3生成用户数据库ftpguests.db:

安装数据库生成工具db-util:

sudo apt-get install db-util

把上一步建立的用户文件生成数据库,并放到/etc/vsftpd/文件夹中:

sudo db_load -T -t hash -f ftpguests /etc/vsftpd/ftpguests.db

修改用户数据库的权限

sudo chmod 600 /etc/vsftpd/ftpguests.db

4.4修改pam认证文件:

vsftpd借助PAM认证工具来帮忙认证了,我们的本地用户登录ftp也是需要PAM来帮忙的。安装vsftpd的时候,它会有/etc/pam.d/目录里生成一个认证的配置文件:vsftpd ,而之前的vsftpd.conf里的选项 pam_service_name=vsftpd 指的正是PAM使用/etc/pam.d/下的vsftpd配置文件来认证。

在/etc/pam.d/vsftpd的第一行处添加下面的内容,

auth sufficient pam_userdb.so db=/etc/vsftpd/ftpguests
                    account sufficient pam_userdb.so db=/etc/vsftpd/ftpguests

说明:上面的内容一定要放在第一行,要不然不能同时支持虚拟用户和本地用户的,这一步是关键。上面的/etc/vsftpd/ftpguests文件指的就是我们刚刚生成的用户数据库。另外,这里选择sufficient而不是required的原因是,sufficient表示充分条件,可以让vsftpd同时支持虚拟用户和本地用户。
添加后的/etc/pam.d/vsftpd的文件是这样子的:

4.5建立每个虚拟用户的配置文件

为每个虚拟用户(stu、teacher、admin)建立它们各自的配置文件,以便对不同的用户进行不同的权限分配。可以理解成虚拟用户的配置文件是对vsftpd.conf的扩展,vsftpd.conf是对全局的控制,而每个虚拟用户的配置文件则是方便进行更精细、更个性的控制。
stu用户的配置文件:只能在自己的home目录下进行上传操作,并且不能下载,不能查看其它用户上传的内容,也不能修改。

cat /etc/vsftpd/stu | grep -v ‘^#‘
local_root=/var/ftp/stu
write_enable=YES	        #可以进行写操作,是下面设置的基础
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES	#可以创建文件夹

download_enable=NO	        #不能下载

teacher用户的配置文件:可以在自己的home目录里上传、下载文件,也可对文件夹重命名,拥有所有权限 

cat /etc/vsftpd/teacher | grep -v ‘^#‘
local_root=/var/ftp/teacher
anon_world_readable_only=NO         #对文件夹是否有读的权限,为YES时,没有读的权限,为NO时,可以查看文件夹内有哪些文件
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES         #可以对文件夹进行修改

admin用户的配置文件:可以对teacher,stu进行任何操作。它与teacher是不同在于local_root指定的文件夹包含了stu和teacher的home目录

cat /etc/vsftpd/admin | grep -v ‘^#‘
local_root=/var/ftp
anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

4.6全局配置文件/etc/vsftpd.conf:

现在再一次修改vsftpd.conf,该文件的内容为:

listen=YES
anonymous_enable=YES
local_enable=YES
local_root=/home/crazier         #把本地用户的登录目录限制在/home/crazier,这个根据你自己的要求进行修改
anon_root=/var/ftp/anon          #把匿名用户限制在/var/ftp/anon目录里
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_local_user=YES            #为了安全期间,开启用户的监牢限制
guest_enable=YES                 #开启vsftpd对虚拟用户的支持
guest_username=guest             #把虚拟用户映射到本地用户guest,这个值取决于 (第3步:  建立本地虚拟用户)中的值      
user_config_dir=/etc/vsftpd      #指定虚拟用户的配置文件所有的目录,确保/etc/vsftpd文件夹里有(第4.5步:建立每个虚拟用户的配置文件)中生成的stu teacher、 admin 文件
pam_service_name=vsftpd          #指定PAM使用的配置文件,在/etc/pam.d文件夹里
secure_chroot_dir=/var/run/vsftpd/empty
use_localtime=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem


另外几个比较实用的命令

1、重启vsftpd服务

service vsftpd restart

2、查看vsftpd服务状态

service vsftpd status

3、如果vsftpd服务状态为 stop/waiting可以使用一下命令查看具体原因

/usr/sbin/vsftpd


安利

Ubuntu 命令技巧: http://wiki.ubuntu.org.cn/index.php?title=UbuntuSkills&variant=zh-cn
Ubuntu 桌面指南: https://help.ubuntu.com// 

感谢Crazier的分享


Ubunton下搭建ftp服务器 实现虚拟用户、本地用户、匿名用户的登陆及权限