1. ftp安装及启用
ftp:file transfer proto------互联阿中最老牌的文件传输协议
[root@localhost ~]# getenforce
Disabled
[root@localhost ~]# vim /etc/selinux/config ##如果不是Disabled,编辑文件
SELINUX=disabled
[root@localhost ~]# reboot
[root@localhost yum.repos.d]# dnf install vsftpd -y
[root@localhost yum.repos.d]# systemctl enable --now vsftpd
[root@localhost yum.repos.d]# systemctl status firewalld
[root@localhost yum.repos.d]# ss -antlupe | grep ftp
tcp LISTEN 0 32 *:21 *:* users:(("vsftpd",pid=9756,fd=3)) ino:52315 sk:2 v6only:0 <->
##ftp分为主动模式和被动模式。
##主动模式:数据访问端口是21,数据传输端口是20
##被动模式:数据访问端口是21,数据传输端口是随机开启一个大于1024的端口
## 被动访问模式更加安全,数据传输端口不固定,ftp默认用到的是被动模式。
[root@localhost yum.repos.d]# rpm -qc vsftpd
/etc/vsftpd/vsftpd.conf
[root@localhost yum.repos.d]# vim /etc/vsftpd/vsftpd.conf
12 anonymous_enable=YES ##启动匿名用户的访问功能
[root@localhost yum.repos.d]# systemctl restart vsftpd
[root@localhost yum.repos.d]# lftp 172.25.254.112
lftp 172.25.254.112:~> ls
drwxr-xr-x 2 0 0 6 Feb 17 2020 pub
[root@localhost yum.repos.d]# ls -ld /var/ftp
[root@localhost yum.repos.d]# cd /var/ftp
[root@localhost ftp]# touch /var/ftp/westosfile
##允许真机访问
[root@localhost ftp]# firewall-cmd --permanent --add-service=ftp ## 如果火墙开启状态
success
[root@localhost ftp]# firewall-cmd --reload
success
[root@localhost ftp]# firewall-cmd --list-all
[root@localhost yum.repos.d]# lftp 172.25.254.112
lftp 172.25.254.112:~> ls
drwxr-xr-x 2 0 0 6 Feb 17 2020 pub
-rw-r--r-- 1 0 0 0 Jun 27 09:08 westosfile
2. vsftpd基本信息
- 服务名称: vsftpd.service
- 配置目录: /etc/vsftpd
- 主配置文件: /etc/vsftpd/vsftpd.conf
- 默认发布目录: /var/ftp
- 报错信息:
550 ##程序本身拒绝
553 ##文件系统权限限制
500 ##权限过大
530 ##认证失败
3. 匿名用户访问控制
[root@13 ftp]# man 5 vsftpd.conf ##查看帮助
[root@13 ftp]# journalctl -xe ##查看日志错误
## 上传控制
[root@13 ftp]# chgrp ftp /var/ftp/pub
[root@13 ftp]# chmod 775 /var/ftp/pub
[root@13 ftp]# ll -d /var/ftp/pub
[root@13 ftp]# vim /etc/vsftpd/vsftpd.conf
29 anon_upload_enable=YES ##上传控制
[root@13 ftp]# systemctl restart vsftpd
##测试
[root@13 ftp]# lftp 192.168.0.66
lftp 192.168.0.66:~> ls
lftp 192.168.0.66:/> cd pub
lftp 192.168.0.66:/pub> put /etc/passwd
lftp 192.168.0.66:/pub> ls
-rw------- 1 14 50 2798 Nov 17 14:45 passwd
lftp 192.168.0.66:/pub> quit
[root@13 ftp]# id ftp
uid=14(ftp) gid=50(ftp) groups=50(ftp)
##删除重命令控制
30 anon_other_write_enable=YES
lftp 192.168.0.66:/pub> rm group
rm ok, `group' removed
lftp 192.168.0.66:/pub> mv passwd hello
rename successful
##目录建立控制
35 anon_mkdir_write_enable=YES
lftp 192.168.0.66:/pub> mkdir test
mkdir ok, `test' created
##下载控制
31 anon_world_readable_only=NO
lftp 192.168.0.66:/pub> get hello
2798 bytes transferred
目录是用 mirror westos/ 下载
##匿名用户上传文件的用户身份设定
50 chown_uploads=YES
51 #chown_username=whoever
52 chown_username=westos
lftp 192.168.0.66:/pub> put /etc/passwd
2798 bytes transferred
lftp 192.168.0.66:/pub> ls
-rw------- 1 14 50 2798 Nov 17 14:45 hello
-rw------- 1 1000 50 2798 Nov 17 15:26 passwd
[root@13 ftp]# id westos
uid=1000(westos) gid=1000(westos) groups=1000(westos)
## 匿名用户上传文件权限设定
32 anon_umask=022 ##添加行
lftp 192.168.0.66:/pub> put /etc/inittab
490 bytes transferred
lftp 192.168.0.66:/pub> ls
-rw-r--r-- 1 14 50 490 Nov 17 15:29 inittab
##匿名用户上传文件的用户身份设定和umask同时开启,022不起作用,因为不是匿名上传,而是指定用户身份的。
50 chown_uploads=YES
51 #chown_username=whoever
52 chown_username=westos
lftp 192.168.0.66:/pub> put /etc/group
1026 bytes transferred
lftp 192.168.0.66:/pub> ls
-rw------- 1 0 50 1026 Nov 17 15:32 group
-rw-r--r-- 1 14 50 490 Nov 17 15:29 inittab
##匿名用户上传文件的用户身份设定和umask同时开启,设置上传文件权限
53 chown_upload_mode=0644 ##添加行
lftp 192.168.0.66:/pub> put /etc/shadow
1435 bytes transferred
lftp 192.168.0.66:/pub> ls
-rw-r--r-- 1 1000 50 1435 Nov 17 15:35 shadow
##家目录控制
[root@13 ~]# mkdir /westos_ftp
[root@13 ~]# touch /westos_ftp/westosfiletest
33 anon_root=/westos_ftp ##添加行
[root@13 ~]# lftp 192.168.0.66
lftp 192.168.0.66:~> ls
-rw-r--r-- 1 0 0 0 Nov 17 16:22 westosfiletest
##登陆数量控制
34 max_clients=2 ##添加行
##上传速率控制
35 anon_max_rate=102400 ##添加行
lftp 192.168.0.66:/pub> put /proc/kcore
4. 本地用户的访问
[linux@13 ~]# useradd lee
[linux@13 ~]# useradd linux
[root@13 ftp]# echo westos | passwd --stdin lee
[root@13 ftp]# echo westos | passwd --stdin linux
[root@13 ftp]# su - linux
[linux@13 ~]$ touch linuxfile
[root@13 ftp]# su - lee
[lee@13 ~]$ touch leefile
[root@13 ftp]# ls -ld /home/*
[root@13 ftp]# lftp 192.168.0.66 -u lee #每个用户登陆默认都在自己的家目录内
Password:
lftp lee@192.168.0.66:~> ls
-rw-r--r-- 1 0 0 0 Nov 17 16:20 westosfiletest
[root@13 ftp]# vim /etc/vsftpd//vsftpd.conf
16 local_enable=YES ##登陆控制
17 local_root=/westos_ftp ##指定用户家目录
[root@13 ftp]# systemctl restart vsftpd
[root@13 ftp]# lftp 192.168.0.66 -u lee
Password:
lftp lee@192.168.0.66:~> ls
-rw-r--r-- 1 0 0 0 Nov 17 16:22 westosfiletest
24 local_umask=077 ##上传文件权限控制
20 write_enable=YES ##写权限控制 本地用户可上传
[root@13 ftp]# lftp 192.168.0.66 -u lee
Password:
lftp lee@192.168.0.66:~> cd /
[root@13 ftp]# chmod u-w /home/*
109 chroot_local_user=YES ####锁定用户到自己的家目录中,不让浏览其他目录
110 chroot_list_enable=YES ##默认情况下不允许切换到根目录
111 # (default follows)
112 chroot_list_file=/etc/vsftpd/chroot_list
[root@13 ftp]# vim /etc/vsftpd/chroot_list
westos ##锁定用户到自己的家目录中的白名单
[root@13 ftp]# lftp 192.168.0.66 -u westos ##可以切换到根目录
chroot_local_user=NO ##默认情况下允许访问根目录,都可以切换到根目录
[root@13 ftp]# vim /etc/vsftpd/chroot_list ##锁定用户到自己的家目录中的黑名单
westos ##不能访问根目录
[root@localhost home]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh ##ftpusers永久黑名单 user_list临时黑名单
[root@localhost vsftpd]# vim user_list
westos
[root@13 vsftpd]# vim ftpusers
westos
[root@13 vsftpd]# lftp 192.168.0.66 -u westos ##不能登陆
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
136 userlist_deny=NO #添加行 设定/etc/vsftpd/user_list位白名单 不在名单中的用户不能登陆ftp
[root@localhost vsftpd]# systemctl restart vsftpd
[root@13 vsftpd]# vim /etc/vsftpd/user_list
westos ##可以登陆 永久黑名单优先级最高
5. 虚拟用户访问
5.1建立虚拟用户过程
[root@localhost vsftpd]# vim authfile #建立认证文件模板
user1
123
user2
123
user3
123
[root@localhost vsftpd]# db_load -T -t hash -f authfile authfile.db ##加密认证文件 -T 转换 -t type -f 指定转换文件
[root@localhost vsftpd]# file authfile.db
authfile.db: , created: Thu Jan 1 00:34:08 1970
[root@localhost vsftpd]# cat authfile.db
��/���s���,эh^123user2
[root@server1 vsftpd]#
[root@localhost vsftpd]# vim /etc/pam.d/ftp-auth
account required pam_userdb.so db=/etc/vsftpd/authfile
auth required pam_userdb.so db=/etc/vsftpd/authfile
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
134 pam_service_name=ftp-auth ##指定认证策略文件
135 guest_enable=YES ##指定虚拟用户功能开启
136 guest_username=ftp ##指定虚拟用户在ftp服务器上的用户身份
[root@localhost ~]# lftp 192.168.0.1 -u user1
Password:
lftp user1@192.168.0.1:~> ls
-rw-r--r-- 1 0 0 1208 Jun 27 10:04 passwd
drwxrwxr-x 3 0 50 32 Jun 27 10:04 pub
-rw-r--r-- 1 0 0 0 Jun 27 09:08 westosfile
5.2虚拟用户家目录的独立设定
[root@localhost ~]# mkdir -p /var/ftphome/user{1..3}
[root@localhost ~]# touch /var/ftphome/user1/user1file
[root@localhost ~]# touch /var/ftphome/user2/user2file
[root@localhost ~]# touch /var/ftphome/user3/user3file
[root@13 vsftpd]# mkdir -p /var/ftphome/user{1..3}/westos
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
139 local_root=/var/ftphome/$USER
140 user_sub_token=$USER
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# lftp 192.168.0.1 -u user1
Password:
lftp user1@192.168.0.1:~> ls
-rw-r--r-- 1 0 0 0 Jun 28 02:57 user1file
drwxrwxr-x 2 0 50 6 Jun 28 02:57 westos
5.3用户配置独立
[root@localhost user1]# chmod 775 /var/ftphome/user{1..3}/westos
[root@localhost user1]# chgrp ftp /var/ftphome/user{1..3}/westos
[root@localhost ~]# mkdir /etc/vsftpd/confdir
[root@localhost ~]# touch /etc/vsftpd/confdir/user1
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
30 # anon_upload_enable=YES
#anon_other_write_enable=YES
#anon_world_readable_only=NO
#anon_umask=022
#max_clients=2
141 user_config_dir=/etc/vsftpd/confdir
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# vim /etc/vsftpd/confdir/user1
anon_upload_enable=YES ##设定完成后只有user1用户可以上传文件
[root@localhost ~]# lftp 192.168.0.1 -u user1
Password:
lftp user1@192.168.0.1:~> ls
-rw-r--r-- 1 0 0 0 Jun 28 02:57 user1file
drwxrwxr-x 2 0 50 6 Jun 28 02:57 westos
lftp user1@192.168.0.1:/> cd westos/
lftp user1@192.168.0.1:/westos> put /etc/passwd
1249 bytes transferred
lftp user1@192.168.0.1:/westos> exit
[root@localhost ~]# lftp 192.168.0.1 -u user2
Password:
lftp user2@192.168.0.1:~> ls
-rw-r--r-- 1 0 0 0 Jun 28 02:57 user2file
drwxrwxr-x 2 0 50 6 Jun 28 02:57 westos
lftp user2@192.168.0.1:/> cd westos/
lftp user2@192.168.0.1:/westos> put /etc/passwd
put: /etc/passwd: Access failed: 550 Permission denied. (passwd)