FTP指简单文件传输协议
在客户端
首先下载vsftpd服务,然后开启并设置开机自启动
[root@client88 ~]# yum install vsftpd -y
[root@client88 ~]# systemctl start vsftpd
[root@client88 ~]# systemctl enable vsftpd
ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service'
然后需要关闭防火墙和selinux
[root@client88 ~]# systemctl stop firewalld.service ##关闭防火墙
[root@client88 ~]# systemctl disable firewalld.service
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
关闭selinux
[root@client88 ~]# vim /etc/selinux/config ##修改配置
SELINUX=disabled ##selinux关闭
[root@client88 ~]# setenforce 0 ##或者使用命令行强制selinux关闭(临时)
setenforce: SELinux is disabled
在客户端:
[root@server138 yum.repos.d]# yum install lftp -y ##安装lftp服务
然后就可以利用lftp服务
[root@server138 yum.repos.d]# lftp 172.25.254.88 ##匿名用户登陆ftp服务器的地址-->/var/ftp
[root@server138 yum.repos.d]# lftp 172.25.254.88 -u student ##用户登陆地址-->/home/student
控制用户登陆
控制登陆信息的文件在vsftpd.conf中
[root@client88 ~]# vim /etc/vsftpd/vsftpd.conf ##更改配置
anonymous_enable=NO ##匿名用户是否可以登陆
重启vsftpd.conf服务后匿名用户无法进入服务端
local_enable=NO ##本地用户(服务端)是否可以登陆
[root@server138 yum.repos.d]# lftp 172.25.254.88 -u student
Password:
lftp student@172.25.254.88:~> ls ##重启ftp服务后,服务端用户无法登陆
ls: Login failed: 530 This FTP server is anonymous only.
对匿名用户进行操作
[root@client88 pub]# ll -d /var/ftp/pub
drwxr-xr-x 2 root root 6 Mar 7 2014 /var/ftp/pub
pub这个目录只对root可写
在客户端测试,直接上传会报错550:服务本身错误
lftp 172.25.254.88:/> put /etc/passwd ##上传
put: Access failed: 550 Permission denied. (passwd)
解决方案:
服务端更改文件权限和所属组
[root@client88 pub]# chmod 775 /var/ftp/pub ##更改目录权限
[root@client88 pub]# chgrp ftp /var/ftp/pub ##更改所属组
[root@client88 pub]# ll -d /var/ftp/pub
drwxrwxr-x 2 root ftp 6 Mar 7 2014 /var/ftp/pub
[root@client88 pub]# vim /etc/vsftpd/vsftpd.conf ##修改配置
29 anon_upload_enable=YES ##匿名用户是否可以上传文件
[root@client88 pub]# systemctl restart vsftpd.service
测试(客户端):
可以实现匿名用户上传
[root@server138 yum.repos.d]# lftp 172.25.254.88
lftp 172.25.254.88:/> cd pub
cd ok, cwd=/pub
lftp 172.25.254.88:/pub> put /etc/passwd
2005 bytes transferred
匿名用户
30 anon_world_readable_only=NO ##下载文件
lftp 172.25.254.88:/pub/dir> ls
-rw-r--r-- 1 0 0 0 Jan 23 08:19 file
lftp 172.25.254.88:/pub/dir> get file
31 anon_mkdir_write_enable=YES ##建立目录
lftp 172.25.254.88:/pub> mkdir new
mkdir ok, `new' created
32 anon_other_write_enable=YES ##是否可以删除和重命名
lftp 172.25.254.88:/pub> ls
drwxr-xr-x 2 0 0 17 Jan 23 08:19 dir
-rw------- 1 14 50 2005 Jan 23 08:18 passwd
lftp 172.25.254.88:/pub> rm -rf passwd
rm ok, `passwd' removed
anon_root=/redhat ##更改登陆根目录
服务端
[root@client88 ~]# mkdir /redhat
[root@client88 ~]# vim /etc/vsftpd/vsftpd.conf ##anon_root=/redhat
[root@client88 ~]# systemctl restart vsftpd.service
[root@client88 ~]# cd /redhat ##在/redhat中建立文件以便测试
[root@client88 redhat]# mkdir dir
[root@client88 redhat]# cd dir
[root@client88 dir]# touch file客户端
[root@server138 ~]# lftp 172.25.254.88
lftp 172.25.254.88:~> ls
drwxr-xr-x 2 0 0 17 Jan 23 08:31 dir ##成功实现
匿名用户上传文件默认修改权限
anon_umask=022
客户端最大上传速率控制
anon_max_rate=102400 ##限制速度在100k左右
dd if=/dev/zero of=/mnt/bigfile bs=1M count=1500
1500+0 records in
1500+0 records out
1572864000 bytes (1.6 GB) copied, 22.0585 s, 71.3 MB/s
服务最大连接数
max_clients=2 ##服务的最大连接数
本地用户修改
local_root=/westos ##修改本地用户的家目录
chroot_local_user=YES ##所有本地用户锁定到自己的家目录
lftp student@172.25.254.88:~> cd /etc ##所以不能访问其他根目录
cd: Login failed: 530 Login incorrect.
如果报错550时表示权限过大,将家目录权限缩小
[root@client88 home]# chmod u-w /home/*
[root@client88 home]# ll -d /home/*
dr-x------ 2 root root 12288 May 11 2017 /home/lost+found
dr-x------. 5 student student 1024 Jan 23 22:24 /home/student就可以正常访问
lftp student@172.25.254.88:~> ls
-rw-r--r-- 1 0 0 0 Jan 24 03:24 file
(针对本地用户能否切换其他目录)用户黑白名单
*******能否切换其他根目录******
不能切换时:
[root@server138 ~]# lftp 172.25.254.88 -u student
Password:
lftp student@172.25.254.88:~> ls
-rw-r--r-- 1 0 0 0 Jan 24 03:24 file
lftp student@172.25.254.88:/> cd /var
cd: Access failed: 550 Failed to change directory. (/var)*************************************
1.黑名单
chroot_local_user=NO ##所有本地用户可以切换目录,文件中用户不行
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
[root@client88 home]# cd /etc/vsftpd/
[root@client88 vsftpd]# vim chroot_list
配置中加入student用户
测试:
[root@server138 ~]# lftp 172.25.254.88 -u student
Password:
lftp student@172.25.254.88:~> cd /etc
cd: Access failed: 550 Failed to change directory. (/etc) ##黑名单无法切换
2.白名单
chroot_local_user=YES ##所有本地用户不能切换目录,文件中用户可以行
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
lftp student@172.25.254.88:/var/mail> cd /var/mail ##可以切换根目录
lftp student@172.25.254.88:/var/mail> ls
-rw-rw---- 1 32 12 0 May 07 2014 rpc
-rw-rw---- 1 1000 12 0 Jul 10 2014 student
(限制本地用户的登陆)的黑白名单
*******限制本地用户的登陆******
不能登陆时:
[root@server138 ~]# lftp 172.25.254.88 -u student
Password:
lftp student@172.25.254.88:~> ls
ls: Login failed: 530 Permission denied.***************************************
首先将前面测试配置的更改注释掉
#chroot_local_user=YES
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
1.黑名单
[root@client88 vsftpd]# vim /etc/vsftpd/ftpusers ##用户的永久黑名单
加入student后,在客户端
[root@server138 ~]# lftp 172.25.254.88 -u student
Password:
lftp student@172.25.254.88:~> ls
ls: Login failed: 530 Login incorrect. ##无法访问
而在/etc/vsftpd/ftpusers下是用户的临时黑名单
2.白名单
在配置文件中
userlist_enable=NO
可以将用户临时黑名单变为白名单
重启服务后可以使用白名单用户登陆访问
[root@server138 ~]# lftp 172.25.254.88 -u student
Password:
lftp student@172.25.254.88:~> ls
-rw-r--r-- 1 0 0 0 Jan 24 03:24 file
FTP虚拟用户的设定
服务端配置:
首先创建虚拟账户身份
[root@client88 vsftpd]# cd /etc/vsftpd/
[root@client88 vsftpd]# ls
chroot_list ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@client88 vsftpd]# vim vmusers ##建立新的文件(名字任意)写入虚拟用户
rsy ##注意不能有空格出现
123456
dabing
123456
who
123456
接着对用户名和密码进行哈希加密操作
## -T:转化 -t:转换方式为hash
[root@client88 vsftpd]# db_load -T -t hash -f /etc/vsftpd/vmusers /etc/vsftpd/vmusers.db
[root@client88 vsftpd]# cat /etc/vsftpd/vmusers.db
���a$�*����эh^123456dabing ##已加密
进入/etc/pam.d/新建文件vmusersfile(名字任意)写入pam服务的配置,pam就是一种认证服务
[root@client88 vsftpd]# cd /etc/pam.d/
[root@client88 pam.d]# vim vmusersfile ##新建文件
内容: ##account表示帐号名称 auth表示密码
required表示通过用户认证才能下一步,去pam_userdb.so插件验证账户信息
account required pam_userdb.so db=/etc/vsftpd/vmusers
auth required pam_userdb.so db=/etc/vsftpd/vmusers
在vsftpd.conf中修改vstpd服务的配置
[root@client88 pam.d]# vim /etc/vsftpd/vsftpd.conf
userlist_enable=YES
tcp_wrappers=YESpam_service_name=vmusersfile ##存放pam服务的文件
guest_enable=YES
guest_username=ftp
local_root=/ftphome/$USER ##虚拟用户的家目录
user_sub_token=$USER
***************************************
$USER 表示正在使用的用户
例如:id $USER此时表示root用户的id信息
[root@client88 ~]# id $USER uid=0(root) gid=0(root) groups=0(root)
****************************************
新建/ftphome目录作为虚拟用户的家目录,加入rsy和dabing两个用户目录,并建立两个文件以便测试
[root@client88 vsftpd]# mkdir /ftphome
[root@client88 vsftpd]# cd /ftphome
[root@client88 ftphome]# mkdir rsy
[root@client88 ftphome]# mkdir dabing
[root@client88 ftphome]# touch rsy/rsyfile
[root@client88 ftphome]# touch dabing/dabingfile
客户端测试:
登陆rsy和dabing两个用户
[root@server138 ~]# lftp 172.25.254.88 -u rsy
Password:
lftp rsy@172.25.254.88:~> ls
-rw-r--r-- 1 0 0 0 Jan 24 07:04 rsyfile ##成功登陆
[root@server138 ~]# lftp 172.25.254.88 -u dabing
Password:
lftp dabing@172.25.254.88:~> ls
-rw-r--r-- 1 0 0 0 Jan 24 07:04 dabingfile ##成功登陆
而未在/ftphome中加入的虚拟用户无法登录
[root@server138 ~]# lftp 172.25.254.88 -u who
Password:
lftp who@172.25.254.88:~> ls
ls: Login failed: 500 OOPS: cannot change directory:/ftphome/who
ftp虚拟用户家目录的独立设定
就是给某个特定用户某个权限
1.首先测试客户端的虚拟用户可以上传
[root@client88 rsy]# chgrp ftp rsyfile
[root@client88 rsy]# chmod g+w rsyfile
[root@client88 rsy]# ll -d rsyfile
drwxrwxr-x 2 root ftp 6 Jan 24 03:31 rsyfile ##给家目录下目录配置权限
[root@server138 ~]# lftp 172.25.254.88 -u rsy
Password:
lftp rsy@172.25.254.88:~> cd rsyfile
cd ok, cwd=/rsyfile
lftp rsy@172.25.254.88:/rsyfile> put /etc/passwd
2005 bytes transferred ##成功上传
2.
[root@client88 rsy]# vim /etc/vsftpd/vsftpd.conf
#anon_mkdir_write_enable=YES ##注释掉
user_config_dir=/etc/vsftpd/userconfi
[root@client88 rsy]# cd /etc/vsftpd/usrconf
[root@client88 usrconf]# mkdir userconf
[root@client88 usrconf]# vim rsy
anon_mkdir_write_enable=YES
测试:
[root@server138 ~]# lftp 172.25.254.88 -u rsy
Password:
lftp rsy@172.25.254.88:~> cd rsyfile/
lftp rsy@172.25.254.88:/rsyfile> mkdir new
mkdir ok, `new' created ##成功建立目录
[root@server138 ~]# lftp 172.25.254.88 -u dabing
Password:
lftp dabing@172.25.254.88:~> cd dabingfile/
lftp dabing@172.25.254.88:/dabingfile> mkdir new
mkdir: Access failed: 550 Permission denied. (new)