Unit 18 FTP简单文件传输协议

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=YES

pam_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)

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值