文件服务:
ftp:应用层,C/S,文件共享;file transfer protocol; nfs,cifs:文件系统接口,网络文件系统; nfs:network file system cifs:common internet file system samba 网络存储: NAS:Network Attached Storage,文件服务器,nfs或cifs,文件级别; SAN:Storage Area Network,块级别共享服务,分区-->格式化-->创建文件系统;IPSAN, FCSAN;
ftp:
file transfer protocol,21/tcp也可以说监听在20号端口做数据连接的传输通道!(主动模式下使用 TCP 20号端口,被动模式使用随机端口,被动模式下向客户端发送数据时发送一个 除以 256 得商和余数的数据让客户端去请求这个端口)
C/S: Client --> ftp-->Server Client:Connect Server:Listen 连接: 命令连接:命令传输,连接一直存在; 数据连接:数据传输,按需创建; 数据连接的建立模式: 主动模式:服务器通过20/tcp主动连接客户端的命令连接端口向后最近一个空闲端口;PORT; 被动模式:客户端发出数据请求后,服务端会响应一个打开的临时使用的随机端口号发送给客户端,客户端对此端口进行请求;PASV; 数据传输模式: 文本格式:ASCII 二进制格式:BINARY 协议安全: 明文:数据、认证时传输账号和密码均是明文 ; 安全增强: ftp over ssl/tls:ftps ftp over ssh:sftp 虚拟用户账号; c/s: Server: Windows:Serv-U, IIS, ... 开源解决方案: wuftpd:Washington University ftp daemon vsftpd:Very Secure ftp daemon proftpd, pureftpd, ... Client: GUI:flashfxp, cute, filezilla, gftp, ... CLI:ftp, lftp, ...
vsftpd:
程序环境:
-
主程序:/usr/sbin/vsftpd
Unit File:/usr/lib/systemd/system/vsftpd.service -
配置文件:/etc/vsftpd/vsftpd.conf
-
文档路径映射:
fedora, /home/fedora/pub/a.txt --> ftp://HOST:PORT/pub/a.txt 用户的家目录映射:访问vsftpd服务必须以某个系统用户的身份进行;此用户的家目录即为文档映射的根目录; 匿名用户:anonymous,映射为一个系统用户,此用户为ftp;
配置:vsftpd.conf
-
格式 :directive VALUE,…
directive:指令之前不能存在任何字符,包括空白;
-
匿名用户配置:
anonymous_enable=YES anon_upload_enable=YES 才能上传 anon_mkdir_write_enable=YES 才能新建目录 anon_other_write_enable=YES 开放其他的写权限,这样才能删除
-
本地用户:root用户不能登录ftp
local_enable=YES write_enable=YES 注意:凡是在/etc/vsftpd/ftpusers中的用户都不能登录
-
认证服务:
pam_service_name=vsftpd
/etc/pam.d/vsftpd pam: pluggable authencate module:插入式认证模块
-
切换目录时的提示信息:
dirmessage_enable=YES 匿名用户就是创建/var/ftp/*/.messages 文件, *表示你想在那个目录下显示提示信息 ,提示信息写在 此文件内
-
修改上传文件的属主:
chown_uploads=YES chown_username=USERNAME (这里改成要改的属主名,不指名默认root)
-
数据传输模式
connect_from_port_20=YES 是否启用PORT模式
-
设定会话超时时长
idle_session_timeout=600 data_connection_timeout=120 数据传输闲时时长
-
设定连接及传输速率
local_max_rate:本地用户的最大传输速率,单位字节;默认为0,表示无限制; anon_max_rate:匿名用户的最大传输速率 max_clients:最大并发连接数; max_per_ip:每个IP允许发起的最大连接数;
-
禁锢用户于自己的家目录:
会引入别的风险,因此,要求用户对自己的家目录不能有写权限;
先touch /etc/vsftpd/chroot_list 此文件用来存用户名
(1) 禁锢所有用户 chroot_local_user=YES (2) 禁锢部分用户 (a) 白名单:名单中的用户不被禁锢; chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list (b) 黑名单:名单中的用户被禁锢 chroot_local_user=NO chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list
-
/etc/vsftpd/user_list控制用户访问vsftpd:
(1) 白名单,仅此文件中的用户能登录 userlist_enable=YES userlist_deny=NO (2) 黑名单,默认 userlist_enable=YES userlist_deny=YES
具体可以参考 man vsftpd.conf
虚拟用户账号:
vsftpd依赖pam完成认证,pam存储支持的认证方式,vsftpd都可调用;
pam:认证框架 模块化:/lib64/security/pam*.so 配置文件:/etc/pam.conf和/etc/pam.d/* 账号密码存储于何处? 文件、MySQL、ldap、redis、...
pam_mysql模块
CentOS 6:epel CentOS 7:编译安装
/etc/pam.d/vsftpd
编译安装pan: (1) 编译环境; (2) 依赖关系:mariadb-devel, pam-devel # ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security/ # make install
MySQL设置: mysql> CREATE DATABASE vsftpd; 创建数据库 mysql> GRANT ALL ON vsftpd.* TO 'vsftpd'@'127.0.0.1' IDENTIFIED BY 'mageedu'; 创建用户并授权 mysql> CREATE TABLE vsftpd.users (uid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE KEY,name VARCHAR(100) NOT NULL PRIMARY KEY,password CHAR(48) NOT NULL); 创建表在vsftp下叫users mysql> use vsftpd 进入vsftp mysql> INSERT INTO users (name,password) VALUES ('tom',PASSWORD('mageedu')),('jerry',PASSWORD('mageedu')),('lucy',PASSWORD('mageedu')); MariaDB [(none)]> flush privileges; 同步数据库 准备要映射成为的系统账号:(就是创建一个家目录) # mkdir -pv /ftproot/{pub,upload} # useradd -d /ftproot vuser # setfacl -m u:vuser:rwx /ftproot/upload 准备基于mysql认证的pam配置文件:/etc/pam.d/vsftpd.mysql,把以下文件复制到此文件中 auth required pam_mysql.so host=127.0.0.1 user=vsftpd passwd=mageedu db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 account required pam_mysql.so host=127.0.0.1 user=vsftpd passwd=mageedu db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 配置vsftpd启用虚拟用户,并使用指定的pam service:vsftpd.conf pam_service_name=vsftpd.mysql guest_enable=YES guest_username=vuser 配置每虚拟用户拥有不同的权限:vsftpd.conf user_config_dir=/etc/vsftpd/vusers_conf # mkdir /etc/vsftpd/vusers_conf 创建那个提供配置文件的目录 # touch USERNAME 创建配置各个虚拟用户的权限文件 tom 、lucy 等文件(文件名必须为用户名) 权限配置指令:(把一下的这些复制到刚创建的文件中) anon_upload_enable=YES 开放上传权限 anon_mkdir_write_enable=YES 开放创建目录权限 anon_other_write_enable=YES 开放创建文件权限
原创文章,作者:qzx,如若转载,请注明出处:http://www.178linux.com/52840