不以物喜不以己悲,生活不会突变,你要做的只是耐心和积累。
FTP Server
作用:提供文件共享服务
FTP基础
FTP: 文件传输协议
软件包: vsftpd
FTP端口: 控制端口21/tcp;数据端口20/tcp(主动模式)
配置文件: /etc/vsftpd/vsftpd.conf
FTP的工作模式
主动模式: FTP 服务器主动向客户端发起连接请求。
被动模式: FTP 服务器等待客户端发起连接请求(FTP 的默认工作模式)。
vsftpd默认配置
FTP Server
CentOS6
yum -y install vsftpd #安装
service vsftpd restart #重启
chkconfig vsftpd on #开机自启动
1.SELinux
sed -ri '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config #关闭SELinux,c表示整行替换
setenforce 0
2.iptables[暂关]
iptables -F
service iptables save
CentOS7
yum -y install vsftpd
systemctl restart vsftpd
systemctl enable vsftpd
1.SELinux
sed -ri '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config #重启生效
setenforce 0 #暂时生效
2.firewalld
firewall-cmd --permanent --add-service=ftp #添加防火墙允许策略
firewall-cmd --reload
vsftpd服务程序
vsftpd 作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到 FTP 服务器上。
- 匿名开放模式: 是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到 FTP 服务器。
- 本地用户模式: 是通过 Linux 系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。
- 虚拟用户模式: 是这三种模式中最安全的一种认证模式,它需要为 FTP 服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供 FTP 服务程序进行认证使用。
vsftpd 服务程序常用的参数以及作用:
参数 | 作用 |
---|---|
listen=[YES|NO] | 是否以独立运行的方式监听服务 |
listen_address=IP 地址 | 设置要监听的 IP 地址 |
listen_port=21 | 设置 FTP 服务的监听端口 |
download_enable=[YES|NO] | 是否允许下载文件 |
userlist_enable=[YES|NO] | 是否启用用户列表 |
userlist_deny=[YES|NO] | 禁止或允许启用用户列表 |
max_clients=0 | 最大客户端连接数, 0 为不限制 |
max_per_ip=0 | 同一 IP 地址的最大连接数, 0 为不限制 |
anonymous_enable=[YES|NO] | 是否允许匿名用户访问 |
anon_upload_enable=[YES|NO] | 是否允许匿名用户上传文件 |
anon_umask=022 | 匿名用户上传文件的 umask 值 |
anon_root=/var/ftp | 匿名用户的 FTP 根目录 |
anon_mkdir_write_enable=[YES|NO] | 是否允许匿名用户创建目录 |
anon_other_write_enable=[YES|NO] | 是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限) |
anon_max_rate=0 | 匿名用户的最大传输速率(字节/秒), 0 为不限制 |
local_enable=[YES|NO] | 是否允许本地用户登录 FTP |
local_umask=022 | 本地用户上传文件的 umask 值 |
local_root=/var/ftp | 本地用户的 FTP 根目录 |
chroot_local_user=[YES|NO] | 是否将用户权限禁锢在 FTP 目录,以确保安全 |
local_max_rate=0 | 本地用户最大传输速率(字节/秒), 0 为不限制 |
备份vsftpd服务程序的主配置文件
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak #备份原配置文件
grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
cat /etc/vsftpd/vsftpd.conf #查看文件内容
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
匿名开放模式
可以向匿名用户开放的权限参数以及作用:
参数 | 作用 |
---|---|
anonymous_enable=YES | 允许匿名访问模式 |
anon_umask=022 | 匿名用户上传文件的 umask 值 |
anon_upload_enable=YES | 允许匿名用户上传文件 |
anon_mkdir_write_enable=YES | 允许匿名用户创建目录 |
anon_other_write_enable=YES | 允许匿名用户修改目录名称或删除目录 |
1 anonymous_enable=YES
2 anon_umask=022
3 anon_upload_enable=YES
4 anon_mkdir_write_enable=YES
5 anon_other_write_enable=YES
6 local_enable=YES
7 write_enable=YES
8 local_umask=022
9 dirmessage_enable=YES
10 xferlog_enable=YES
11 connect_from_port_20=YES
12 xferlog_std_format=YES
13 listen=NO
14 listen_ipv6=YES
15 pam_service_name=vsftpd
16 userlist_enable=YES
17 tcp_wrappers=YES
本地用户模式
本地用户模式使用的权限参数以及作用:
参数 | 作用 |
---|---|
anonymous_enable=NO | 禁止匿名访问模式 |
local_enable=YES | 允许本地用户模式 |
write_enable=YES | 设置可写权限 |
local_umask=022 | 本地用户模式创建文件的 umask 值 |
userlist_enable=YES | 启用“禁止用户名单”,名单文件为 ftpusers 和 user_list |
userlist_deny=YES | 开启用户作用名单文件功能 |
虚拟用户模式
1.创建用于进行FTP认证的用户数据库文件,其中奇数为用户名,偶数为用户密码
cd /etc/vsftpd/
vim vuser.list
zhangsan
123.com
lisi
123.com
# 明文不安全,需要将原始的明文信息使用db_load命令转换成数据库文件,为了避免别人看到数据库文件的内容,将原始明文信息文件删除
db_load -T -t hash -f vuser.list vuser.db
file vuser.db
chmod 600 vuser.db
rm -f vuser.list
2.创建 vsftpd 服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。 FTP 服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置。
useradd -d /var/ftproot -s /sbin/nologin virtual
chmod -Rf 755 /var/ftproot
3.建立用于支持虚拟用户的 PAM 文件。
vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
4.在 vsftpd 服务程序的主配置文件中通过 pam_service_name 参数将 PAM 认证文件的名称修改为vsftpd.vu
利用PAM文件进行认证时使用的参数以及作用:
参数 | 作用 |
---|---|
anonymous_enable=NO | 禁止匿名开放模式 |
local_enable=YES | 允许本地用户模式 |
guest_enable=YES | 开启虚拟用户模式 |
guest_username=virtual | 指定虚拟用户账户 |
pam_service_name=vsftpd.vu | 指定 PAM 文件 |
allow_writeable_chroot=YES | 允许对禁锢的 FTP 根目录执行写入操作,而且不拒绝用户的登录请求 |
5.为虚拟用户设置不同的权限
赋予zhangsan上传、创建、修改、查看、删除问价的权限;只允许lisi查看文件。
mkdir /etc/vsftpd/vusers_dir/
cd /etc/vsftpd/vusers_dir/
touch lisi
vim zhangsan #赋予权限如下
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
再次修改vsftpd主配置文件,通过添加 user_config_dir 参数来定义这两个虚拟用户不同权限的配置文件所存放的路径。
echo "user_config_dir=/etc/vsftpd/vusers_dir" >> /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
systemctl enable vsftpd
6.设置SELinux和防火墙
防火墙
firewall-cmd --permanent --add-service=ftp #添加防火墙允许策略
firewall-cmd --reload
SELinux
sed -ri '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config #重启生效
setenforce 0 #暂时生效
FTP默认共享目录/var/ftp
FTP Client
lftp
yum -y install lftp #安装
lftp 域名/IP地址 #连接服务器
get 文件名 #下载文件
mirror 目录名 #下载目录
lcd 目录名 #切换到本地目录
exit/by #退出
wget
wget --help |less
wget --help |grep "\-m" #查找有关包含m的行
wget ftp://IP/filename #下载文件到当前目录
wget ftp://IP/filename -P /tmp/ #下载文件到指定目录
wget ftp://IP/filename -O /tmp/a.sh #下载时指定文件名
wget -m ftp://IP/目录 #下载目录
curl
firefox,IE
默认使用匿名用户ftp访问,HOME为/var/ftp,默认仅能下载文件
系统用户:alice,HOME为/home/alice,默认可下载及上传
案例1:使用FTP共享YUM源
Server:
mkdir /var/ftproot/centos7.3
mount -o loop CentOS7.3.iso /var/ftp/centos7.3
echo "mount -o loop CentOS7.3.iso /var/ftp/centos7.3" >> /etc/rc.local
chmod +x /etc/rc.d/rc.local
或者
cp -a /media/cdrom/. /var/ftproot/centos7.3/
echo "/dev/cdrom /media/cdrom iso9660 defaults 0 0" >> /etc/fstab
Client:
vim /etc/yum.repos.d/centos7.repo
[centos7]
name=centos7
baseurl=ftp://172.16.56.129/centos7.3
enable=1
gpgcheck=0