Linux初学者学习笔记

20171013 网络文件共享(一) FTP服务

2017-10-16  本文已影响53人  哈喽别样
  • FTP协议简介
  • FTP软件介绍
  • vsftpd服务简介
  • vsftpd配置
  • vsftpd虚拟用户

一、FTP协议简介

(一)特点

(二)两种模式

(1)被动模式(linux客户端默认)

建立数据连接时,先由服务器端通过命令连接将198和165两个随机数发送给客户端,客户端据此计算出服务器的端口号50853=198*256+165,并主动向服务器发出数据连接请求

(2)主动模式(windows客户端默认)

建立数据连接时,服务器主动在20端口向客户端发起请求

二、FTP软件介绍

(一)FTP服务器

(二)客户端软件

(三)FTP状态码

(四)用户认证:三种方式

三、vsftpd服务简介

四、vsftpd配置

(一)端口设置

(1)命令端口
(2)主动模式端口
connect_from_port_20=YES`     // 主动模式端口为20
// 注意即使指定其他端口此时值仍是YES,不可修改为NO

ftp_data_port=20`            // 指定主动模式的端口
// 服务器编辑配置文件
vim /etc/vsftpd/vsftpd.conf
connect_from_port_20=YES     //本行下添加如下内容
ftp_data_port=2020

service vsftpd restart

// 服务器增加共享文件
cd /var/ftp/pub
dd if=/dev/zero of=file1 bs=1M count=1024

// 客户端匿名登录,下载文件
ftp 192.168.136.229
Name (192.168.136.229:root): ftp
Password:
ftp> cd pub
ftp> ls
ftp> passive     //关闭被动模式,开启主动模式
ftp> get file1

// 服务器端查看端口活动,数据传输时打开了2020端口
ss -ntp
(3)被动模式端口范围
pasv_min_port=6000`     // 端口起始范围,0为随机分配
pasv_max_port=6010`     // 端口结束范围
// 服务器编辑配置文件
vim /etc/vsftpd/vsftpd.conf
connect_from_port_20=YES     //本行下添加如下内容
pasv_min_port=6000
pasv_max_port=6010

service vsftpd restart

// 服务器增加共享文件
cd /var/ftp/pub
dd if=/dev/zero of=file1 bs=1M count=1024
dd if=/dev/zero of=file2 bs=1M count=512
dd if=/dev/zero of=file3 bs=1M count=256

// 分别在三个客户端匿名登录,下载文件
ftp 192.168.136.229
Name (192.168.136.229:root): ftp
Password:
ftp> cd pub
ftp> get file1|file2|file3     //三个客户端各自下载file1/2/3

// 服务器端查看端口活动,数据传输时打开了3个在设置范围内的端口
ss -ntp

(二)时间设置

(三)匿名用户

(1)配置条目
anonymous_enable=YES            // 支持匿名用户
no_anon_password=YES            // 匿名用户略过口令检查,默认NO
anon_world_readable_only=NO     // 只能下载所有者、所属组、其他人都有读权限的文件,默认YES
anon_upload_enable=YES          // 匿名上传,注意文件系统权限
anon_mkdir_write_enable=YES     // 匿名创建目录
anon_other_write_enable=YES     // 可删除和修改上传的文件
anon_umask=077                  // 指定匿名上传umask
// 指定上传文件的默认所有者和权限
chown_uploads=YES               //默认NO
chown_username=wang
chown_upload_mode=0644
(2)实验:修改vsftpd服务匿名登录配置

(四)系统用户

guest_enable=YES          // 所有系统用户都映射成guest用户
guest_username=ftp        // 配合上面选项才生效,指定guest用户
local_enable=YES          // 是否允许linux用户登录
write_enable=YES          // 允许linux用户上传文件
local_umask=022           // 指定系统用户上传文件的默认权限
local_root=/ftproot       // 非匿名用户登录所在目录
// 禁锢所有系统用户在家目录中
chroot_local_user=YES     // 禁锢系统用户,默认NO
// 禁锢或不禁锢特定的系统用户在家目录中,与上面设置功能相反
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
// 当chroot_local_user=YES时,则chroot_list中用户不禁锢,白名单
// 当chroot_local_user=NO时,则chroot_list中用户禁锢,黑名单

(五)日志

xferlog_enable=YES                // (默认)启用记录上传下载日志
xferlog_std_format=YES            // (默认)使用wu-ftp日志格式
xferlog_file=/var/log/xferlog     // (默认)可自动生成
dual_log_enable=YES                     // 使用vsftpd日志格式,默认不启用
vsftpd_log_file=/var/log/vsftpd.log     // (默认)可自动生成

(六)提示信息

ftpd_banner=“welcometo mage ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt     //本条记录优先生效
dirmessage_enable=YES     // (默认)
message_file=.message     // (默认)信息存放在指定目录下.message
vim /etc/vsftpd/vsftpd.conf
banner_file=/etc/vsftpd/ftpbanner.txt
echo "this is hellopeiyang ftp service" > /etc/vsftpd/ftpbanner.txt
echo "public directory" > /var/ftp/pub/.message
echo "upload directory" > /var/ftp/upload/.message
service vsftpd restart

(七)登录控制

auth    required    pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
// 当sense=deny时,拒绝/etc/vsftpd/ftpusers文件中用户登录
// 当sense=allow时,允许/etc/vsftpd/ftpusers文件中用户登录
userlist_enable=YES    // 默认有此设置
userlist_deny=YES      // 黑名单,默认值,不提供输入口令的机会,NO为白名单
userlist_file=/etc/vsftpd/users_list     // 用户列表文件,此为默认值
max_clients=0     // 最大并发连接数,0为无限制
max_per_ip=0      // 每个IP同时发起的最大连接数,0为无限制

(八)传输控制

anon_max_rate=0      // 匿名用户的最大传输速率
local_max_rate=0     // 本地用户的最大传输速率
connect_timeout=60              // 主动模式数据连接超时时长
accept_timeout=60               // 被动模式数据连接超时时长
data_connection_timeout=300     // 数据连接无数据传输超时时长
idle_session_timeout=60         // 无命令操作超时时长
ascii_upload_enable=YES
ascii_download_enable=YES
vim /etc/vsftpd/vsftpd.conf
anon_max_rate=1024000
local_max_rate=2048000

service vsftpd restart
// 准备bob家目录的共享文件,设置相关权限
mkdir /home/bob/pub
setfacl -m u:bob:rwx /home/bob/pub/
cp /var/ftp/pub/file1 /home/bob/pub/

(九)vftpd服务配置

实现CentOS 6环境下vsftpd以非独立服务方式运行(CentOS 7所有服务由systemd管理,都是以非独立方式运行)

vim /etc/vsftpd/vsftpd.conf
listen=NO
vim /etc/xinetd.d/vsftpd
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
log_on_failure += USERID
disable = no
}

service vsftpd stop
service xinetd start
ss -ntlp

(十)实现基于SSL的ftps

ldd   `which vsftpd`
cd /etc/pki/tls/certs
make vsftpd.pem                              // 生成自签名证书
openssl x509 -in vsftpd.pem -noout -text     // 查看证书内容
cp vsftpd.pem /etc/vsftpd/
/etc/vsftpd/vsftpd.conf
ssl_enable=YES
allow_anon_ssl=NO
force_local_logins_ssl=YES
force_local_data_ssl=YES
rsa_cert_file=/etc/vsftpd/vsftpd.pem

service vsftp restart

五、vsftpd虚拟用户

(一)vsftpd虚拟用户介绍

(1)定义
(2)虚拟用户账号的存储方式

(二)实现基于DB的FTP虚拟用户

(1)创建DB数据库文件,存放虚拟用户和密码
vim /etc/vsftpd/ftpvusers
ftpuser1
ftp1
ftpuser2
ftp2

cd /etc/vsftpd/
db_load -T -t hash -f ftpvusers ftpvusers.db
chmod 600 ftpvusers.db
(2)建立系统用户
useradd -d /var/ftpsite -s /sbin/nologin ftpvuser
chmod 555 /var/ftpsite/      //CentOS 7下根目录谁也不能有写权限
// 建立专属上传子目录upload
mkdir /var/ftpsite/upload
setfacl -m u:ftpvuser:rwx /var/ftpsite/upload/
(3)创建pam配置文件
vim /etc/pam.d/vsftpd.vuser     // 指定虚拟用户DB数据库文件目录
auth required pam_userdb.so db=/etc/vsftpd/ftpvusers
account required pam_userdb.so db=/etc/vsftpd/ftpvusers
(4)指定pam配置文件
vim /etc/vsftpd/vsftpd.conf 
pam_service_name=vsftpd.vuser      // 指定pam配置文件路径
guest_enable=YES
guest_username=ftpvuser            // 将虚拟用户映射为系统用户ftpvuser
user_config_dir=/etc/vsftpd/ftpvusers.conf.d/     //指定每个虚拟用户独立配置文件路径
(5)建立每个虚拟用户的独立配置文件
mkdir /etc/vsftpd/ftpvusers.conf.d
cd /etc/vsftpd/ftpvusers.conf.d/
vim ftpuser1     // 配置文件名称必须与虚拟账户名称完全相同
anon_upload_enable=YES
anon_mkdir_write_enable=YES

vim ftpuser2     // 配置文件名称必须与虚拟账户名称完全相同
local_root=/app/ftp2    // 指定共享根目录为/app/ftp2
anon_upload_enable=YES
anon_mkdir_write_enable=YES
(6)配置共享根目录,重启vsftpd服务
touch /var/ftpsite/ftp1file     //用于测试时验证是否登录进入了相应的目录
mkdir -p /app/ftp2/upload
chmod 555 /app/ftp2
setfacl -m u:ftpvuser:rwx /app/ftp2/upload/
touch /app/ftp2/ftp2file        //用于测试时验证是否登录进入了相应的目录
systemctl restart vsftpd
(7)测试

(三)实现基于MYSQL的FTP虚拟用户

(1)FTP服务器上安装vsftpd和pam_mysql
// 安装并启动vsftpd服务
yum install vsftpd
systemctl start vsftpd

// 编译安装pam_mysql
yum groupinstall "development tools"
yum install mariadb-devel pam-devel
tar xvf pam_mysql-0.7RC1.tar.gz -C /usr/local/src/
cd /usr/local/src/pam_mysql-0.7RC1/
./configure --with-mysql=/usr --with-pam=/usr  --with-pam-mods-dir=/lib64/security
make && make install
(2)FTP服务器上建立系统用户
useradd -d /app/ftpsite -s /sbin/nologin ftpvuser
chmod 555 /app/ftpsite/
cd /app/ftpsite/
mkdir /app/ftpsite/upload
setfacl -m u:ftpvuser:rwx /app/ftpsite/upload
(3)MySQL服务器上配置虚拟用户的数据库
// 安装MariaDB并启动服务
yum install mariadb-server
systemctl start mariadb
mysql_secure_installation

// 建立虚拟用户数据库 
mysql -uroot -pmagedu
MariaDB [(none)]> create database ftpdb;
MariaDB [(none)]> use ftpdb;
MariaDB [ftpdb]> create table ftpvusers (id int unsigned auto_increment primary key,username char(30),password char(48));
// 使用password()函数加密密码,避免明文存储密码
MariaDB [ftpdb]> insert ftpvusers (username,password) values ('ftpuser1',password('centos')),('ftpuser2',password('centos'));
MariaDB [ftpdb]> grant all on ftpdb.* to ftpuser@'192.168.136.%' identified by 'centos';
MariaDB [ftpdb]> flush privileges;
(4)FTP服务器上创建pam配置文件
vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=ftpuser passwd=centos host=192.168.136.130 db=ftpdb table=ftpvusers usercolumn=username passwdcolumn=pas
sword crypt=2
account required pam_mysql.so user=ftpuser passwd=centos host=192.168.136.130 db=ftpdb table=ftpvusers usercolumn=username passwdcolumn=
password crypt=2
(5)FTP服务器上指定pam配置文件
vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.mysql
guest_enable=YES
guest_username=ftpvuser
user_config_dir=/etc/vsftpd/vusers.conf.d/
(6)FTP服务器上建立每个虚拟用户的独立配置文件
mkdir /etc/vsftpd/vusers.conf.d
vim /etc/vsftpd/vusers.conf.d/ftpuser1
anon_upload_enable=YES

vim /etc/vsftpd/vusers.conf.d/ftpuser2
anon_upload_enable=YES
local_root=/app/ftpsite2/
(7)FTP服务器上配置共享根目录,重启vsftpd服务
mkdir -p /app/ftpsite2/upload
chmod 555 /app/ftpsite2
setfacl -m u:ftpvuser:rwx /app/ftpsite2/upload/
touch /app/ftpsite/ftpfile1
touch /app/ftpsite2/ftpfile2
(8)测试
上一篇 下一篇

猜你喜欢

热点阅读