博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从一则需求看LINUX下的权限细分设置
阅读量:5958 次
发布时间:2019-06-19

本文共 3994 字,大约阅读时间需要 13 分钟。

 业务部门提过来一个FTP配置需求,具体情况如下:

 请提供一台FTP服务器,需要创建的FTP目录及账号规则如下!

人员配置情况:

北京总部:5人(需创建2个账号:bjzb读权限  bjguanli读写执行权限)

北京大区:8人(需创建1个FTP账号:bjdq)

上海大区:6人(需创建1个FTP账号:shdq)

广州大区:5人(需创建1个FTP账号:gzdq)

 

FTP目录及账号权限创建设计:

/data/bj  (北京大区)

账号bjdq权限:写权限、读权限、执行权限

        账号shdq、gzdq权限:读权限

账号bjzb权限:读权限

        账号bjguanli权限:读权限、写权限、执行权限

 

/data/sh  (上海大区)

账号shdq权限:写权限、读权限、执行权限

        账号bjdq、gzdq权限:读权限

        账号bjzb权限:写权限、读权限

        账号bjguanli权限:读权限、写权限、执行权限

 

/data/gz   (广州大区)

账号gzdq权限:写权限、读权限、执行权限

        账号bjdq、shdq权限:读权限

账号bjzb权限:写权限、读权限

        账号bjguanli权限:读权限、写权限、执行权限

大家看到这则需求时,基本上会感觉,权限实现起来有点困难。因为在linux下,对一个文件可以进行操作的对象被分为三类:file owner(文件的拥有者)、group(组,注意不一定是文件拥有者所在的组)、other(其他)。在每个类里,权限都是一致的,而在一个相同的类里实现不同的权限就不那么方便了,而上述提到的需求就是要在同一个类里实现不同的权限。那么我们就需要通过LINUX下的ACL来实现题中的需求。简单地说acl就是可以设置特定用户或用户组对于一个文件及目录的操作权限,需要掌握的命令也只有三个:getfacl,setfacl,chacl.

我们来具体说一下文章开头提到的那个需求的实现过程

1、目录和账号的创建

默认情况下,在linux下建立用户的时候,有个默认的家目录,一般是在/home下,但是如果我们想在系统中建立多个用户,而家目录都不在/home 下的话,就需要用useradd -d 来指定家目录

#groupadd ftpgroup

# useradd  bjdq  -d  /data/bj  -g ftpgroup

#passwd bjdq

# useradd  shdq  -d  /data/sh  -g ftpgroup 

#passwd shdq

# useradd  gzdq  -d  /data/gz  -g ftpgroup 

#passwd gzdq

#useradd bjzb  

#passwd  bjzb

#useradd bjguanli

#passwd  bjguanli

补充还有一个方法是修改/etc/default/useradd文件

# useradd defaults file

GROUP=100

HOME=/home (将默认的HOME改为你设定的目录)

INACTIVE=-1

EXPIRE=

SHELL=/bin/bash

SKEL=/etc/skel

CREATE_MAIL_SPOOL=yes

这样也可以在建用户的时候,指定特定的用户主目录。

 

2、FTP的设置 

FTP服务器地址:192.168.1.130

修改FTP配置文件

# vi /etc/vsftpd/vsftpd.conf

在里面添加如下语句

local_enable=YES  //是否允许本地用户登录FTP服务器,默认是允许
write_enable=YES  //是否允许用户具有在FTP服务器文件中执行写的权限,默认是允许
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

local_umask=007  #用户的权限

chroot_list_enable=YES  //如果希望用户登录后不能切换到自己目录以外的其它目录,需要设置该项来锁定用户目录

chroot_list_file=/etc/vsftpd/chroot_list

userlist_enable=YES  #设置userlist_enable=YES,那么只允许/etc/vsftpd/user_list中列出的用户具有该功能

userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
~
"/etc/vsftpd/vsftpd.conf" 147L, 5079C written
设置完重启ftp服务
# service vsftpd restart
关闭 vsftpd:[确定]
为 vsftpd 启动 vsftpd:[确定]

三、权限的设置

由于/data/bj的所有者是bjdq,/data/sh的所有者是shdq,/data/gz的所有者是gzdq,这样自然就有了读、写、执行权限,我们只需设置组和其他的权限即可

为了限定bjdq、shdq、gzdq的用户不能切换目录,我们还需要把bjdq、shdq、gzdq这三个用户写入chroot_list文件。

[root@localhost vsftpd]# echo "bjdq" >>chroot_list
[root@localhost vsftpd]# echo "shdq" >>chroot_list
[root@localhost vsftpd]# echo "gzdq" >>chroot_list
 

权限设置如下:

#chmod 755  /data/bj

#chmod 755  /data/sh

#chmod 755  /data/gz

针对bjzb和bjguanli这两个账户的权限设置如下

#setfacl -R -m u:bjzb:rx  /data/bj

#setfacl -R -m u:bjguanli:rwx  /data/bj

 

#setfacl -R -m u:bjzb:rx  /data/sh

#setfacl -R -m u:bjguanli:rwx  /data/sh

 

#setfacl -R -m u:bjzb:rx  /data/gz

#setfacl -R -m u:bjguanli:rwx  /data/gz

[root@localhost data]# ls -l

total 12
drwxr-xr-x+ 4 bjdq ftpgroup 4096 Jan 18 19:09 bj
drwxr-xr-x+ 4 shdq ftpgroup 4096 Jan 18 19:12 sh
drwxr-xr-x+ 4 gzdq ftpgroup 4096 Jan 18 19:22 gz
最后大家可以通过getfacl来查看这三个目录的权限并通过客户端登陆来验证。

(注:setfacl –x g:ftpgroup file   删除ftpgroup组对file文件的所有权限

            setfacl -x  u:bjguanli  /data/bj  删除bjguanli用户对/data/bj目录的权限保留读权限
            setfacl –x u:bjzb file   删除bjzb用户对file文件的所有权限)

#getfacl --omit-header /data/bj

getfacl: Removing leading '/' from absolute path names

# file: data/bj

# owner: bjdq

# group: ftpgroup

user::rwx

user:bjguanli:rwx

group::r-x

mask::rwx

other::r-x

default:user::rwx

default:user:bjguanli:rwx

default:group::r-x

default:mask::rwx

default:other::r-x

其他目录权限设置类似

四、客户端测试
[root@localhost /]# ftp 192.168.1.130
Connected to localhost.localdomain.
220 (vsFTPd 2.0.5)
Name (localhost:root): bjdq
331 Please specify the password.
Password:
500 OOPS: cannot change directory:/data/bj
Login failed.
ftp> quit
注意这个报错,你需要考虑IPTABLES和SELINUX的限制了。
可以直接关闭IPTABLES和SELINUX,如果是不能关则需要做如下调整
在IPTABLE里开放FTP服务,允许21、20端口通行。
针对SELINUX的安全限制,可以使用这句
[root@localhost test]# setsebool ftpd_disable_trans 1  #关闭SELinux对ftp的保护
[root@localhost test]# service vsftpd restart

最后再试,一切正常。

[root@localhost test]#ftp 192.168.1.130

Connected to localhost.localdomain.

220 (vsFTPd 2.0.5)
Name (localhost:root): bjdq
331 Please specify the password.
Password:

Login successful.

ftp> pwd

 "/"

ftp>bye

经验证,最后权限设置,符合业务部门的需求。

转载地址:http://qmkax.baihongyu.com/

你可能感兴趣的文章
oracle 11g impdp时 报ORA-12899(转)
查看>>
SQL Server高可用——日志传送(4-1)——概论
查看>>
WPF换肤之六:酷炫的时区浏览小精灵
查看>>
java.util.zip.Deflater 压缩 inflater解压 实例
查看>>
MySQL中游标使用以及读取文本数据
查看>>
mysql 的存储引擎介绍
查看>>
贾跃亭被法院列入“老赖”黑名单,这下真成“下周回国假药停”了?
查看>>
“智慧城西”大数据平台服务民生显实效
查看>>
最近开发电脑变得异常慢的原因和解决
查看>>
NIO模式例子
查看>>
从七大维度谈NoSQL数据库安全风险
查看>>
Redis简介以及数据类型存储
查看>>
Tomcat怎么实现异步Servlet
查看>>
Kubernetes部署的最佳安全实践
查看>>
理解C语言——从小菜到大神的晋级之路(8)——数组、指针和字符串
查看>>
Windows Shellcode学习笔记——shellcode在栈溢出中的利用与优化
查看>>
关于多线程中使用SendMessage
查看>>
【云栖大会】阿里云移动云Apsara Mobile重磅发布 推出Cloud Native App全新研发范式...
查看>>
【PMP】Head First PMP 学习笔记 第九章 人力资源管理
查看>>
2015年末必备前端工具集
查看>>