day1-Vsftpd
FTP
File Transfer Protocol
基于c/s
FTP会话属于复合TCP连接
控制连接TCP21端口,发送FTP命令信息
数据连接TCP20端口,上传/下载数据
数据连接模式
主动 20端口---->主动连接---->客户端
被动 服务端??<----被动连接<----客户端
传输模式
文本模式 ASCII 模式,文本序列传输
二进制模式 Binary模式,二进制序列传输
FTP用户类型
匿名用户:ftp或anonymous
本地用户:Linux服务器本机的系统用户账号
虚拟用户:账号信息存放在独立的文件或数据库内
vsftpd
Very Secure FTP Daemon
非常案例的FTP守护程序
服务程序/usr/sbin/vsftpd
服务脚本/etc/init.d/vsftpd
ftp工具
匿名浏览 ftp://ip
用户验证访问ftp://user:pass@IP/path
主配置文件
配置目录/etc/vsftpd
主配置文件 vsftpd.conf
黑名单文件 ftpusers
黑/白名单文件 user_list
[root@localhost test]# ls /etc/vsftpd/
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
帮助
当我们忘记时可以查看帮助文档和MAN 配置文件
/usr/share/doc/
全局FTP配置
listen 是否以独立运行方式监听服务
listen_address 设置监听FTP服务的IP地址
listen_port 设置监听FTP服务的端口
write_enable 是否雇用写入权限
download_enable 是否允许下载
anonymous_enable 是否雇用匿名访问
anon_root 匿名FTP的根目录
local_enable 是否雇用本地用户
local_root 本地用户的FTP根目录
local_umask 本地用户上传的权限掩码
chroot_local_user 是否禁锢在主目录
用户访问控制
黑名单文件 /etc/vsftpd/ftpusers
列入其中的用户被禁止访问
黑白名单文件 /etc/vsftpd/user_list
userlist_enable=YES 决定是否启动些文件
userlist_deny=YES|NO 当YES时为黑名单,否则白名单
FTP连接及传输控制
并发数限制 带宽限制
max_clients 限制并发的客户端个数
max_per_ip 限制每个客户机IP的并发连接数
anon_max_rate 匿名最大速度(字节/秒)
local_max_rate 验证用户最大速率(字节/秒)
当
userlist_enable=YES
userlist_deny=NO
仅允许列表中的用户
清空user_list添加需要访问FTP的用户
-------------------------------------------------
黑名单不允许登录FTP服务
[root@localhost vsftpd]# cat ftpuser
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
实验
vsftpd + pam + mysql
首先安装相应的软件包
yum -y install vsftpd
yum -y install mysql-server mysql-devel
yum -y groupinstall "Development Tools" "Development Libraries"
yum install pam-devel -y
安装pam_mysql-0.7RC1
首先去官网下
http://nchc.dl.sourceforge.net/project/pam-mysql/pam-mysql/0.7RC1/pam_mysql-0.7RC1.tar.gz
tar xf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1
./configure --with-mysql=/usr --with-openssl
make
make install
pam包已装上
[root@localhost pam_mysql-0.7RC1]# ll /lib/security
total 140
-rwxr-xr-x. 1 root root 876 Aug 14 23:11 pam_mysql.la
-rwxr-xr-x. 1 root root 138564 Aug 14 23:11 pam_mysql.so
安装后准备
/etc/init.d/vsftpd start
/etc/init.d/mysqld start
chkconfig vsftpd on
chkconfig mysqld on
建立pam认证文件
vim /etc/pam.d/vsftpd.mysql
auth required /lib/security/pam_mysql.so user=user1 passwd=password1 host=localhostdb=vsftpd table=ftpuser usercolumn=user passwdcolumn=password crypt=0
account required /lib/security/pam_mysql.so user=user1 passwd=password1 ost=localhost db=vsftpd table=ftpuser usercolumn=user passwdcolumn=password crypt=0
进入mysql
mysql> create database vsftpd;
mysql> use vsftpd;
mysql> create table ftpuser (
id int AUTO_INCREMENT NOT NULL,
user char(20) binary NOT NULL,
password char(48) binary NOT NULL,
primary key(id)
);
myssql> desc ftpuser;
mysql> grant select on vsftpd.* to user1@localhost identified by 'password1';
mysql> grant select on vsftpd.* to user1@127.0.0.1 identified by 'password1';
mysql> flush privileges;
新建两个虚拟用户
mysql> insert into ftpuser(user,password) values('vuser1','1');
mysql> insert into ftpuser(user,password) values('vuser2','1');
mysql> select * from ftpuser
-> ;
+----+--------+----------+
| id | user | password |
+----+--------+----------+
| 1 | vuser1 | 1 |
| 2 | vuser2 | 1 |
+----+--------+----------+
2 rows in set (0.01 sec)
验证数据库
mysql -uuser1 -ppassword1
新建系统用户-->虚拟用户家目录
useradd -s /sbin/nologin -d /var/vsftpdroot/ vuser
chmod go+rw /var/vsftpdroot
修改配置文件
vim /etc/vsftpd/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=vsftpd.mysql
以上配置VSFTPD虚拟用户 虚拟用户就是匿名用户
注:配置文件系统不要写错,否则无法登录
补充
配置虚拟用户具有不同的访问权限
# vim vsftpd.conf
添加如下选项
user_config_dir=/etc/vsftpd/vuser_acl_dir
创建所需要目录,并为虚拟用户提供配置文件
mkdir /etc/vsftpd/vuser_acl_dir
cd /etc/vsftpd/vuser_acl_dir
touch vuser1 vuser2
vim /etc/vsftpd/vuser_acl_dir/vuser1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
验证
vuser2用户
匿名用户
虚拟用户还有一种方法
确认安装PAM服务相关部件
yum -y install pam*
这里要特别安装一个db4的包,用来支持文件数据库。
yum -y install db4*
建立文件 两个用户
[root@localhost ~]# cat /etc/vsftpd/vuser
vu1 用户名
1 密码
vu2 用户名
2 密码
使用db_load命令生成虚拟用户口令认证文件
db_load -T -t hash -f /etc/vsftpd/vsftpd.user /etc/vsftpd/vsuser.db
useradd vuser -s /sbin/nologin -d /var/vuserroot/
vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=vu
注释全部的行,添加以下内容
vim /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
关于
FTP并发及带宽限制
实验
将50M的文件共享
匿名用户10KB/S
普通用户50KB/S
每个IP2个并发连接
最多允许100个并发连接
生成50M文件
[root@localhost ftp]# dd if=/dev/zero of=file50M count=50000 bs=1000
50000+0 records in
50000+0 records out
50000000 bytes (50 MB) copied, 0.961573 s, 52.0 MB/s
配置文件加/etc/vsftpd/vsftpd.conf最后加
限制IP并发连接
max_clients=100
max_per_ip=2
配置文件加/etc/vsftpd/vsftpd.conf最后加
限制速率
匿名用户10KB/S
本地用户50KB/S
注:默认单位是字节
anon_max_rate=10000
local_max_rate=50000
此为匿名用户
本地用户
加密方式
FTPS SSL
SFTP SSH
还有一个小技巧,可以和HTTP服务合起来
HTTP家目录和VSFTPD目录设为相同
我们可以通过FTP来远程更新网页内容