FTP-网络文件服务器
部署思路
- 单纯上传下载ftp
- 系统集成间的共享 samba
- 网络存储服务器 NFS
网络文件服务器:通过网络共享文件或文件夹,实现数据共享
NAS ( network append storage):共享的是文件夹
- FTP:文件服务器
- samba:不同系统间的文件夹或设备共享
- NFS:网络文件系统
FTP介绍
- FTP (File transfer protocol)是TCP/IP 协议组中的协议之一 ,是一个TCP协议。
- 功能:在服务器与客户端之间进行文件的传输。FTP就是实现两台计算机之间的拷贝。从远程计算机拷贝文件至自己的计算机上,称之为“下载 (download)”文件将文件从自己计算机中拷贝至远程计算机上,则称之为“上传(upload)”文件
- 这个古老的协议使用的是明码传输方式,且过去有相当多的安全危机历史
- 为了更安全的使用 FTP 协议 ,我们主要介绍较为安全但功能较少的 vsftpd(very secure File transfer protocol )这个软件。
- FTP是一个C/S类型的软件,FTP监听TCP端口号为21,数据端口为20
应用场景
- 文件服务器
- 下载服务器
- 上传服务器
FTP应用模式
- FTP支持两种模式,一种方式叫做Standard(也就是 PORT方式,主动方式),一种是 Passive (也就是PASV ,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。 Passive模式FTP的客户端发送 PASV命令到 FTP Server。
- 主动模式:Port模式FTP客户端首先和FTP服务器的TCP21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据,vsftp默认模式。
- 被动模式:Passive模式在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令而是PaSv命令。FTP服务器收到PaSv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。
FTP访问方式
- FTP服务器在默认的情况下,依据使用者登录的情况而分为三种不同的身份,分别是
- 实体账号:本地账户
- 来宾账户: guest
- 匿名登录者 :anonymous ftp
FTP服务器部署
// a、 vsftp安装
yum -y install vsftpd// b、 vsftp开机启动
systemctl enable vsftpd
// Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to/usr/lib/systemd/system/vsftpd.service.// c、启动vsftp服务
systemctl start vsftpd//d、 验证启动
Isof -i :21
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vsftpd 1951 root 4u IPv6 32837 0t0 TCP *:ftp (LISTEN)
相关配置文件
- 主配文件:/etc/vsftpd/vsftpd.conf
- 下载目录:/var/ftp/
- FTP日志:/var/log/xferlog
FTP客户端
FTP相关命令
虚拟用户登陆
案例
为了解决公司员工文件存储和下载的需求。要求部署内部FTP服务器,员工可以通过自己的账
号的权限对FTP进行操作。
- 公司公共文件可以通过圈名下载
- 公司财务部、商务部、行政部、技术部分别拥有自己的部门文件夹,彼此之间相互隔离
- 部门之间只有主管才能拥有上传权限,普通员工只能下载
- 禁止用户查看家目录以外的数据
- 确保ftp账号安全
案例拆解
- FTP需要开启匿名下载 默认FTP支持匿名下载
- 分析针对不同部分实现目录隔离 有两种方法1.同部门共用本地账号2.虚拟账号
- 部门内部员工权限不同 实现方法 虚拟账号
- 禁止用户切出 chroot
- 防止本地账号泄露 虚拟账号
部署步骤
- 创建虚拟用户映射的本地账号
创建虚拟用户映射的本地账号
useradd -s /sbin/nologin -d /var/tmp/vuser_ftp yudan
新版vsftpd不允许用户主目录有w权限,因此在主目录下新建一个子目录,赋予700权限。所有上传、下载、删除、重命名等操作只能在子目录中进行
chmod 500 /var/tmp/vuser_ftp设置不同部门之间的根文件夹,给予700权限
mkdir /var/tmp/vuser _ftp/shichang
mkdir /var/tmp/vuser _ftp/caiwu
mkdir /var/tmp/vuser _ftp/xingzheng
mkdir /var/tmp/vuser _ftp/jishu
chmod 700 /var/tmp/vuser_ftp/*修改部门共享文件夹的所有者和属组为yudan
chown yudan.yudan /var/tmp/vuser_ftp -R
- 配置文件开启虚拟用户验证
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect _from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
Is_recurse_enable=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_usemame=ayitula
virtual_use_local_privs=NO
user_config_dir=/etc/vsftpd/vconf.d/
- 建立虚拟用户验证数据库
建立虚拟用户账号密码文件
cat /etc/vsftpd/vuser
sc_01
123
xZ_01
123
js_01
123
cw_01
123
SC_02
222
xz_02
222
js_02
222
cw_02
222生成账号密码数据库文件
db _load -T -t hash -f /etc/vsftpd/vuser /etc/vsftpd/vuser.db
chmod 600 /etc/vsftpd/vuser.db
- 开启pam认证
cat /etc/pam.d/vsftpd
#注意要添加到开头
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
#% PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
- 设置不同部门员工的权限
建立部门员工子配置文件,用于定义权限
mkdir /etc/vsftpd/vconf.d/定义虚拟用户权限
部门主管有管理权限
主管模板文件
cat /etc/vsftpd/vconf.d/01_temp
#指定家目录
local_root=/var/tmp/vuser_ftp/xxx
#允许新建文件或目录权限
anon_umask=077
#开放下载权限
anon_world_readable_only=NO
#开放上传权限
anon_upload_enable=YES
#开放创建目录的权限
anon_mkdir_write_enable=YES
#开放删除和重命名目录的权限
anon other write enable=YES部门员工只有下载权限
部门员工模板文件
cat /etc/vsftpd/vconf.d/02_temp
local_root=/var/tmp/vuser_ftp/xxx
anon_ world_readable_only=NO