一、什么时ftp服务
ftp是一种文件传输协议,是TCP/IP协议组中的协议之一。该协议是Internet文件传送的基础,它由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载(download)”文件。若将文件从自己计算机中拷贝至远程计算机上,则称之为“上载(upload)”文件。
二、ftp的安装
本次内容在虚拟机上进行,用真机当作客户去访问虚拟机上的东西。
1)用yum源方式下载安装ftp,如下图:
2)开启服务,并可以设置为开机自启动:
3)并且要对自己的火墙进行设置,方便他人访问;
:打开火墙设置
Configuration:选择Permanent(永久)
Service在ftp前选择勾,最后Options选择Reload Firewall完成,就可以关闭,记得修改完后重启firewall服务,还有下面这个文件查看其是否关闭,没有关闭记得关闭,关闭后重启虚拟机
三、ftp访问的基本信息及设定
1、ftp的默认共享目录为/var/ftp,下面我们用真机去访问,访问方式为lftp+要访问端的ip,如下图
2、有时候我们让一些匿名用户来访问,我们可以在其配置文件里编辑实现,vim /etc/vsftpd/vsftpd.conf,如下图
此时我们把anonymous_enable设置为NO,编辑完成后重启vsftpd服务,发现匿名用户(真机)无法登陆,而虚拟机自身用户(本地用户student)输入密码后可以登陆,如下图
同样本地用户能否登陆,只需改变local_enable的状态即可。
3、ftp对登陆用户可写的设定,将配置文件中write_enable改为NO,记得改完重启服务
我们在student的家目录下建立一个文件student,用student用户身份去访问时发现可以查看文件,但是没有删除的权力,如下图
显示550报错(后面会统一说里面出现的报错代码代表什么)
4、匿名用户上传的权力,编辑配置文件,写权力和匿名用户可以上传的命令打开,如下图:
重启服务后, 为了不破坏其他文件,将上传文件全部上传至服务器下的/var/ftp/pub中,需要改pub目录的权限和所在组,完成后我用真机(匿名用户)上传了/etc/passwd文件尝试,成功,如下图
5、配置文件里设置匿名用户可以从访问端获取文件,新建文件,删除和重命名文件的权力
将anon_world_readable_only修改为NO,即可以从ftp获取(get)文件
将anon_other_write_enable修改为YES,即可删除和重命名文件
将anon_mkdir_write_enable修改为YES,即可新建文件,修改完后记得重启服务,表现如下图
6、chown_username=student(修改上传文件的所有人要和uploads一起开启,表示开启文件上传用户的功能)
chown_upload_mode=xxx(修改上传文件的权限,这个开启时umask那个失效),修改完后记得重启服务,如下图:
可以很明显的看到修改完后,我上传group文件,他的所有人变成1000(也就是student的id),他的权限也变成了我设置的0644
7、用户家目录的修改,anno_root=(这里我设置为)/westos(意思就是用户家目录的修改,原来用户用lftp命令一进来是/var/ftp/ 现在可以修改为/westos即用户lftp进来看到的是/westos/里的东西),如下图:
这里我先建立/westos文件,在其下我新建了一些文件,然后去配置文件里写入修改家目录命令配置完后重启服务
匿名 用户的修改
匿名用户再进来时,就是/westos目录,完成了匿名用户家目录的修改
本地用户的修改
8、匿名用户传输速率的限速设置(如果很多人来访问你并上传和下载文件,不限制速度会让服务器崩掉,所以限速保护服务器)
我们先在匿名用户(真机)桌面下建立一个2G的文件,如下:
在不限制的速率的条件下上传可以看到速率很快(约46M/S):
此时我们在配置文件里anon_max_rate设置速率,单位为字节,这里我设置为100kb,如下图:修改完后记得重启服务
再次上传观察到速率在100k/s左右
9、最大链接数的设定,在配置文件里max_clients=数字设置,当超过链接数时需要等待,当有人退出链接,下一个才可以链接,排队机制,如下图,我设置最大链接数为2:
然后用真机打开三个shell去链接,可以看到只能有两个链接上:
10、限制本地用户的浏览权限,当没限制时,本地用户可以切到/看到根目录下的所有东西;如下图
这样很不安全,因此我们可以在配置文件里限制本地用户的浏览权限,如下图
重启服务在登陆时,发现此时本地用户执行lftp命令,会报错500,是因为权限过大,为了保护安全不让访问,所以我们需要减小家目录下的权限,如下图
然后去登陆,发现用户被锁在家目录下,查看不了根目录的文件了,如下图:
11、ftp黑白名单的设定,/etc/vsftpd/chroot_list为其黑白名单,当chroot_local_user设置为YES表示写在名单里的用户是白名单,用户可以进入/访问其他目录,改成NO表示为黑名单,写在名单里的用户访问不了其他目录。
1)但是本身这个文件/etc/vsftpd/chroot_list是不存在的,我们需要去建立,建立好后可以在名单里写入用户,如下图,这里我把student写入这个名单,此时为白名单:
再在配置文件里找到下图两条语句,将其注释删掉,如下图:
此时发现原本被所在家目录下的studnet用户又可以访问/下的其他目录了
2)黑名单的设置:chroot_local_user改为NO,此时写在/etc/vsftpd/chroot_list下的为黑名单,我没有更改也就是student此时在黑名单里:
登陆发现student被锁在家目录下,访问不了/下的其他目录:
这里设置的黑白名单是本地用户被限制在家目录下,去不了根目录,下面要介绍的黑白名单是限制本地用户的登陆权限,如下
3)在vsftpd下有下图两个文件,其中user_list表示临时黑名单,ftpusers表示永久黑名单
如下图,将student写入user_list下,用student登陆被拒绝,如下图:
下面,将student从user_list删除,将student写入ftpusers下,用student身份登陆,同样登陆失败,如下图:
4)编辑配置文件,加入user_list=NO,此时user_list为白名单,写在里面的用户可以登录,没写在的不能,同样,我将student写入user_list,但此时student用户也在ftpusers下,这是会发现ftpusers的优先级比较高,因为student用户还是无法登陆,如图
将student从ftpusers中删除可以正常登陆。
12、虚拟用户的身份设定(为了保护系统的安全,因为用本地用户身份登陆权利过大,就和微信一样,我们每个人登陆的都是自己独立的账号,而不是系统账号不能对系统进行操作)
1)在/etc/vsftpd/下建立userfile ,在里面写入你要加的用户和密码,因为这是用户和密码,所以我们再将其改为hash的加密方式,如下图:
转变后我们可以观察到变化,如下图:
2)接下来我们要去配置文件里编辑pam_service_name=改为接下来你要写的pam文件名称,如下图
我将其改为ftpcheck,也就是用ftp方式访问时会读取我这个文件里的内容,如下图,我们编辑这个文件:
文件里第一行写入:account(表示用户) required(表强制) pam_userdb.so(表认证程序) db=/etc/vsftpd/userfile(表你用户所在文件)
第二行: auth(表示密码) required pam_userdb.so db=/etc/vsftpd/userfile
3)再次编写配置文件,加入guest_enable=YES,guest_username=student(表示用student身份登陆)如下图:
完成后登陆,如下图:(默认进去是student的家目录/home/stdent/下)
但是不能所有的虚拟用户登陆进去都是student的家目录,我们如何为他们建立自己独立的家目录,如下
13、虚拟账号独立家目录的设定
1)在配置文件里加入local_root=/wenjian/$USER和user_sub_token=$USER,如下图:
2)完成后给他们建立独立的家目录,如下图
3)再次登陆访问每个用户就有了自己独立的家目录
但是发现此时用户无法进行上传文件或删除文件的操作,这是因为被限制了,那么如何解决这种限制,如下
14、让固定的用户可以进行固定操作
1)首先在其目录下建立一个pub目录,并将pub加入所属用户的组(我这里是student),然后在给pub写的权限,使我们进入之后可以在pub下进行操作,具体步骤如下图
2)这时候需要去ftp配置文件里,写入user_config_dir=/etc/vsftpd/confdir(这个文件自己建立,我们要的固定操作需要写在这个文件里),如下图:
3)创建好这个文件后,我们编辑这个文件,在其后加入你想要赋予功能的固定用户,这里我选择的是赋予student1用户可以put上传文件的操作,如下图
可以看到student1具有了上传的功能,同理还可以让其具有删除等的功能,还是编辑student1文件
vim /etc/vsftpd/confdir/student1 在文件里写入你想要赋予的功能即可,如下图:
四、ftp常见报错
530认证失败
550程序本身不允许你这样做
553服务器上的文件系统不允许你写
500权限过大(一般是对/var/ftp操作,但子目录可以pub可以操作)