Linux菜鸟成长日记 ( Linux 下的 ftp 文件传输协议 )
https://blog.csdn.net/buster_zr/article/details/80244542
FTP FTP 是 File Transfer Protocol (文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:”下载”(Download)和”上传”(Upload)。”下载”文件就是从远程主机拷贝文件至自己的计算机上;”上传”文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。在进行ftp协议应用前需要先在服务端编辑/etc/sysconfig/selinux,打开selinux,否则将会限制ftp服务 [root@server ~]# vim /etc/sysconfig/selinux 内容如下: ......(省略前几行)...... 6 # disabled - No SELinux policy is loaded. 7 SELINUX=disabled #将第七行改为: SELINUX=disabled 禁用selinux 编辑后后重启机器reboot(不重启机器不会生效) 重启后执行: [root@server ~]# getenforce 若显示Disabled,则表示修改成功123456789执行如下: 编辑/etc/sysconfig/selinux的第七行,禁用selinux 重启后执行getenforce,验证是否成功关闭selinux
1.安装vsftpd(在服务端) [root@server ~]# yum install vsftpd.x86_64 ......(此处省略安装过程)......Installed: vsftpd.x86_64 0:3.0.2-9.el7
Complete!
安装成功后,启动vsftpd服务,并使其开机自启: [root@server ~]# systemctl start vsftpd #启动vsftp [root@server ~]# systemctl enable vsftpd #开机自启vsftp
开启防火墙,并让防火墙允许ftp服务: [root@server ~]# systemctl start firewalld #开启防火墙 [root@server ~]# firewall-cmd --list-all #列出在防火墙中添加或启用的所有内容。 [root@server ~]# firewall-cmd --permanent --add-service=ftp #让防火墙永久允许ftp服务运行 [root@server ~]# firewall-cmd --reload #重新加载防火墙12345678910111213141516执行如下: 列出在防火墙中添加或启用的所有内容。 让防火墙永久允许ftp服务运行
2.在/var/ftp/下建立文件,在客户端安装lftp并执行lftp服务连接服务端进行验证服务在服务端建立文件
[root@server ~]# touch /var/ftp/test1在客户端
[root@client ~]# yum install lftp.x86_64 -y ......(略去安装过程)...... Installed: lftp.x86_64 0:4.4.8-3.el7
Complete!
[root@client ~]# lftp 172.25.254.239 #连接服务端主机 lftp 172.25.151.150:~> ls123456789执行结果如下:
3.ftp中的本地用户,匿名用户,虚拟用户3.1ftp服务的基本信息软件安装包:vsftpd默认发布目录: /var/ftp协议接口: 21/tcp服务配置文件: /etc/vsftpd/vstpd.conf报错id的解析: 500 ##文件系统权限过大 530 ##用户认证失败 550 ##服务本身功能未开放 553 ##本地文件系统权限过小编辑vsftpd.conf配置文件,配置vsftpd服务的详细权限 #(编辑完配置文件后必须重启服务)123456789103.2 本地用户(Local users)所谓本地用户就是以本地已存在的用户的身份进行lftp连接编辑 /etc/vsftpd/vsftpd.conf 进行对本地用户的管理注:本地用户在不加限定的情况才可以通过lftp访问服务器的/目录。且执行lftp命令后进入的目录为本地用户对应的家目录3.2.1限制本地用户登录和对lftp下的文件文件夹可不可写编辑 /etc/vsftpd/vsftpd.conf 第16,19行进行本地用户的读写限制: [root@server ~]# vim /etc/vsftpd/vsftpd.conf #编辑配置文件 内容如下(第16行,第19行): 14 # Uncomment this to allow local users to log in. 15 # When SELinux is enforcing check for SE bool ftp_home_dir 16 local_enable=YES #YES表示允许本地用户登录 17 # 18 # Uncomment this to enable any form of FTP write command. 19 write_enable=YES #YES表示允许本地用户执行写12345678执行完成后,可在客户端进行验证
以服务端存在的用户student为例,首先在服务端student加目录下建立文件用来测试 [root@server student]# touch /home/student/studentfile1在客户端连接服务端 [root@client ~]# lftp 172.25.151.150 -u student #以student身份登录lftp服务 lftp student@172.25.151.150:~> ls #执行 ls 验证是否为student家目录 lftp student@172.25.151.150:~> rm studentfile #执行rm验证本地用户是否可写123具体执行如下:
在客户端student家目录下创建文件
以本地用户身份连接后,验证是否为本地用户家目录,并看本地用户是否可写
3.2.2 限制本的用户浏览(将本地用户浏览范围限制在其家目录下)限制本地用户活动范围,在不限制的情况下,本地用户可以访问系统家目录,权限过大编辑 /etc/vsftpd/vsftpd.conf 第100行对本地用户进行限制 [root@server student]# vim /etc/vsftpd/vsftpd.conf #编辑配置文件内容如下(第100行左右):
100 chroot_local_user=YES #YES表示对本地用户活动范围进行限制
[root@server student]# systemctl restart vsftpd.service #重启服务 [root@server student]# chmod u-w /home/* #修改用户对于用户家目录的权限,否则权限过大,无法通过lftp连接 #修改后本地用户无法进行上传 12345678具体执行如下:
进行限制前,可进入服务端根目录
进行限定后,只能进入普通用户家目录
3.2.3 限制本地用浏览的白名单编辑 /etc/vsftpd/vsftpd.conf 进行建立 [root@server ~]# vim /etc/vsftpd/vsftpd.conf 内容如(100行左右)下: 100 chroot_local_user=YES #YES 表示用户浏览白名单 101 chroot_list_enable=YES 102 # (default follows) 103 chroot_list_file=/etc/vsftpd/chroot_list #编辑/etc/vsftpd/chroot_list规定白名单用户 [root@server student]# systemctl restart vsftpd.service #重启服务 [root@server ~]# vim /etc/vsftpd/chroot_list 内容如下: student #输入用户名~ 123456789101112执行如下: 编辑/etc/vsftpd/vsftpd.conf 编辑白名单,将用户student加入白名单 在客户端进行验证 白名单内的student用户可以访问服务端"/"目录 非白名单用户,如用户linux,则只能访问linux用户家目录
<注:还可以编辑 /etc/vsftpd/vsftpd.conf 规定本地用户通过lftp登录的家目录>
[root@server ~]# vim /etc/vsftpd/vsftpd.conf 内容如下:20 local_root=/pub #设定本地用户登录后的目录为/pub [root@server ~]# systemctl restart vsftpd.service1234执行如下: 编辑 /etc/vsftpd/vsftpd.conf : 重启服务后,在 /pub/ 新建文件,然后在客户端验证 建立用来测试的文件 在客户端,分别用本地用户linux和student进行测试
3.2.4 限制本地用浏览的黑名单编辑 /etc/vsftpd/vsftpd.conf 进行建立 [root@server ~]# vim /etc/vsftpd/vsftpd.conf 100 chroot_local_user=NO #NO表示用用户黑名单 101 chroot_list_enable=YES 102 # (default follows) 103 chroot_list_file=/etc/vsftpd/chroot_list #编辑/etc/vsftpd/chroot_list 规定黑名单用户 [root@server student]# systemctl restart vsftpd.service #重启服务 [root@server ~]# vim /etc/vsftpd/chroot_list 内容如下: student #输入用户名拉入限制黑名单123456789执行如下: 编辑/etc/vsftpd/vsftpd.conf 编辑黑名单,将用户student加入黑名单 在客户端进行验证 黑名单内的student用户仅能访问sutudent用户家目录 非黑名单用户,如linux用户可以访问服务端 "/"目录
3.2.5限制本地用户登录黑名单限制本地用户通过lftp连接主机
vsftpd服务的黑名单有两个 /etc/vsftp/ftpusers /etc/vsftpd/suer_list 以上两者默认都为限制用户登陆的黑名单,/etc/vsftpd/ftpusers优先级别最高通过 /etc/vsftpd/ftpusers 添加黑名单:
[root@server ~]# vim /etc/vsftpd/ftpusers 1 # Users that are not allowed to login via ftp # 不允许通过ftp登录的用户。 2 root ......(我是用来省略的)...... 15 nobody 16 student #将用户student加入黑名单~ 12345678通过 /etc/vsftpd/user_list 添加黑名单
编辑user_list前,先编辑/etc/vsftpd/vssftpd.conf在127行左右添加如下内容 [root@server ~]# vim /etc/vsftpd/vsftpd.conf 内容如下: 127 userlist_deny=YES #YES表示 /etc/vsftpd/user_list 为黑名单 [root@server ~]# systemctl restart vsftpd.service #重启服务再编辑/etc/vsftpd/user_list [root@server ~]# vim /etc/vsftpd/user_list 1 # vsftpd userlist 2 # If userlist_deny=NO, only allow users in this file # 如果userlist_deny=NO,则只允许此文件中的用户。 3 # If userlist_deny=YES (default), never allow users in this file, # 如果userlist_deny=YES(默认),则不允许此文件中的用户......(我是用来省略的)...... 20 nobody 21 student #将student用户加入黑名单12345678910111213141516具体执行如下(以 user_list 为例): 编辑 /etc/vsftpd/user_list : 编辑 /etc/vsftpd/user_list 进行黑名单添加 在客户端进行验证 黑名单内的student用户不能通过lftp访问 非黑名单用户,如linux用户可以访问
3.2.6限制本地用户登录白名单用户登陆白名单设定( /ect/vsftpd/user_list )
编辑user_list前,先编辑/etc/vsftpd/vssftpd.conf 在127行左右添加如下内容 [root@server ~]# vim /etc/vsftpd/vsftpd.conf 内容如下: 127 userlist_deny=NO #NO表示 /etc/vsftpd/user_list 为白名单 [root@server ~]# systemctl restart vsftpd.service #重启服务 再编辑 /etc/vsftpd/user_list [root@server ~]# vim /etc/vsftpd/user_list 1 # vsftpd userlist 2 # If userlist_deny=NO, only allow users in this file # 如果userlist_deny=NO,则只允许此文件中的用户。 3 # If userlist_deny=YES (default), never allow users in this file, # 如果userlist_deny=YES(默认),则不允许此文件中的用户 ......(我是用来省略的)...... 20 nobody 21 student #将student用户加入白名单12345678910111213141516注:当user_list作为白名单,且用户同时出现再user_list和ftpusers中时,ftpusers生效执行如下: 编辑 /etc/vsftpd/user_list : 编辑 /etc/vsftpd/user_list 进行白名单添加 在客户端进行验证 白名单内的用户student,可以通过lftp访问 非白名单用户,如linux用户则不可以访问
<注:本地用户是否可以登录,取决于 /etc/vsftpd/vsftpd.conf 中的第16行>
编辑/etc/vsftpd/vsftpd.conf [root@server ~]# vim /etc/vsftpd/vsftpd.conf 编辑第16行 16 local_enable=NO #NO表示本地用户不可以登陆,若是YES则表示本地用户可以登录 [root@server ~]# systemctl restart vsftpd.service #重启服务12345执行如下: 编辑 /etc/vsftpd/vsftpd.conf 进行本地用户限制 重启服务后在客户端进行测试
3.2.7 本地用户登录后的权限本地用户通过lftp登录后,对登录后的目录进行可进行上传,下载,删除等操作,我们可以通过编辑 /etc/vsftpd/vsftpd.conf 对这些权限进行限制 编辑 /etc/vsftpd/vsftpd.conf [root@server ~]# systemctl restart vsftpd.service 对第19行进行编辑: 19 write_enable=NO #NO表示用户不可写,YES表示用户可写 [root@server ~]# systemctl restart vsftpd.service #重启服务
注:本地用户如果可写,就可以对登录后的目录进行:上传,下载,删除等操作,如果不可写,则只可以下载1234567执行如下: *编辑/etc/vsftpd/vsftpd.conf 让本地用户不可写* 重启服务后,在客户端进行验证(不可上传,不可删除,可以下载)
3.3 匿名用户(Anonymous users)除了上面介绍的本地用户外,匿名用户也可以通过lftp访问服务端3.3.1 匿名用户登录通过编辑 /etc/vsftpd/vsftpd.conf 来进行对匿名用户登录的限制
编辑/etc/vsftpd/vsftpd.conf [root@server ~]# vim /etc/vsftpd/vsftpd.conf 编辑第12行 12 anonymous_enable=NO #NO表示不允许匿名用户登录,YES表示允许 [root@server ~]# systemctl restart vsftpd.service #重启服务12345执行如下: 编辑配置文件,不允许匿名用户登录,并重启服务 在客户端进行验证 <匿名用户也同本地用户相同,可以进行用户访问家目录规定>
编辑/etc/vsftpd/vsftpd.conf [root@server ~]# vim /etc/vsftpd/vsftpd.conf 编辑内内容如下: 21 anon_root=/pub #匿名用户访问目录修改为/pub [root@server ~]# systemctl restart vsftpd.service #重启服务12345执行如下: 编辑配置文件,指定匿名用户访问目录,并重启服务 在客户端进行验证
3.3.2 匿名用户上传通过编辑 /etc/vsftpd/vsftpd.conf 来进行对匿名用户上传权限进行限制 注:匿名用户上传的另一前提是匿名用户访问的目录,对你名用户来说有写的权限
编辑/etc/vsftpd/vsftpd.conf [root@server ~]# vim /etc/vsftpd/vsftpd.conf 编辑内内容如下: 19 write_enable=YES ##匿名用户上传的前提是本地用户可写 ......(我是用来省略的)...... 30 anon_upload_enable=YES #YES表示允许匿名用户上传 [root@server ~]# systemctl restart vsftpd.service #重启服务 [root@server ~]# chmod o+w /var/ftp/pub/ #修改目录权限,保证匿名用户可写12345678执行如下: 编辑配置文件,设定匿名用户可以上传,并重启服务 修改目录权限 在客户端进行验证
3.3.3 匿名用户写与下载匿名用户默认情况下是不可以对自己无法读的文件进行下载,建立目录,删除等操作
通过编辑 /etc/vsftpd/vsftpd.conf 来进行对匿名用户下载等权限进行限制
编辑/etc/vsftpd/vsftpd.conf [root@server ~]# vim /etc/vsftpd/vsftpd.conf 编辑内内容如下: 31 anon_other_write_enable=YES #匿名用户可以对文件进行删除 32 anon_world_readable_only=NO #设定参数位NO表示匿名用户可以下载 33 anon_mkdir_write_enable=YES #匿名用户可以进行创建目录 [root@server ~]# systemctl restart vsftpd.service #重启服务1234567<注:匿名用户进行删除,建立目录等操作的前提是:对当前目录可写> 编辑配置文件,设定匿名用户可进行下载等操作,并重启服务 在客户端进行验证 匿名用户登录后,默认情况下,进入服务端 /var/ftp/目录下进行操作,因为匿名用户对该目录没有写的权限,所以无法进行删除test的操作,切换到 pub 目录,因为前面修改了pub 目录对于其他用户的权限,匿名用户对该目录可写,故可以进行删除 passwd 的操作,下载操作亦能进行。 )
3.3.4 限制用户上传(下载)速率通过编辑 /etc/vsftpd/vsftpd.conf 来进行对匿名用户上传(下载)速率进行限制
编辑/etc/vsftpd/vsftpd.conf [root@server ~]# vim /etc/vsftpd/vsftpd.conf 编辑内内容如下: 35 anon_max_rate=102400 #限制匿名用户下载上传速率,单位为字节(此处限制为100k) [root@server ~]# systemctl restart vsftpd.service #重启服务12345编辑配置文件,限制匿名用户下载(上传)速度,并重启服务 在客户端进行验证 先从内存中截取一大块文件进行限速的材料。 限速前:速度大约(213.54M/s) 限速后:
3.3.5 上传文件的默认权限通过编辑 /etc/vsftpd/vsftpd.conf 来进行对匿名用户和本地用户上传后的默认权限进行设定
编辑/etc/vsftpd/vsftpd.conf [root@server ~]# vim /etc/vsftpd/vsftpd.conf 编辑内内容如下: 24 local_umask=022 #本地用户上传后文件的默认权限保留值 25 anon_umask=077 #匿名用户上传后文件的默认权限保留值 [root@server ~]# systemctl restart vsftpd.service #重启服务123456执行如下: 编辑配置文件,进行对匿名用户和本地用户上传后的默认权限进行设定,并重启服务 在客户端进行验证 虚拟用户预留权限umask=077 本地用户预留权限umask=022
3.4 虚拟用户认证在linux之下,使用vsftp服务时,默认使用ftp访问的时候,如果想多个用户同时访问某一个目录,同时对同一目录下有着不同的权限,比如部分用户只能看,不修改,或者有的用户只能下载不能上传这些权限,这些设定只能通过vsftp中的虚拟用户来进行设定,本地用户用户无法达到这样的效果。
要完成虚拟用户的建立还需要认证插件的帮助(PAM)PAM主要是由一组共享库文件(也就是后缀名为.so文件)和一些配置文件组成的用于系统服务授权的一套东西,其中,PAM 就是 Pluggable Authentication Modules 这几个英文单词的缩写。当你在请求服务的时候,具有PAM认证功能的应用程序将与这些.so文件进行交互,以便得知是否可以授权给发起请求的用户来使用服务,比如su, vsftp, httpd,等。如果认证成功了,那么这个用户便可以使用服务或完成命令,如果认证失败了,那么这个用户将不能使用服务,同时,PAM将向指定的log文件写入警告信息。我们可以将PAM看作是一个中间裁判,它不依赖于任何应用或服务。你完全可以升级这些应用或服务而不必管PAM的共享库的更新或升级,反之亦然。所以它非常的灵活。3.4.1 创建虚拟帐号身份在/etc/vsftpd/下建立文文件用来放置虚拟用于的账户密码,用于后面的用户认证
[root@server ~]# vim /etc/vsftpd/virt-user #文件名自拟,用来放置虚拟用户的账 #户密码,用于后面的用户认证 #编辑内容如下: 1 user1 #虚拟用户的用户名 2 123 #密码 3 user2 #虚拟用户的用户名 4 123 #密码 5 user3 #虚拟用户的用户名 6 123 #密码123456789执行如下 编辑 /etc/vsftpd/virt-user
3.4.2 对文件进行加密保存虚拟帐号和密码的文本文件无法被系统帐号直接调用。我们需要使用db_load 命令生成db 数据库文件 [root@server ~]# db_load -T -t hash -f /etc/vsftpd/virt-user /etc/vsftpd/virt-user.db -T:允许应用程序能够将文本文件转译载入进数据库。 -t hash:使用hash码加密 -f:指定包含用户名和密码文本文件。此文件格式要示:奇数行用户名、偶数行密码1234执行如下: 对/etc/vsftpd/virt-user进行加密 查看加密后生成的密文(为乱码,保证系统安全性)
3.4.3 进行插件配对 (编辑/etc/pam.d/ftpuser <文件名自拟>) [root@server ~]# vim /etc/pam.d/ftpuser 编辑内容如下: 1 account required pam_userdb.so db=/etc/vsftpd/virt-user 2 auth required pam_userdb.so db=/etc/vsftpd/virt-user #required:表示本模块必须返回成功才能通过认证 #pam_userdb.so:pam插件,是PAM模块对db数据库进行身份验证 #db=目录:规定要认证的数据路径1234567执行如下:
3.4.4 进行vsftpd配置文件编辑编辑 /etc/vsftpd/vsftpd.conf 修改pam服务名称,让系统识别虚拟用户
[root@server ~]# vim /etc/vsftpd/vsftpd.conf 内容如下: 132 pam_service_name=ftpuser #pam服务名称(上面新建的/etc/pam.d/ftpuser) 133 guest_enable=YES #虚拟账户是否可以登陆 134 guest_username=ftp #虚拟用户指定一个用户身份 [root@server ~]# systemctl restart vsftpd.service #重启服务123456注:修改了 pam_service_name 以后本地用户是无法再登录lftp的 执行如下: 编辑 /etc/vsftpd/vsftpd.conf 重启服务后,在客户端进行验证 普通用户linux,student,都不能进行登录,虚拟用户user1可以
3.4.5 虚拟用户家目录指定为了方便操作与管理,可以为建立的虚拟用户分别指定家目录 [root@server ~]# mkdir /virt-users [root@server ~]# mkdir /virt-users/user{1..3} #user{1..3}必须与所建虚拟用户名称相对应
修改配置文件(/etc/vsftpd/vsftpd.conf) [root@server ~]# vim /etc/vsftpd/vsftpd.conf 编辑内容如下: 138 local_root=/virt-users/$USER #指定虚拟用户家目录 #$USER 为shell 下的变量 139 user_sub_token=$USER #调用参数 #这个选项是与虚拟用户结合使用的。它是用于自动为每个文件生成一个主目录。 [root@server ~]# systemctl restart vsftpd.service #重启服务1234567891011执行如下: 建立用户家目录 每个虚拟用户家目录下建立文件,用来验证 编辑 /etc/vsftpd/vsftpd.conf 重启服务,并在客户端验证
3.4.6 虚拟账户配置独立虚拟用户的权限上传下载,读写,等权限,在主配置文件中的规定,与匿名用户相同,故为了规定各个匿名用户不同的权限,可以创建各个虚拟用户对应的配置文件继续权限管理 先为每个虚拟用户,在其家目录下创建pub目录,并修改其权限让每个用户对该目录可写 [root@server ~]# mkdir /virt-users/user{1..3}/pub [root@server ~]# chgrp ftp /virt-users/user{1..3}/pub #修改目录所属组,与赋予虚拟用户的身份组相同 [root@server ~]# chmod 775 /virt-users/user{1..3}/pub #修改组权限,保证虚拟用户可写 [root@server ~]# mkdir /etc/vsftpd/conf_dir #创建虚拟用户配置文件存放目录并编辑主配置文件/etc/vsftpd/vsftpd.conf
[root@server ~]# vim /etc/vsftpd/vsftpd.conf #编辑配置文件
第140行左右:user_config_dir=/etc/vsftpd/conf_dir #将每个虚拟用户的配置文件分开 在/etc/vsftpd/conf_dir下建立每个虚拟用户对应的子配置文件 [root@server ~]# vim /etc/vsftpd/conf_dir/user1 #建立并编辑虚拟用户user1的vsftpd配置文件 #在其中对各个虚拟用户的权限进行配置(虚拟用户对应权限与匿名用户相同) 如编辑以下内容: 1 anon_upload_enable=YES #YES表示允许虚拟用户上传 2 anon_other_write_enable=YES #匿名用户可以对文件进行删除 3 anon_world_readable_only=NO #设定参数位NO表示匿名用户可以下载 4 anon_mkdir_write_enable=YES #匿名用户可以进行创建目录 [root@server ~]# systemctl restart vsftpd.service #重启服务123456789101112131415161718注:虚拟用户对应权限与匿名用户相同运行如下: 修改目录信息 创建虚拟用户配置文件存放目录后编辑主配置文件 编辑虚拟用户user1的vsftpd配置文件 重启服务后在客户端进行验证 未编辑user2的配置文件所以无法进行上传操作 user1的配置文件编辑完整,故可进行相应操作
3.4.7 限制账户登录个数我们可以通过编辑 /etc/vsftpd/vsftpd.conf 来实现对 lftp 登录用户个数的限制
编辑配置文件: [root@server ~]# vim /etc/vsftpd/vsftpd.conf 内容如下: 132 max_clients=2 #最大可连接客户端数量为2 [root@server ~]# systemctl restart vsftpd.service #重启服务12345执行如下: 编辑/etc/vsftpd/vsftpd.conf 限制 lftp 登录用户个数为 2 在客户端进行验证 客户端1 以 user1 进行连接,连接数为1,可连接 客户端2 以 user2 进行连接,连接数为2,可连接 客户端3以 user3 进行连接,连接数为3,超出用户数限制,user3不可连接
--------------------- 作者:Buster_ZR 来源:CSDN 原文:https://blog.csdn.net/buster_zr/article/details/80244542 版权声明:本文为博主原创文章,转载请附上博文链接!
posted on 2019-01-18 13:29 Sunshine-unlimited 阅读(641) 评论(0) 编辑 收藏 举报