码迷,mamicode.com
首页 > 其他好文 > 详细

网络文件共享服务-vsftp

时间:2018-10-22 23:17:42      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:dha   time   chmod   tran   最新版   oca   通道   范围   run   

文件传输协议FTP
    1、File Transfer Protocol 早期的三个应用级协议之一
    2、基于C/S结构
    3、双通道协议:
            数据和命令连接
            数据连接则是从命令决定传输数据开始到数据传输结束,这个连接则关闭了
            客户端发起请求服务端响应、双方正式建立连接。而结束,这是命令连接的正常工作逻辑
            数据连接是临时根据命令需求建立的、根本目的是为了客户端上传数据给服务端
            数据连接谁给打开
                    数据连接如果是为服务器端主动去连接客户端的称为主动模式
                    由客户端发请求、服务端响应、称为被动模式
                    FTP多数都是工作在被动模式下,由客户端发请求来连接服务器
    4、数据传输格式:
            二进制(默认)和文本
    5、两种模式:服务器角度
            主动(PORT style):服务器主动连接
            命令(控制):客户端:随机port --- 服务器:tcp21
            数据:客户端:随机port ---服务器:tcp20
            被动(PASV style):客户端主动连接
            命令(控制):客户端:随机port --- 服务器:tcp21
            数据:客户端:随机port --- 服务器:随机port
    6、服务器被动模式数据端口示例:
            227 Entering Passive Mode (172,16,0,1,224,59)
            服务器数据端口为:224*256+59

FTP软件介绍:

FTP服务器:
    Wu-ftpd,Proftpd,Pureftpd,ServU,IIS
    vsftpd:Very Secure FTP Daemon,CentOS默认FTP服务器
        高速,稳定,下载速度是WU-FTP的两倍
        ftp.redhat.com数据:单机最多可支持15000个并发
客户端软件:
    ftp,lftp,lftpget,wget,curl
    ftp -A ftpserver port -A主动模式 –p 被动模式
    lftp –u username ftpserver
    lftp username@ftpserver
    lftpget ftp://ftpserver/pub/file
    gftp:GUI centos5 最新版2.0.19 (11/30/2008)
    filezilla,CuteFtp,FlashFXP,LeapFtp
    IE ftp://username:password@ftpserver

FTP服务

状态码:
    1XX:    信息       125:数据连接打开
    2XX:    成功类状态   200:命令OK 230:登录成功
    3XX:    补充类          331:用户名OK
    4XX:    客户端错误    425:不能打开数据连接
    5XX:    服务器错误   530:不能登录

用户认证:
    匿名用户:ftp,anonymous,对应Linux用户ftp
    系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow
    虚拟用户:特定服务的专用用户,独立的用户/密码文件
        nsswitch:network service switch名称解析框架
        pam:pluggable authentication module 用户认证
        /lib64/security /etc/pam.d/ /etc/pam.conf

vsftpd服务

1、由vsftpd包提供
2、不再由xinetd管理
3、用户认证配置文件:
        /etc/pam.d/vsftpd
4、服务脚本:
        /usr/lib/systemd/system/vsftpd.service
        /etc/rc.d/init.d/vsftpd
5、配置文件:
        /etc/vsftpd/vsftpd.conf
        man 5 vsftpd.conf
        格式:option=value
        注意:= 前后不要有空格
6、匿名用户(映射为系统用户ftp )共享文件位置:
        /var/ftp
7、系统用户共享文件位置:
        用户家目录
8、虚拟用户共享文件位置:
        为其映射的系统用户的家目录
9、命令端口
        listen_port=21
10、主动模式端口
        connect_from_port_20=YES  主动模式端口为20
        ftp_data_port=20 (默认) 指定主动模式的端口
11、被动模式端口范围
        linux 客户端默认使用被动模式
        windows 客户端默认使用主动模式
        pasv_min_port=6000 0为随机分配
        pasv_max_port=6010
12、使用当地时间
        use_localtime=YES 使用当地时间(默认为NO,使用GMT)
13、匿名用户
        anonymous_enable=YES                    支持匿名用户
        no_anon_password=YES(默认NO)          匿名用户略过口令检查
        anon_world_readable_only (默认YES)        只能下载全部读的文件
        anon_upload_enable=YES                  匿名上传,注意:文件系统权限
        anon_mkdir_write_enable=YES             匿名建目录
        anon_umask=0333                         指定匿名上传文件的umask,默认077
        anon_other_write_enable=YES             可删除和修改上传的文件
        chown_uploads=YES(默认NO)             指定上传文件的默认的所有者和权限
        chown_username=wang
        chown_upload_mode=0644
14、Linux系统用户
        local_enable=YES            是否允许linux用户登录
        write_enable=YES            允许linux用户上传文件
        local_umask=022             指定系统用户上传文件的默认权限
        guest_enable=YES            所有系统用户都映射成guest用户
        guest_username=ftp          配合上面选项才生效,指定guest用户
        local_root=/ftproot         guest用户登录所在目录
15、禁锢所有系统用户在家目录中
        chroot_local_user=YES(默认NO,不禁锢)禁锢系统用户
16、禁锢或不禁锢特定的系统用户在家目录中,与上面设置功能相反
        chroot_list_enable=YES
        chroot_list_file=/etc/vsftpd/chroot_list
        当chroot_local_user=YES时,则chroot_list中用户不禁锢
        当chroot_local_user=NO时,则chroot_list中用户禁锢
17、wu-ftp日志:
        默认启用
            xferlog_enable=YES (默认)启用记录上传下载日志
            xferlog_std_format=YES (默认) 使用wu-ftp日志格式
            xferlog_file=/var/log/xferlog (默认)可自动生成
    vsftpd日志:
        默认不启用
            dual_log_enable=YES 使用vsftpd日志格式,默认不启用
            vsftpd_log_file=/var/log/vsftpd.log(默认)可自动生成
18、登录提示信息
        ftpd_banner="welcome to mage ftp server"
        banner_file=/etc/vsftpd/ftpbanner.txt 优先上面项生效
    目录访问提示信息
        dirmessage_enable=YES (默认)
        message_file=.message(默认) 
        信息存放在指定目录下.message

19、使用pam(Pluggable Authentication Modules)完成用户认证
    pam_service_name=vsftpd
        pam配置文件:/etc/pam.d/vsftpd
        /etc/vsftpd/ftpusers 默认文件中用户拒绝登录

正常情况下,任何一个文件通过网络服务访问时,他应该受控于两个维度
    1、受控于软件本身定义的访问控制规则
    2、受控于文件系统

vsftpd匿名用户配置示例

简单示例:只要安装好之后启动服务就可以正常使用ftp
1、安装vsftpd软件
    [root@node6 ~]#yum -y install vsftpd
2、启动vsftpd服务
    [root@node6 ~]#systemctl start vsftpd
3、通过客户端来访问做个简单测试
    [root@node7 ~]#lftp 192.168.137.56
    lftp 192.168.137.56:~> ls              
    drwxr-xr-x    2 0        0               6 Aug 03  2017 pub
    lftp 192.168.137.56:/> cd pub
    lftp 192.168.137.56:/pub> ls
    lftp 192.168.137.56:/pub> ls
    -rw-r--r--    1 0        0              23 Oct 22 12:26 issue
    lftp 192.168.137.56:/pub> lcd /tmp
    lcd ok, local cwd=/tmp
    lftp 192.168.137.56:/pub> mget issue 
    23 bytes transferred
    lftp 192.168.137.56:/pub> bye
    [root@node7 ~]#ls /tmp/
    issue
4、把服务端共享的文件权限改成600
[root@node6 /var/ftp/pub]#chmod 600 issue 
[root@node6 /var/ftp/pub]#ll
total 4
-rw------- 1 root root 23 Oct 22 20:26 issue

5、再次通过客户端连接然后下载此文件
    [root@node7 ~]#lftp 192.168.137.56
    lftp 192.168.137.56:/> cd pub/
    lftp 192.168.137.56:/pub> ls
    -rw-------    1 0        0              23 Oct 22 12:26 issue
    lftp 192.168.137.56:/pub> mget issue 
    mget: Access failed: 550 Failed to open file. (issue)
    lftp 192.168.137.56:/pub> 

配置匿名用户上传、下载、等功能:
    修改配置文件,打开允许匿名用户上传功能
        [root@node6 /etc/vsftpd]#vim vsftpd.conf 
            #anon_upload_enable=YES
            anon_upload_enable=YES

    通过客户端验证
        [root@node7 ~]#lftp 192.168.137.56
        lftp 192.168.137.56:~> lcd /etc/
        lcd ok, local cwd=/etc
        lftp 192.168.137.56:~> put fstab
        put: Access failed: 553 Could not create file. (fstab)
        lftp 192.168.137.56:/> 

    正常情况下,ftp的用户anonymous被映射为ftp用户,而默认共享的pub目录属主属组默认为root,而ftp用户被映射为其它用户是没有写权限,所以导致无法上传,建议不要修改pub的权限,最好新建一个目录用来上传

    解决方法:在pub同级目录下新建一个目录专门用来上传,修改目录的所属组和属主权限为ftp
        [root@node6 /var/ftp]#mkdir upload
        [root@node6 /var/ftp]#ls
        pub  upload
        [root@node6 /var/ftp]#ll
        total 0
        drwxr-xr-x 2 root root 19 Oct 22 20:26 pub
        drwxr-xr-x 2 root root  6 Oct 22 20:52 upload
        [root@node6 /var/ftp]#chown -R ftp.ftp upload/
        [root@node6 /var/ftp]#ll -ld  upload/
        drwxr-xr-x 2 ftp ftp 6 Oct 22 20:52 upload/

    再次验证客户端
        [root@node7 ~]#lftp 192.168.137.56/upload
        cd ok, cwd=/upload
        lftp 192.168.137.56:/upload> lcd /etc
        lcd ok, local cwd=/etc
        lftp 192.168.137.56:/upload> put fstab
        595 bytes transferred
        lftp 192.168.137.56:/upload> 
    切换到服务器上查看文件
        [root@node6 /var/ftp]#cd upload/
        [root@node6 /var/ftp]#ls -l upload/
        total 4
        -rw------- 1 ftp ftp 595 Oct 22 20:55 fstab

把上传的文件属主改成别的用户、并修改文件权限:
    编辑配置文件
        [root@node6 /etc/vsftpd]#vim vsftpd.conf 
        #chown_uploads=YES
        #chown_username=whoever
    改为
        chown_uploads=YES
        chown_username=cobbler
        chown_upload_mode=0644

    创建cobbler用户
        [root@node6 /etc/vsftpd]#useradd cobbler
    重启vsftpd服务
        [root@node6 /etc/vsftpd]#systemctl restart vsftpd
    通过客户端验证此举设置是否成功
        [root@node7 ~]#lftp 192.168.137.56/upload
        cd ok, cwd=/upload
        lftp 192.168.137.56:/upload> lcd /etc
        lcd ok, local cwd=/etc
        lftp 192.168.137.56:/upload> put passwd
        1199 bytes transferred
        lftp 192.168.137.56:/upload> ls
    从服务器端查看文件属性
        [root@node6 /var/ftp]#cd upload/
        [root@node6 /var/ftp/upload]#ll
        total 8
        -rw------- 1 ftp     ftp  595 Oct 22 20:55 fstab
        -rw-r--r-- 1 cobbler ftp 1199 Oct 22 21:04 passwd

    在客户端连接到服务器尝试能否建立目录
        lftp 192.168.137.56:/upload> mkdir test
        mkdir: Access failed: 550 Permission denied. (test)
        lftp 192.168.137.56:/upload> rm fstab
        rm: Access failed: 550 Permission denied. (fstab)
        lftp 192.168.137.56:/upload> rm passwd 
        rm: Access failed: 550 Permission denied. (passwd)
        lftp 192.168.137.56:/upload> 
    需要允许匿名用户创建删除文件或者目录需要在服务器的配置文件里面开启如下两项
        [root@node6 /etc/vsftpd]#vim vsftpd.conf 
            anon_mkdir_write_enable=YES
            anon_other_write_enable=YES
    修改完之后重启服务
        [root@node6 /etc/vsftpd]#systemctl restart vsftpd
    在客户端上验证
        [root@node7 ~]#lftp 192.168.137.56/upload
        cd ok, cwd=/upload
        lftp 192.168.137.56:/upload> mkdir test
        mkdir ok, ‘test‘ created
        lftp 192.168.137.56:/upload> ls
        -rw-------    1 14       50            595 Oct 22 12:55 fstab
        -rw-r--r--    1 1000     50           1199 Oct 22 13:04 passwd
        drwx------    2 14       50              6 Oct 22 13:10 test
        lftp 192.168.137.56:/upload> rm fstab 
        rm ok, ‘fstab‘ removed
        lftp 192.168.137.56:/upload> rm passwd 
        rm ok, ‘passwd‘ removed
        lftp 192.168.137.56:/upload> rmdir test
        rmdir ok, ‘test‘ removed
        lftp 192.168.137.56:/upload> ls
        lftp 192.168.137.56:/upload> 

vsftpd匿名用户配置示例

创建一个系统用户,并修改密码
    [root@node6 /etc/vsftpd]#useradd ilinux
    [root@node6 /etc/vsftpd]#echo 123456|passwd --stdin ilinux
    Changing password for user ilinux.
    passwd: all authentication tokens updated successfully.

客户端登录刚刚在服务器端创建的系统用户,登录上来之后显示的是系统用户的名称,而匿名用户没有

    [root@node7 ~]#lftp -u ilinux 192.168.137.56
    Password: 
    lftp ilinux@192.168.137.56:~> ls       
    lftp ilinux@192.168.137.56:~> lcd /etc/
    lcd ok, local cwd=/etc
    lftp ilinux@192.168.137.56:~> put issue
    23 bytes transferred
    lftp ilinux@192.168.137.56:~> ls 
    -rw-r--r--    1 1001     1001           23 Oct 22 13:19 issue
    lftp ilinux@192.168.137.56:~> 

在服务器端ilinux的家目录里面查看从客户端上传上来的文件
每个用户登录ftp之后访问的都是用户的家目录
为什么匿名用户访问的是/var/ftp目录,匿名用户访问的也是家目录,是ftp的家目录
    [root@node6 /var/ftp/upload]#grep "^ftp" /etc/passwd
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    [root@node6 /var/ftp/upload]#ls /home/ilinux/
    issue

系统用户和匿名用户受控方式是不一样的,就算禁止匿名用户上传下载,系统用户不受影响、正常能上传和下载

把系统用户映射为来宾帐号guest

先创建来宾用户和来宾的目录,然后需要把创建的目录去掉写权限要不然通过客户端验证会报错误提示
    [root@node6 /var/ftp/upload]#useradd -d /data/ftproot vsguest
    [root@node6 /var/ftp/upload]#chmod -w /data/ftproot/
    [root@node6 /var/ftp/upload]#ls -ld /data/ftproot/
    dr-x------ 2 vsguest vsguest 62 Oct 22 21:56 /data/ftproot/
    [root@node6 /var/ftp/upload]#chmod +rx !$
    chmod +rx /data/ftproot/
    [root@node6 /var/ftp/upload]#ls -ld /data/ftproot/   
    dr-xr-xr-x 2 vsguest vsguest 62 Oct 22 21:56 /data/ftproot/
    [root@node6 /var/ftp/upload]#
编辑配置文件增加两项选项
    [root@node6 /etc/vsftpd]#vim vsftpd.conf 
    #guest user
    guest_enable=YES
    guest_username=vsguest
重启服务
    [root@node6 /etc/vsftpd]#systemctl restart vsftpd

复制测试文件到来宾目录下,能区分开来是在此目录下
    [root@node6 /etc/vsftpd]#cp /etc/vsftpd/vsftpd.conf /data/ftproot/

在客户端上测试:这里上面说过要把来宾的目录写权限去掉要不然会提示500的错误提示
    [root@node7 ~]#lftp -u ilinux 192.168.137.56
    Password: 
    lftp ilinux@192.168.137.56:~> pwd      
    ftp://ilinux@192.168.137.56
    lftp ilinux@192.168.137.56:~> ls
    ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
    lftp ilinux@192.168.137.56:~> ls
    ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
    lftp ilinux@192.168.137.56:~> ls
    lftp ilinux@192.168.137.56:/> ls 
    -rw-------    1 0        0            5129 Oct 22 14:00 vsftpd.conf
    lftp ilinux@192.168.137.56:/> 

在服务器上把刚才映射为来宾帐号的那两项注释掉然后再通过客户端测试看是不是回到了它自己的家目录里面

    [root@node6 /etc/vsftpd]#vim vsftpd.conf 
        #guest_enable=YES
        #guest_username=vsguest
重启服务
    [root@node6 /etc/vsftpd]#systemctl restart vsftpd
然后在home下的ilinux目录下查看里面的文件,再通过客户端查看里面的是否和这里的看到的是一样的文件
    [root@node6 /var/ftp/upload]#ls /home/ilinux/
    issue
测试客户端上:
    [root@node7 ~]#lftp -u ilinux 192.168.137.56
    Password: 
    lftp ilinux@192.168.137.56:~> ls       
    -rw-r--r--    1 1001     1001           23 Oct 22 13:19 issue
    lftp ilinux@192.168.137.56:~> 
    lftp ilinux@192.168.137.56:~> cd /etc/      

    一旦允许系统用户登录以后有个悲剧性的问题,它可以随意游荡在整个系统之上,不光是自己的家目录,如果服务器上有敏感信息,这样一来用户登录上去之后直接可以下载造成信息泄露,建议最好用户登录上来之后只能呆在自己的家目录里面,别的目录不让它随意切换                            

禁锢系统用户在家目录中示例:

要禁锢哪个用户确保这个用户的家目录没有写权限,要不然会报错,不让使用
不过禁锢用户不常用
修改配置文件里面的参数
    [root@node6 /etc/vsftpd]#vim vsftpd.conf 

    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list

新建一个用户
    [root@node6 /etc/vsftpd]#useradd ik8s
    [root@node6 /etc/vsftpd]#echo 123456|passwd --stdin ik8s
    Changing password for user ik8s.
    passwd: all authentication tokens updated successfully.
把用户家目录的写权限去掉
    [root@node6 /etc/vsftpd]#chmod -w /home/ik8s/
创建要禁锢的用户列表
    [root@node6 /etc/vsftpd]#vim /etc/vsftpd/chroot_list
    ik8s
重启服务
    [root@node6 /etc/vsftpd]#systemctl restart vsftpd

客户端测试:
    [root@node7 ~]#lftp -u ilinux,123456 192.168.137.56
    lftp ilinux@192.168.137.56:~> cd /etc/                         
    lftp ilinux@192.168.137.56:/etc> exit
    [root@node7 ~]#lftp -u ik8s,123456 192.168.137.56
    lftp ik8s@192.168.137.56:~> cd /etc
    cd: Access failed: 550 Failed to change directory. (/etc)
    lftp ik8s@192.168.137.56:/> ls
    lftp ik8s@192.168.137.56:/> 

网络文件共享服务-vsftp

标签:dha   time   chmod   tran   最新版   oca   通道   范围   run   

原文地址:http://blog.51cto.com/dklwj/2307629

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!