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

一、环境说明:

作系统: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<

#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<

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<

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权限)