今天来说三个文件共享服务,首先说一下vsftp,即为ftp(文件传输协议),vsftp非常安全的ftp,因为早期ftp是明文的,早期还不会有人来窃取数据,随着时代的发展,信息安全越来越受到重视,故ftp经过发展后出现了vsftp的版本。
ftp是一种应用层的服务,通常只能用于linux和linux之间或者linux即unix间文件共享,不能与windows之间文件共享。在应用层协议中监听于port21。为了使客户端与服务器端能够互动,而不仅仅是请求报文,ftp有两种数据,一种为命令连接,为文件管理类命令,还有一种是数据连接,用于数据传输。数据的请求方式如下:
主动:有服务器创建连接
命令: Client:50000 --> Server: 21
数据:Server : 20/tcp
--> Client: 50000+
被动:由客户端创建连接
命令:Client:50000 --> Server: 21
数据:Client: 50000+1 -->
Server: 随机端口
在连接时会产生响应码,用于反馈信息连接的返回值:
1xx:信息
2xx:成功类的状态码
3xx:提示需进一步提供补充类信息的状态码
4xx:客户端错误
5xx:服务端错误
在Centos中使用的是vsftpd
需要首先安装vsftpd
yum
install vsftpd
用户认证配置文件:/etc/pam.d/vsftpd
服务脚本:/etc/rc.d/init.d/vsftpd
配置文件目录:/etc/vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
共享资源位置:/var/ftp
匿名用户(映射为ftp用户)共享资源位置:/var/ftp
系统用户通过ftp访问的资源的位置,用户自己的家目录
虚拟用户通过ftp访问的资源的位置:给虚拟用户指定的映射成为系统的用户的家目录
启动服务 service vsftpd start
可以使用ss -tan查看是否监听21端口:
在使用ftp时有两种用户一种为系统用户,还有一种为匿名用户,当匿名用户访问时,会映射为ftp,共享资源为/var/ftp目录下。下面介绍了vsftpd的配置文件以及ftp用户的简介:
Centos 6.6下:
用户认证配置文件:/etc/pam.d/vsftpd
服务脚本:/etc/rc.d/init.d/vsftpd
配置文件目录:/etc/vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
共享资源位置:/var/ftp
匿名用户(映射为ftp用户)共享资源位置:/var/ftp
系统用户通过ftp访问的资源的位置,用户自己的家目录
虚拟用户通过ftp访问的资源的位置:给虚拟用户指定的映射成为系统的用户的家目录
匿名用户登录,显示的是服务器端/var/ftp/目录下的文件,输入的用户名ftp,密码为空:
通过使用help可以获得帮助命令:
可以在windows下执行:
使用系统用户登录:
若想要上传文件至服务器端,需要将服务器端的配置文件中更改如下的权限,并且由于服务器端的/etc/ftp目录的权限都为root,需要创建一个目录,将文件夹权限中增加ftp:
在/etc/vsftpd/vsftpd.conf
匿名用户的配置:
anonymous_enable=YES
#anon_upload_enable=YES 是否允许匿名用户上传数据
#anon_mkdir_write_enable=YES 是否允许匿名用户创建目录
#anon_other_write_enable=YES 是否能删除文件
注意:在配置文件中,配置行需要顶格不能有空格;更改完配置文件后需重启服务。
增加ftp为upload的权限:
在客户端使用lcd命令切换至客户端的目录如/etc,使用put命令上传文件至服务器端upload,还能够添加删除目录如下:
系统用户的配置:
local_enable=YES
write_enable=YES
local_umask=022
禁锢所有的用户在家目录下,这样可以保障服务器端的安全性:
#chroot_local_user=YES
系统用户默认是有读写权限的,共享目录为家目录:
禁锢指定的ftp本地用户在家目录
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
如下11为用户限制,在chroot_list文件内,不能切换至别的目录,test则可以自由切换:
日志
xferlog_enable=YES
xferlog_std_format=YES
#xferlog_file=/var/log/xferlog
改变上传文件的属主:
#chown_uploads=YES
#chown_username=whoever
链接超时时长
#idle_session_timeout=600
数据链接超时时长
#data_connection_timeout=120
vsftpd使用pam完成用户认证,其用到的pam配置文件:
pam_service_name=vsftpd
是否启用控制用户登录的列表文件
userlist_enable=YES
userlist_deny=YES 默认 /etc/vsftpd/user_list
连接限制:
max_clients : 最大并发连接数;
max_per_ip:每个ip可同时发起的并发请求;
传输速率:
anno_max_rate : 匿名用户最大传输速率,单位是“字节/秒”
local_max_rate: 本地用户最大传输速率,单位是“字节/秒”
虚拟用户:
所有的虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为此系统账号的家目录;
各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定;
虚拟用户账号的存储方式:
文件:编辑文件
奇数行为用户名
偶数行为密码
此文件需要被编码为hash格式;
关系型数据库中的表中:
即时查询数据库完成用户认证;
通过mysql与vsftp构建虚拟用户:
一、安装所需要程序
mysql库:
pam要依赖于pam-mysql
yum - install vsftpd pam_mysql
mysql-devel mysql-server
注意pam_mysql由epel源提供。
二、创建虚拟用户账号
1.准备数据库及相关表
首先请确保mysql服务已经正常启动。而后,按需要建立存储虚拟用户的数据库即可,这里将其创建为vsftpd数据库。
2、添加测试的虚拟用户
根据需要添加所需要的用户,需要说明的是,这里将其密码为了安全起见应该使用PASSWORD函数加密后存储。
创建数据库vsftpd:
[[email protected] yum.repos.d]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
mysql> CREATE DATABASE vsftpd;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT SELECT ON vsftpd.* TO [email protected]‘172.16.%.%‘ IDENTIFIED BY ‘cd521709‘;
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
首先创建数据库vsftpd,可以在客户端登陆查看服务器端的数据库:
[[email protected] pam.d]# mysql -uvsftpd -h172.16.249.108 -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
MySQL [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
| vsftpd |
+--------------------+
3 rows in set (0.00 sec)
在服务器端创建table:
mysql> use vsftpd;
Database changed
mysql> CREATE TABLE users (
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> name VARCHAR(50) BINARY NOT NULL,
-> password CHAR(48) BINARY NOT NULL );
Query OK, 0 rows affected (0.02 sec)
查看表内信息:
mysql> DESC
users;
+--------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default |
Extra |
+--------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO
| | NULL | |
| password |
char(48) | NO |
| NULL | |
+--------+------------------+------+-----+---------+----------------+
3 rows in set (0.00
sec)
mysql> insert
into users(name,password) values(‘tom‘,password(‘magedu‘));
Query OK, 1 row
affected (0.00 sec)
mysql> insert
into users(name,password) values(‘jerrt‘,password(‘magedu‘));
Query OK, 1 row
affected (0.00 sec)
查看所有用户信息
mysql> SELECT *
FROM users;
+----+-------+-------------------------------------------+
| id | name | password |
+----+-------+-------------------------------------------+
| 1 | tom
| *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |
| 2 | jerrt |
*6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |
+----+-------+-------------------------------------------+
2 rows in set (0.00
sec)
三、配置vsftpd
1.建立pam认证所需文件
在ftp服务器端,非mysql服务器端
#vim /etc/pam.d/vsftpd.mysql
添加如下两行
auth required pam_mysql.so user=vsftpd passwd=cd521709 host=172.16.249.108 db=vsftpd table=users usercolum=name passwdcolumn=password crypt=0
account required pam_mysql.so user=vsftpd passwd=cd521709 host=172.16.249.108 db=vsftpd table=users usercolum=name passwdcolumn=password crypt=0
2.修改vsftpd的配置文件,使其适应mysql认证
建立虚拟用户映射的系统用户及对应的目录
# useradd -s /sbin/nologin -d /var/ftproot vuser 将创建的虚拟用户的家目录指定为/var/ftproot
# chmod go+rx
/var/ftproot
请确保/etc/vsftpd.conf中已经启用了以下选项
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
而后添加以下选项
guest_enable=YES
guest_username=vuser
并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql
如下为自己的配置:
pam_service_name=vsftpd.mysql
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=vuser
可以使用windows中的cmd来登陆校验:
五、配置虚拟用户具有不同的访问权限
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。
1、配置vsftpd为虚拟用户使用配置文件目录
#vim
/etc/vsftpd/vsftpd.conf
添加如下选项
user_config_dir=/etc/vsftpd/vusers_config
2、创建所需要目录,并为虚拟用户提供配置文件
# mkdir
/etc/vsftpd/vusers_config/
# cd
/etc/vsftpd/vusers_config/
# touch tom jerry
3、配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让tom用户具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/tom文件,在里面添加如下选项即可。
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}
例tom文件中
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
则可上传、创建、删除文件:
例jerrt文件中
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
则不能上传、创建、删除文件