ftp

来源:互联网 发布:淘宝上电子发票在哪里 编辑:程序博客网 时间:2024/06/11 10:10

一、ftp是什么

ftp(文件传输协议)是internet上仍常用的最老的网络协议之一,它为系统提供了通过网络与远程服务器进行传输的简单方法。在red hat entreprise linux 6中ftp服务包的名称为vsftpd,它代表very secure file transferprotocol damon服务名称也叫做vsftp。默认配置文件让anonymous用户只能下载位于chroot目录中的内容。/var/ftp这意味着远程ftp用户端能以用户anonymous或ftp身份连接到服务器(无需密码),并从ftp服务器上的/var/ftp目录下载文件(其本地ftp用户可以读取这些文件)

二、安装ftp

服务端:yum install vsftpd -y

客户端:yum install lftp -y
##为了方便实验,服务端、客户端软件都安装在了一台机器上
systemctl start vsftpd              ##开启服务

systemctl enable vsftpd         ##开机自启动

firewall-cmd --permanent --add-service=ftp   ##将ftp加入火墙策略

firewall-cmd --reload              ##刷新使生效

tip:建议关闭selinux,否则可能会有影响,关闭方法:修改/etc/selinux/config中的SELINUX=disabled,然后reboot机器。

三、文件信息、使用方法

/var/ftp    ##默认发布目录

/etc/vsftpd   ##配置文件目录

使用方式:客户端执行lftp +ip

[root@desktop ~]# lftp 172.25.254.148
lftp 172.25.254.148:~> ls
drwxr-xr-x    2 0        0               6 Mar 07  2014 pub

四、vsftpd服务的配置参数

1.匿名用户的设定

vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES|NO    ##是否允许匿名用户登陆,默认是yes

1)匿名用户上传

vim /etc/vsftpd/vsftpd.conf

write_enable=YES           ##允许写anon_upload_enable=YES     ##允许上传chgrp ftp /var/ftp/pub/chmod 775 /var/ftp/pub/
systemctl restart vsftpd.service    ##重启服务
[root@desktop ~]# lftp 172.25.254.148

lftp 172.25.254.148:~> cd pub/
lftp 172.25.254.148:/pub> put /etc/passwd          ##上传/etc/passwd到pub下
1962 bytes transferred
lftp 172.25.254.148:/pub> ls
-rw-------    1 14       50           1962 Nov 16 12:46 passwd

2)匿名用户家目录修改

vim /etc/vsftpd/vsftpd.conf

anon_root=/redhat
mkdir /redhat
touch /redhat/rhelfile{1..2}

systemctl restart vsftpd.service
[root@desktop ~]# lftp 172.25.254.148
lftp 172.25.254.148:~> ls
-rw-r--r--    1 0        0               0 Nov 16 12:52 rhelfile1
-rw-r--r--    1 0        0               0 Nov 16 12:52 rhelfile2
##默认访问目录已经不再是/var/ftp了,而是服务端的/redhat
新默认发布目录权限不能变,否则无法正常使用:

/redhat目录相当于/var/ftp目录,必须在下层再建立一个目录用于上传下载,redhat目录保持755权限不变。

mkdir /redhat/pub

chmod 775 /redhat/pub     ##pub目录需要有其他用户写的权限才能上传

chgrp ftp /redhat/pub/

[root@desktop redhat]# lftp 172.25.254.148
lftp 172.25.254.148:~> cd pub/
lftp 172.25.254.148:/pub> ls
lftp 172.25.254.148:/pub> put /etc/shadow
1168 bytes transferred
lftp 172.25.254.148:/pub> ls
-rw-------    1 14       50           1168 Nov 16 13:10 shadow
3)匿名用户上传文件默认权限
vim /etc/vsftpd/vsftpd.conf

anon_umask=022
[root@desktop pub]# lftp 172.25.254.148
lftp 172.25.254.148:~> cd pub/
lftp 172.25.254.148:/pub> put /etc/passwd
1962 bytes transferred
lftp 172.25.254.148:/pub> ls
-rw-r--r--    1 14       50           1962 Nov 16 13:17 passwd
-rw-------    1 14       50           1168 Nov 16 13:10 shadow
4)匿名用户可以建立目录
anon_mkdir_write_enable=YES
systemctl restart vsftpd.service
[root@desktop pub]# lftp 172.25.254.148
lftp 172.25.254.148:~> cd pub/
lftp 172.25.254.148:/pub> mkdir ppcc
mkdir 成功, 建立 `ppcc'
lftp 172.25.254.148:/pub> ls
-rw-r--r--    1 14       50           1962 Nov 16 13:17 passwd
drwxr-xr-x    2 14       50              6 Nov 16 13:21 ppcc
-rw-------    1 14       50           1168 Nov 16 13:10 shadow
5)匿名用户下载
anon_world_readable_only=NO|YES     ##no为开放下载,yes阻止下载
systemctl restart vsftpd.service
[root@desktop Desktop]# lftp 172.25.254.148
lftp 172.25.254.148:~> cd pub/
lftp 172.25.254.148:/pub> get passwd
1962 bytes transferred
lftp 172.25.254.148:/pub> quit
[root@desktop Desktop]# ls
passwd

tip:直接下载目录可以用morror指令

6)匿名用户删除

anon_other_write_enable=YES
systemctl restart vsftpd.service
[root@desktop Desktop]# lftp 172.25.254.148
lftp 172.25.254.148:~> cd pub/
lftp 172.25.254.148:/pub> ls
-rw-r--r--    1 14       50           1962 Nov 16 13:17 passwd
drwxr-xr-x    2 14       50              6 Nov 16 13:21 ppcc
-rw-------    1 14       50           1168 Nov 16 13:10 shadow
lftp 172.25.254.148:/pub> rm -f passwd
rm 成功, 删除 `passwd'
lftp 172.25.254.148:/pub> ls
drwxr-xr-x    2 14       50              6 Nov 16 13:21 ppcc
-rw-------    1 14       50           1168 Nov 16 13:10 shadow

7)最大连接数

max_clients=1
systemctl restart vsftpd.service

2.本地用户设定

local_enable=YES     ##本地用户登陆限制
write_enable=YES    ##写权限


[root@desktop ~]# lftp 172.25.254.148 -u student
口令:
lftp student@172.25.254.148:~> ls

lftp student@172.25.254.148:~> pwd
ftp://student@172.25.254.148/%2Fhome/student       
lftp student@172.25.254.148:~> cd /
cd 成功, 当前目录=/
lftp student@172.25.254.148:/> ls
lrwxrwxrwx    1 0        0               7 Oct 17 07:05 bin -> usr/bin
dr-xr-xr-x    3 0        0            4096 Oct 17 09:08 boot
drwxr-xr-x   21 0        0            3180 Nov 16 12:04 dev
drwxr-xr-x  133 0        0            8192 Nov 16 14:29 etc
drwxr-xr-x    6 0        0              60 Nov 16 14:29 home
lrwxrwxrwx    1 0        0               7 Oct 17 07:05 lib -> usr/lib
lrwxrwxrwx    1 0        0               9 Oct 17 07:05 lib64 -> usr/lib64
drwxr-xr-x    2 0        0               6 Mar 13  2014 media
drwxr-xr-x    4 0        0              47 Nov 16 12:04 mnt
drwxr-xr-x    3 0        0              15 Oct 17 08:18 opt
dr-xr-xr-x  137 0        0               0 Nov 16 12:04 proc
drwxr-xr-x    3 0        0              16 Nov 16 13:17 redhat
dr-xr-x---   15 0        0            4096 Nov 16 14:28 root
drwxr-xr-x   35 0        0            1120 Nov 16 12:44 run
lrwxrwxrwx    1 0        0               8 Oct 17 07:05 sbin -> usr/sbin
drwxr-xr-x    2 0        0               6 Mar 13  2014 srv
dr-xr-xr-x   13 0        0               0 Nov 16 12:04 sys
drwxrwxrwt   44 0        0            4096 Nov 16 13:57 tmp
drwxr-xr-x   13 0        0            4096 Oct 17 07:05 usr
drwxr-xr-x   23 0        0            4096 Nov 16 12:18 var


1)本地用户家目录修改

local_root=/linux
systemctl restart vsftpd.service
mkdir /linux/pub -p

[root@desktop ~]# lftp 172.25.254.148 -u student
口令:
lftp student@172.25.254.148:~> ls        
drwxr-xr-x    2 0        0               6 Nov 16 14:40 pub
lftp student@172.25.254.148:~> pwd
ftp://student@172.25.254.148/%2Flinux
lftp student@172.25.254.148:~> cd /      
cd 成功, 当前目录=/             
2)本地用户上传文件权限

local_umask=022
chmod 777 /linux/pub/          ##student属于o(其他用户)这个组,所以需要7的权限才能写
touch /mnt/studentfile
chmod 777 /mnt/studentfile
[root@desktop ~]# lftp 172.25.254.148 -u student
口令:
lftp student@172.25.254.148:~> cd pub/
lftp student@172.25.254.148:~/pub> put /mnt/studentfile

lftp student@172.25.254.148:~/pub> ls
-rw-r--r--    1 1002     1002            0 Nov 16 14:54 studentfile
3)限制本地用户浏览/目录

①所有用户被锁定到自己的家目录中
chroot_local_user=YES

systemctl restart vsftpd.service

如果家目录是home

chmod u-w /home/* 

测试:

[root@desktop mnt]# lftp 172.25.254.148 -u student
口令:
lftp student@172.25.254.148:/> cd /
lftp student@172.25.254.148:/> ls
drwxrwxrwx    2 0        0              60 Nov 26 07:00 pub
现在就看不到根下的内容了,只能看到它家目录/linux下的内容

如果不想所有用户都只能访问自己家目录,可以用黑白名单设定:

②用户黑名单建立,chroot_list里面列出的用户只能访问自己家目录
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
echo student >>/etc/vsftpd/chroot_list
③用户白名单建立,chroot_list里面列出的用户可以访问家目录以外的目录
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
echo student >>/etc/vsftpd/chroot_list
4)限制本地用户登陆
vim /etc/vsftpd/ftpusers        ##用户黑名单
vim /etc/vsftpd/user_list        ##用户临时黑名单
用户白名单设定

vim /etc/vsftpd/vsftpd.conf

userlist_deny=NO
/etc/vsftpd/user_list设定这个参数之后,此文件变成用户白名单,只在名单中出现的用户可以登陆ftp


3.ftp虚拟用户的设定
创建虚拟帐号身份
vim /etc/vsftpd/redhat    ##文件名称任意
ftpuser1
123
ftpuser2
123
ftpuser3
123

db_load -T -t hash -f /etc/vsftpd/redhat redhat.db

vim /etc/pam.d/redhat        ##文件名称任意
account        required    pam_userdb.so    db=/etc/vsftpd/redhat
auth        required    pam_userdb.so    db=/etc/vsftpd/redhat

vim /etc/vsftpd/vsftpd.conf
pam_service_name=redhat
guest_enable=YES

虚拟帐号身份指定)
guest_username=ftp
chmod u-w /home/ftpuser

虚拟帐号家目录独立设定)
vim /etc/vsftpd/vsftpd.conf
local_root=/ftpuserhome/$USER
user_sub_token=$USER

mkdir /ftpuserhome
chgrp ftpuser /ftpuserhome
chmod g+s /ftpuserhome
mkdir /ftpuserhome/ftpuser{1..3}/pub


虚拟帐号配置独立)
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/userconf
mkdir -p /etc/vsftpd/userconf

vim /etc/vsftpd/userconf/ftpuser1
在此文件中设定配置文件中的所有参数,此文件的优先级搞







报错归纳:

500权力过大

530认证失败

550无写权限

553权限问题