美文网首页0基础自学linux
0基础自学linux运维-2.7-修改vsftp权限

0基础自学linux运维-2.7-修改vsftp权限

作者: hualinux | 来源:发表于2019-06-19 00:05 被阅读22次

    一、环境说明:

    作系统:centOS6.5

    其它设置:

    关闭了iptables及selinuxyum

    yum安装了nginx(存在了nginx用户)

    通过附一的命令安装了vsftp,用户名字为test

    默认配置文件为

    [root@vm2 vuser_conf]# cat /etc/vsftpd/vuser_conf/test

    local_root=/disk1/tools

    local_umask=022

    write_enable=YES

    guest_enable=yes

    guest_username=nginx

    anonymous_enable=no

    anon_world_readable_only=no

    anon_upload_enable=yes

    anon_mkdir_write_enable=yes

    anon_other_write_enable=yes

    anon_umask=022

    二、vsftp虚拟用户权限设置

    2.1.修改用户权限相关的知识点

    local_umask

    本地用户上传后文件时的umask掩码

    anon_umask

    虚拟用户或匿名用户上传文件时的umask掩码

    没有配置file_open_mod只有local_umask和anon_umask情况下

    对于目录来说最大权限是777(rwxrwxrwx)对于文件来说最大权限是666(rw-rw-rw-)

    file_open_mode上传档案的权限:

    为了突破umak文件最大权限不能超过666,在ssh上可以采用chmod修改,在vsftp中file_open_mode参数与shh中的chmod 功能是等效的!只不过是该用户模式下的chmod

    所以你用该真实用户chmod修改权限要在他的能力范围之内,如该用户无权修改其它真实用户的文件权限(比如root用户创建的文件)

    与chmod不同的是前面补多一个0,如chmod 775,那file_open_mode则为0775

    该参数一般放在最后执行

    2.例1 文件权限为774,目录权限为775

             因用nginx作为php和nginx的进程用户,公司网络不稳定有时用FTP上传会经常性中断,需要还需要建立一个普通的ssh用户名字为putong用sftp上传,对VSFTP中test用户所在目录也能读写,为了解决这个问题,

    nginx用户和ssh用户putong共用组,可以putong用户添加多一个nginx组

    组要有读写权限,那么目录就要775,文件就要774权限了

    sftp上传文件也要变成

    操作:

    #1.添加ssh用户putong,把nginx追加到其中,最后把putong的组改为nginx

    usermod -a  -G nginx putong

    [root@vm2 ~]# id putong

    uid=501(putong) gid=501(putong)groups=501(putong),499(nginx)

    vim /etc/passwd

    #修改putong ssh用户组为nginx组号499,这样建立文件用户名为putong,组为nginx

    putong:x:501:499::/home/putong:/bin/bash

    #2.修改vsftp中test用户的配置使用其中目录权限为775,文件权限为774

    local_root=/disk1/tools

    local_umask=022

    write_enable=YES

    guest_enable=yes

    guest_username=nginx

    anonymous_enable=no

    anon_world_readable_only=no

    anon_upload_enable=yes

    anon_mkdir_write_enable=yes

    anon_other_write_enable=yes

    anon_umask=002     #改成4位也行,0002

    file_open_mode=0774  #此处的0不能少,这上参数相当于chmod 774 上传文件名

    #3.修改ssh用户用sftp上传文件和目录的权限

             发现sftp没有像file_open_mode这样的参数,所在只能先用sftp上传完,随便用该账号ssh登陆,chmod命令修改文件及目录权限了,find

    /disk1/tools/ -type f -exec chmod 774 {} \;

    因为上面把putong用户的组改为nginx,这样nginx进程也能对该目录进行读写删除操作。

             如果觉得这样做麻烦的话,可以写一个脚本定时判断目录下文件权限是否是774,如果不是就修改为774也行。

    2.3.vsftp用户改变总结

    #1)设置上传文件权限:

    可以使用file_open_mode参数,一定要4位数字,相当于chmod命令

    如:

    file_open_mode=0774相当于chmod

    774 当前上传文件名

    #2)修改虚拟用户目录权限:

    可以使用anon_umask参数,保持local_umask=022不变,权限为777-anon_umask的值。

    发现一个问题有偶尔会出现不稳定的情况,other组不稳定的情况,不知道是客户端原因还是其它。

    如:

             anon_umask=003,则权限的值为777-003=774

    三、VSFTP虚拟用户的精确控制

    3.1.cmds_allowed参数

    当我们需要对某个用户进行精确控制的情况下,如除了删除命令其它都可以执行,那么就要用到cmds_allowed参数了

             因为我的是基于虚拟用户,进入虚拟用户配置目录我这里是按“附一 VSFP安装”来弄,

    #1.进入虚拟目录

    cd /etc/vsftpd/vuser_conf

    #2.随便找一个用户,我这里是test用户,保证

    write_enable=YES

    anon_upload_enable=YES

    anon_mkdir_write_enable=YES

    anon_other_write_enable=YES

    上面4个选择是YES的,默认配置是YES了

    #3.在最后面添加一个cmds_allowed=命令1,命令2,...命令n即可控制进行精确的控制了

    3.2. cmds_allowed参数命令列表

    cmds_allowed参数可用的命令列表如下:

    # ABOR - abort a file transfer

    # CWD - change working directory

    # DELE - delete a remote file

    # LIST - list remote files

    # MDTM - return the modification time of a file

    # MKD - make a remote directory

    # NLST - name list of remote directory

    # PASS - send password

    # PASV - enter passive mode

    # PORT - open a data port

    # PWD - print working directory

    # QUIT - terminate the connection

    # RETR - retrieve a remote file

    # RMD - remove a remote directory

    # RNFR - rename from

    # RNTO - rename to

    # SITE - site-specific commands

    # SIZE - return the size of a file

    # STOR - store a file on the remote host

    # TYPE - set transfer type

    # USER - send username

    # less common commands:

    # ACCT* - send account information

    # APPE - append to a remote file

    # CDUP - CWD to the parent of the current

    directory

    # HELP - return help on using the server

    # MODE - set transfer mode

    # NOOP - do nothing

    # REIN* - reinitialize the connection

    # STAT - return server status

    # STOU - store a file uniquely

    # STRU - set file transfer structure

    # SYST - return system type

    3.3.例子:

    1. 可以上传、重命名、建立文件(或目录),不能删除(或目录)

    [root@vm6 vuser_conf]# cd

    /etc/vsftpd/vuser_conf/

    [root@vm6 vuser_conf]# cat test

    local_root=/disk1/tools

    local_umask=022

    write_enable=yes

    guest_enable=yes

    guest_username=nginx

    anonymous_enable=no

    anon_world_readable_only=no

    anon_upload_enable=yes

    anon_mkdir_write_enable=yes

    anon_other_write_enable=yes

    anon_umask=022

    cmds_allowed=ABOR,APPE,CWD,CDUP,FEAT,LIST,MKD,MDTM,PASS,PASV,PWD,QUIT,RETR,REST,STOR,STRU,TYPE,USER,RNTO,RNFR

    2. 可以上传和建立文件(或目录),不能重命名和删除文件(或目录)

    把上面的RNTO,RNFR去掉即可

    cmds_allowed=ABOR,APPE,CWD,CDUP,FEAT,LIST,MKD,MDTM,PASS,PASV,PWD,QUIT,RETR,REST,STOR,STRU,TYPE,USER


    附一、vsftp安装

    操作系统:centOS6.5

    其它设置:关闭了iptables及selinux,yum安装了nginx

    下面是以nginx用户基础建立的虚拟用户,#如果你想基于其他用户可以修改为其它如apache,mysql等,前提是它是系统存在的用户,如果虚拟用户所在的真实用户没权限那么虚拟用户也不有权限,虚拟用户是继承真实用户权限的基础再做权限控制的。

    #------------------------------------------------------直接刷命令-------------------------------------

    #1.安装vsftpd-2.2.2-14.el6.x86_64

    yum -y install vsftpd

    chkconfig vsftpd on

    #2.基于虚拟用户的配置

    cd /etc/vsftpd/

    cp vsftpd.conf vsftpd.conf.orig

    #写入配置文件含被动模式

    cat>>vsftpd.conf<<EOF

    #by hua 2016.1.12

    user_config_dir=/etc/vsftpd/vuser_conf

    pasv_enable=YES

    pasv_min_port=5000

    pasv_max_port=5100

    pasv_promiscuous=YES

    EOF

    vsftpd]# tail -7 vsftpd.conf

    #3.进行认证,安装Berkeley

    DB工具

    yum install db4 db4-utils -y

    #创建用户密码文本

    cat>>vuser_passwd.txt<<EOF

    test

    123456

    EOF

    #生成虚拟用户认证的db文件

    db_load -T -t hash -f

    /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db

    cp /etc/pam.d/vsftpd  /etc/pam.d/vsftpd.orig

    echo '#%PAM-1.0'

    >/etc/pam.d/vsftpd

    echo 'auth required

    pam_userdb.so db=/etc/vsftpd/vuser_passwd'>>/etc/pam.d/vsftpd

    echo 'account required

    pam_userdb.so db=/etc/vsftpd/vuser_passwd' >>/etc/pam.d/vsftpd

    cat /etc/pam.d/vsftpd

    #创建虚拟用户配置文件

    mkdir /etc/vsftpd/vuser_conf

    cd /etc/vsftpd/vuser_conf/

    #下面是test账号用法

    cat>>test<<EOF

    local_root=/disk1/tools

    local_umask=022

    write_enable=YES

    guest_enable=yes

    guest_username=nginx

    anonymous_enable=no

    anon_world_readable_only=no

    anon_upload_enable=yes

    anon_mkdir_write_enable=yes

    anon_other_write_enable=yes

    anon_umask=022

    EOF

    service vsftpd start

    chkconfig vsftpd on

    chown nginx.nginx /disk1/tools

    #为了安全禁止匿名用户登陆,如果发现问题可以去掉

    sed -i '/anonymous_enable/s/YES/NO/' /etc/vsftpd/vsftpd.conf

    grep 'anonymous_enable'

    /etc/vsftpd/vsftpd.conf

    /etc/init.d/vsftpd restart

    #------------------------------------------------------直接刷命令-------------------------------------

    #如果是centos7则添加多一条,centos7用的是vsftp 3版本,centos6

    yum安装的是2.2版本,不能添加否则报错

    #500 OOPS: unrecognised variable in config

    file: allow_writeable_chroot

    echo

    'allow_writeable_chroot=YES'>>/etc/vsftpd/vsftpd.conf

    #3.错误解决:

    500 OOPS: cannot locate user entry:nginx

    说明没有nginx用户,可以修改guest_username=nginx为其他用户

    附二、vsftp禁止下载,只能上传

             因公司业务需要,几个账号共用一个目录,里面的资料比较重要的不能让别人随意下载获取,故禁止下载。

    vi /etc/vsftpd/vsftpd.conf

    #在尾部添加,如下内容,并重启服务器

    #deny download

    anon_world_readable_only=NO

    download_enable=NO

    /etc/init.d/vsftpd restart

    测试结果:

    注:

    如果是针对单个虚拟用户,只需要在该虚拟用户配置文件中添加下面两行并重启vsftp即可:

    anon_world_readable_only=NO

    download_enable=NO


    相关文章

      网友评论

        本文标题:0基础自学linux运维-2.7-修改vsftp权限

        本文链接:https://www.haomeiwen.com/subject/qentqctx.html