Linux基本权限
1.权限基本概述
1.什么是权限?
我们可以把它理解为操作系统对用户能够执行的功能所设立的限制,主要用于约束用户能对系统所做的操作,以及内容访问的范围,或者说,权限是指某个特定的用户具有特定的系统资源使用权力。
2.为什么要有权限?
因为系统中不可能只存在一个root用户,一定会存在多个用户,为了保护每个登陆用户的隐私和工作环境,所以就有了权限。(比如三个租客合租同一个房子,a租客要使用b租客的肥皂,那这个事情??)
3.权限与用户之间的关系?
在Linux系统中,针对文件定义了三种身份,分别是属主(owner)、属组(group)、其他人(others),每一种身份又对应三种权限,分别是可读(readable)、可写(writable)、可执行(excutable)。
用户对文件资源,有三种角色ugo,当一个用户访问文件流程如下
-
判断用户是否为文件所有者,如果是则按所有者的权限进行访问
-
判断用户是否为文件所有组成员,如果是则按组的权限进行访问
-
如果不是所有者,也不是该文件所属组,则按匿名权限进行访问
4.权限中的rwx分别代表什么含义?
当我们使用ls -l查看一个文件的详细属性时,能看到每个文件都有一个9位基本权限位,比如: rwxr-xr-x
其中每三位字符为一组,分别表示属主权限位,属组权限位,匿名权限位。
linux中基本权限位则是使用这9位字符来表示,主要控制文件属主(User)、属组(Group)、其他用户(Other)
字母 | 含义 | 对应权限 |
---|---|---|
r(read) | 读取权限 | 4 |
w(write) | 写入权限 | 2 |
x(execute) | 执行权限 | 1 |
-(没有权限) | 没有权限 | 0 |
PS: 如果权限位不可读、不可写、不可执行,则全部使用-作为占位符表示。
9位表示权限
3组
3位表示一组
--- --- ---
-
文件权限可以读以下定义
-
属主 u
-
属组 g
-
其他 o
-
全部 a
-
-
每个文件的权限
-
r 读
-
w 写
-
x 执行
-
-
对于文件来说
-
r 可以使用文本查看工具来查看里面的内容
-
w 可以修改文本的内容
-
x 执行可以直接./file
-
-
对于目录来说
-
r 可以使用ls等文件查看的命令查看
-
w 可以创建文件,也可以删除
-
x 可以cd进入
-
-
数字表示
--x
001 1
-w-
010 2
r--
100 4
rw-
110 6
rwx
111 7
r-x
101 5
-wx
011 3
2.权限设置示例
文件示例: rwxrw-r– alice hr file1.txt Q1: alice对file1文件拥有什么权限? Q2: jack 对 file1.txt 文件有什么权限? 前提:jack 属于 hr 组 Q3: tom 对 file1.txt 文件有什么权限?
1.为什么要设定权限,我们又如何修改一个文件的权限?
Q1: 为什么要设定权限,可以赋于某个用户或组 – 能够以何种方式 – 访问某个文件 Q2: Linux下使用chmod命令来变更权限,root用户可以变更所有文件的权限,而普通用户仅能变更属于自己的文件。
2.使用chmod设定权限示例
方式一: user group other
[root@bgx ~]# touch file #创建文件 [root@bgx ~]# chmod a=rwx file #给所有人添加读写执行权限 [root@bgx ~]# chmod a=-rwx file #取消所有的权限 [root@bgx ~]# chmod u=rwx,g=rw,o=- file #属主读写执行,属组读写,其他人无权限 [root@bgx ~]# chmod ug=rwx,o=r file #属主属组读写执行,其他人读权限 [root@bgx ~]# ll file -rwxrw-r-- 1 root root 0 Apr 13 03:29 file
方式二:number
#选项: -R递归修改 [root@bgx ~]# touch file [root@bgx ~]# chmod 644 file [root@bgx ~]# chmod 600 file [root@bgx ~]# ll file -rw------- 1 root root 0 Apr 13 03:29 file #针对目录设定权限 [root@bgx ~]# mkdir dir [root@bgx ~]# chmod 777 dir/ #修改目录允许所有人访问 [root@bgx ~]# chmod -R 755 dir/ #修改目录及子目录权限 [root@bgx ~]# ll -d dir/ drwxr-xr-x 2 root root 6 Apr 13 03:34 dir/
-
可以直接修改某一类用户的权限
chmod u+x c 增加 chmod u-x c 删除 chmod u=r c 直接赋值
shabang ---》 解释器
-
可以直接使用数字表示
-
可以基于某个文件来修改
3.权限设置案例
针对 hr 部门的访问目录/home/hr 设置权限,要求如下:
1.root 用户和 hr 组的员工可以读、写、执行
2.其他用户没有任何权限
[root@bgx ~]# groupadd hr [root@bgx ~]# useradd hr01 -G hr [root@bgx ~]# useradd hr02 -G hr [root@bgx ~]# mkdir /home/hr [root@bgx ~]# chgrp hr /home/hr [root@bgx ~]# chmod 770 /home/hr [root@bgx ~]# ll -d /home/hr drwxrwx--- 2 root hr 6 Apr 13 03:26 /home/hr
在Linux中权限对文件和对目录的影响是有不同区别的。
权限 | 对文件的影响 | 对目录的影响 |
---|---|---|
读取权限(r) | 具有读取阅读文件内容权限 | 具有浏览目录及子目录 |
写入权限(w) | 具有新增、修改文件内容的权限 | 具有增加和删除目录内文件 |
执行权限(x) | 具有执行文件的权限 | 具有访问目录的内容(取决于目录中文件权限) |
文件权限实验案例:
#1.新建文件,并添加内容至文件中,默认文件匿名用户仅有读权限 [root@lqz ~]# echo "date" > filename [root@lqz ~]# ll filename -rw-r--r-- 1 root root 5 Jan 24 08:24 filename #2.切换bgx普通用户 [root@lqz ~]# su - bgx #3.对文件拥有读取的权限,但bgx用户对文件没有执行和删除的权限 [bgx@lqz ~]$ cat /root/filename date #4.使用root增加x执行权限 [root@lqz ~]# chmod o+x /root/filename [root@lqz ~]# ll /root/filename -rw-r--r-x 1 root root 5 Jan 24 08:24 /root/filename #5.测试x权限是否真的能执行该文件 [bgx@lqz ~]$ /root/filename Wed Jan 24 08:28:34 EST 2018 #6.增加w执行权限 [root@lqz ~]# chmod o+w /root/filename [root@lqz ~]# ll /root/filename -rw-r--rwx 1 root root 5 Jan 24 08:24 /root/filename #7.测试执行权限 [bgx@lqz ~]$ vim /root/filename
PS: 总结rwx对文件的影响 读取权限(r)具有读取阅读文件内容权限 1.只能使用查看类命令cat、head、tail、less、more
写入权限(w)具有新增、修改文件内容的权限
1.使用vim编辑会提示权限拒绝, 但可强制保存,会覆盖文件的所有内容
2.使用echo命令重定向的方式可以往文件内写入数据,>>可以进行追加
3.不能删除文件,因为删除文件看的不是文件的属性,需要看上级目录是否有w的权限
执行权限(x)具有执行文件的权限
1.执行权限什么用都没有
2.如果普通用户需要执行文件,需要配合r权限
目录权限实验案例:
#示例1: 创建目录,并在该目录下创建文件,匿名用户对目录没有w权限,对文件有777权限 [root@lqz ~]# mkdir /dirname [root@lqz ~]# echo "test" >> /dirname/filename [root@lqz ~]# chmod 777 /dirname/filename #普通用户验证权限,能正常查看,但无法删除[奇怪] [bgx@lqz ~]$ cat /dirname/filename test [bgx@lqz ~]$ rm -f /dirname/filename rm: cannot remove ‘/dirname/filename’: Permission denied #示例2: 设置目录777权限,相当于匿名用户对目录有w权限,对文件没有任何权限 [root@lqz ~]# chmod 777 /dirname/ [root@lqz ~]# chmod 000 /dirname/filename #普通用户验证权限 [bgx@lqz ~]$ cat /dirname/filename cat: /dirname/filename: Permission denied [bgx@lqz ~]$ rm -f /dirname/filename [bgx@lqz ~]$ touch /dirname/filename_2
PS: 总结rwx对目录的影响 读取权限(r),如果目录只有r权限: 具有浏览目录及子目录权限
1.可以使用ls命令浏览目录及子目录, 但同时也会提示权限拒绝
2.使用ls -l命令浏览目录及子目录,文件属性会带问号,并且只能看到文件名
总结: 目录只有r权限,仅仅只能浏览内的文件名,无其他操作权限
写入权限(w),如果目录只有w权限: 具有增加、删除或修改目录内文件名权限(需要x权限配合)
PS: 如果目录有w权限, 可以在目录内创建文件, 删除文件(跟文件本身权限无关) 不能进入目录、不能复制目录、不能删除目录、不能移动目录
执行权限(x),如果目录只有x权限
1.只能进入目录
2.不能浏览、复制、移动、删除
Linux权限总结与注意事项
文件r权限, 只给用户查看,无其他操作
文件rw权限, 可以查看和编辑文件内容
文件rx权限, 允许查看和执行文件、但不能修改文件—–>PASS
文件rwx权限, 能读,能写,能执行,但不能删除,因为删除需要看上级目录的权限有没有w—–>PASS
目录rx权限, 允许浏览目录内文件以及子目录、并允许在目录内新建文件, 不允许创建、删除文件和目录
目录wx权限, 能进入目录,能删除内容,能写入内容,但就是无法使用ls cat这样的命令—–>PASS
目录rw权限, 能看,能写,但无法进入目录—–>PASS
PS: 文件的 x权限小心给予,目录的 w权限小心给予。
PS: 文件通常设定的权限是644,目录设定的权限是755
PS: 控制目录权限755, 如果有普通用户需要操作目录里面的文件,在来看文件的权限
4.属主属组设置
变更文件属主和属组的意义?
比如: 我现在手里有多套房,希望出售其中的A房进行变现,那么我会考虑将A房过户给金主,过户成功后A房就属于金主了,那么此时A房的拥有者就属于金主而不再属于我。
在Linux中如何变更一个文件或者一个资源的属主和属组呢,可以使用chown、chgrp命令实现。
chown能设置属主和属组,chgrp仅能设置属组。(所以用哪个你懂的)
#chown 更改属主以及属组 -R:递归修改 #准备环境,创建文件和目录 [root@bgx ~]# mkdir dir/test1 && touch dir/file #示例1: 修改所属主为bin [root@bgx ~]# chown bin dir/ #示例2: 修改所属组为adm [root@bgx ~]# chown .adm dir/ #示例3: 递归修改目录及目录下的所有文件属主和属组 [root@bgx ~]# chown -R root.root dir/
chown 用来修改所有者和组
Usage: chown [OPTION]... [OWNER][:[GROUP]] FILE... or: chown [OPTION]... --reference=RFILE FILE... chown wu c 修改属主 chown wu:wu c 修改属主和属组 chown root.root c 跟:是一样的 chown :wu c 直接属组 chown -R wu test 递归修改 chown --reference=c d 把d文件修改成c文件一样,把才当模版
chgrp 修改文件的属组
Usage: chgrp [OPTION]... GROUP FILE... or: chgrp [OPTION]... --reference=RFILE FILE...
Linux特殊权限
1.特殊权限概述
前面我们已经学习过 r(读)、w(写)、 x(执行)这三种普通权限,但是我们在査询系统文件权限时会发现出现了一些其他权限字母,比如:
[root@bgx ~]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
在属主本来应该是 x(执行)权限的位置出现了一个小写s,这是什么权限?我们把这种权限称作 SetUID 权限,也叫作 SUID 的特殊权限。这种权限有什么作用呢?或者说能干啥?别急,先往下看…..
2.特殊权限SUID
1.问题抛出
在 Linux 系统中,每个普通用户都可以更改自己的密码,这是合理的设置。
问题是,普通用户的信息保存在 /etc/passwd 文件中,用户的密码在 /etc/shadow 文件中,也就是说,
普通用户在更改自己的密码时修改了 /etc/shadow 文件中的加密密码,
但是文件权限显示,普通用户对这两个文件其实都是没有写权限的,那为什么普通用户可以修改自己的权限呢?……(难道学了个假的权限)
[root@bgx ~]# ll /etc/passwd -rw-r--r-- 1 root root 6209 Apr 13 03:26 /etc/passwd [root@bgx ~]# ll /etc/shadow ---------- 1 root root 11409 Apr 13 03:26 /etc/shadow
2.解决方案
其实,普通用户可以修改自己的密码在于 passwd 命令。该命令拥有特殊权限 SetUID,也就是在属主的权限位的执行权限上是 s。
可以这样来理解它:当一个具有执行权限的文件设置 SetUID 权限后,用户在执行这个文件时将以文件所有者的身份来执行。
PS: 当普通用户使用 passwd 命令更改自己的密码时,实际上是在用 passwd 命令所有者 root 的身份在执行 passwd 命令,
root 当然可以将密码写入 /etc/shadow 文件,所以普通用户也可以修改 /etc/shadow 文件,命令执行完成后,该身份也随之消失。
3.示例演示
举个例子,有一个用户 lamp,她可以修改自己的权限,因为 passwd 命令拥有 SetUID 权限;但是她不能査看 /etc/shadow 文件的内容,因为査看文件的命令(如 cat)没有 SetUID 权限。命令如下:
#自己可以修改自己的密码,从而改变/etc/shadow中的数据 [lamp@bgx ~]$ passwd #但无法使用cat命令查看/etc/shadow [lamp@bgx ~]$ cat /etc/shadow cat: /etc/shadow: Permission denied
我们画一张示意图来理解上述过程
4.例子解释
passwd 是系统命令,可以执行,所以可以赋予 SetUID 权限。
lamp 用户对 passwd 命令拥有 x(执行)权限。
lamp 用户在执行 passwd 命令的过程中,会暂时切换为 root 身份,所以可以修改 /etc/shadow 文件。
命令结束,lamp 用户切换回自己的身份。
PS: cat命令没有 SetUID权限,所以使用 lamp 用户身份去访问 /etc/shadow 文件,当然没有相应权限了。
F: 但如果将passwd命令的suid去掉会发生什么???
2.suid授权方法4000 权限字符s(S),用户位置上的x位上设置
# chmod 4755 passwd # chmod u+s passwd
3.suid的作用
1.让普通用户对可执行的二进制文件,临时拥有二进制文件的所属主权限。
2.如果设置的二进制文件没有执行权限,那么suid的权限显示就是大S。
3.特殊权限suid仅对二进制可执行程序有效,其他文件或目录则无效。
注意: suid极度危险,不信可以尝试对vim或rm进行设定SetUID。
3.特殊权限SGID
将目录设置为sgid后,如果在该目录下创建文件,都将与该目录的所属组保持一致,演示如下
#1.建立测试目录 [root@bgx ~]# cd /tmp/ && mkdir dtest #2.给测试目录赋予SetGID权限,检查SetGID是否生效 [root@bgx tmp]# chmod g+s dtest/ && ll -d dtest/ drwxr-sr-x 2 root root 6 Apr 13 05:21 dtest/ #3.给测试目录赋予777权限,让普通用户可以写 [root@bgx tmp]# chmod 777 dtest/ #4.切换成普通用户lamp,并进入该目录 [root@bgx tmp]# su - lamp [lamp@bgx ~]$ cd /tmp/dtest/ #5.普通用户创建测试文件,检查文件的信息 [lamp@bgx dtest]$ touch lamp_test [lamp@bgx dtest]$ ll -rw-rw-r-- 1 lamp root 0 Apr 13 05:21 lamp_test
2.sgid授权方法: 2000权限字符s(S),取决于属组位置上的x
# chmod 2755 directory # chmod g+s directory
3.sgid作用
1.针对用户组权限位修改,用户创建的目录或文件所属组和该目录的所属组一致。
2.当某个目录设置了sgid后,在该目录中新建的文件不在是创建该文件的默认所属组
3.使用sgid可以使得多个用户之间共享一个目录的所有文件变得简单。
4.特殊权限SBIT
Sticky(SI TI KI)粘滞位目前只对目录有效,作用如下:
普通用户对该目录拥有 w 和 x 权限,即普通用户可以在此目录中拥有写入权限。如果没有粘滞位,那么普通用户拥有 w 权限,就可以删除此目录下的所有文件,包括其他用户建立的文件。
但是一旦被赋予了粘滞位,除了 root 可以删除所有文件,普通用户就算拥有 w 权限,也只能删除自己建立的文件,而不能删除其他用户建立的文件。
[root@bgx tmp]# ll -d /tmp/ drwxrwxrwt. 12 root root 4096 Apr 13 05:32 /tmp/
1.sticky授权方法,1000 权限字符t(T),其他用户位的x位上设置。
# chmod 1755 /tmp # chmod o+t /tmp
2.sticky作用
1.让多个用户都具有写权限的目录,并让每个用户只能删自己的文件。
2.特殊sticky目录表现在others的x位,用小t表示,如果没有执行权限是T
3.一个目录即使它的权限为”777”如果是设置了粘滞位,除了目录的属主和”root”用户有权限删除,除此之外其他用户都不允许删除该目录。
5.权限属性chattr
chatrr 只有 root 用户可以使用,用来修改文件系统的权限属性,建立凌驾于 rwx 基础权限之上的授权。
chatrr 命令格式:[root@bgx ~]# chattr [+-=] [选项] 文件或目录名
#选项: + 增加权限 -减少权限 =等于某个权限 # a:让文件或目录仅可追加内容 # i:不得任意更动文件或目录 #1.创建文件并设置属性 [root@lqz ~]# touch file_a file_i [root@lqz ~]# lsattr file_a file_i ---------------- file_a ---------------- file_i #2.使用chattr设置属性,lsattr查看权限限制 [root@lqz ~]# chattr +a file_a [root@lqz ~]# chattr +i file_i [root@lqz ~]# lsattr file_a file_i -----a---------- file_a ----i----------- file_i #3.a权限,无法写入和删除文件,但可以追加数据,适合/etc/passwd这样的文件 [root@lqz ~]# echo "aa" > file_a bash: file_a: Operation not permitted [root@lqz ~]# rm -f file_a rm: cannot remove ‘file_a’: Operation not permitted [root@lqz ~]# echo "aa" >> file_a #5.i权限, 无法写入,无法删除,适合不需要更改的重要文件加锁 [root@lqz ~]# echo "i" > file_i bash: file_i: Permission denied [root@lqz ~]# echo "i" >> file_i bash: file_i: Permission denied [root@lqz ~]# rm -f file_i rm: cannot remove ‘file_i’: Operation not permitted #6.解除限制 [root@tianyun ~]# chattr -a file100 [root@tianyun ~]# chattr -i file200
chattr +i 不能删除、不能修改、不能变更
chattr -i 减掉权限
lsattr 查看属性
chattr +a 只能追加数据
6.进程掩码umask
1.umask是什么?
当我们登录系统之后创建一个文件总是有一个默认权限的,比如: 目录755、文件644、那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认权限。
2.umask是如何改变创建新文件的权限
系统默认umask为022,那么当我们创建一个目录时,正常情况下目录的权限应该是777,但umask表示要减去的值,所以新目录文件的权限应该是777 - 022 =755。至于文件的权限也依次类推666 - 022 =644。
3.umask涉及哪些配置文件
umask涉及到的相关文件/etc/bashrc /etc/profile ~/.bashrc ~/.bash_profile shell (vim,touch) –umask–> 会影响创建的新文件或目录权限 vsftpd服务如果修改–umask–> 会影响ftp服务中新创建文件或创建目录权限 useradd如果修改umask–> 会影响用户HOME家目录权限
4.umask演示示例
#1.假设umask值为:022(所有位为偶数) #文件的起始权限值 6 6 6 - 0 2 2 = 6 4 4 #2.假设umask值为:045(其他用户组位为奇数) #计算出来的权限。由于umask的最后一位数字是5,所以,在其他用户组位再加1。 6 6 6 - 0 4 5 = 6 2 1 #3.默认目录权限计算方法 7 7 7 - 0 2 2 = 7 5 5 #umask所有位全为偶数时 # umask 044 # mkdir d044 目录权限为733 # touch f044 文件权限为622 #umask部分位为奇数时 # umask 023 # mkdir d023 目录权限为754 # touch f023 文件权限为644 #umask值的所有位为奇数时 # umask 035 # mkdir d035 目录权限为742 # touch f035 文件权限为642
示例1: 在 shell 进程中创建文件
#查看当前用户的umask权限 [root@lqz ~]# umask 0022 [root@lqz ~]# touch file0022 [root@lqz ~]# mkdir dir0022 [root@lqz ~]# ll -d file0022 dir0022/ drwxr-xr-x 2 root root 6 Jan 24 09:02 dir0022/ -rw-r--r-- 1 root root 0 Jan 24 09:02 file0022
示例2: 修改 shell umask 值(临时生效)
[root@lqz ~]# umask 000 [root@lqz ~]# mkdir dir000 [root@lqz ~]# touch file000 [root@lqz ~]# ll -d dir000 file000 drwxrwxrwx 2 root root 6 Jan 24 09:04 dir000 -rw-rw-rw- 1 root root 0 Jan 24 09:04 file000
示例3: 通过 umask 决定新建用户 HOME 目录的权限
[root@lqz ~]# vim /etc/login.defs UMASK 077 [root@lqz ~]# useradd dba [root@lqz ~]# ll -d /home/dba/ drwx------. 4 dba dba 4096 3 月 11 19:50 /home/dba/ [root@tianyun ~]# vim /etc/login.defs UMASK 000 [root@lqz ~]# useradd sa [root@lqz ~]# ll -d /home/sa/ drwxrwxrwx. 4 sa sa 4096 3 月 11 19:53 /home/sa/
LinuxACL控制
1.ACL访问控制概述
上一章节我们学习了基础权限UGO
、特殊权限,但所有的权限是针对某一类用户设置的, 如果希望对文件进行自定义权限控制,就需要用到文件的访问控制列表ACL
UGO设置基本权限: 只能一个用户,一个组和其他人
ACL设置基本权限: r、w、x
设定
acl
只能是root
管理员用户. 相关命令:getfacl
,setfacl
acl
基本使用方式
//环境准备 [root@lqz ~]# cp /etc/passwd /root/passwd //文件在没有设定acl, 看到的和传统权限是一样 [root@lqz ~]# ll passwd -rw-r--r-- 1 root root 0 10-26 13:59 /home/test.txt //使用getacl查看权限 [root@lqz ~]# getfacl passwd # file: passwd # owner: root # group: root user::rw- //文件owner权限 group::r-- //文件拥有组权限 other::r-- //其他人权限
1.设定acl
权限案例如下
-rw-r--r-- 1 root root 1380 Feb 27 11:25 passwd alice 拥有读写权限 rw bgx 没有任何权限 - jack 组拥有读权限 r 匿名用户拥有读写权限 rw //建立相关用户 [root@lqz ~]# useradd alice [root@lqz ~]# useradd bgx [root@lqz ~]# useradd jack //增加用户 alice 权限 [root@lqz ~]# setfacl -m u:alice:rw passwd //增加用户 bgx 权限 [root@lqz ~]# setfacl -m u:bgx:- passwd //增加匿名用户权限 [root@lqz ~]# setfacl -m o::rw passwd //增加组权限 [root@lqz ~]# setfacl -m g:jack:r passwd 注意: 如果用户同时属于不同的两个组,并且两个组设定了acl访问控制 1.根据acl访问控制优先级进行匹配规则 2.如有用户拥有多个组的权限不同的权限,优先使用最高权限(模糊匹配)
2.查看acl
权限
[root@lqz ~]# ll passwd -rw-rw-rw-+ 1 root root 1531 Jan 26 07:52 passwd [root@lqz ~]# getfacl passwd # file: passwd # owner: root # group: root user::rw- user:bgx:--- user:alice:rw- group::r-- group:jack:r-- mask::rw- other::rw-
3.移除acl
权限
//移除jack组的acl权限 [root@lqz ~]# setfacl -x g:jack passwd //移除bgx用户的acl权限 [root@lqz ~]# setfacl -x u:bgx passwd //移除文件和目录所有acl权限 [root@lqz ~]# setfacl -b passwd //移除默认的acl [root@lqz ~]# setfacl -k dir
4.查看acl
帮助
//EXAMPLES 示例文档 [root@lqz ~]# man setfacl //复制 file1 的 ACL 权限给 file2 [root@lqz ~]# setfacl -m u:alice:rw,u:bgx:r,g:jack:rw file1 [root@lqz ~]# getfacl file1 |setfacl --set-file=- file2
2.ACL高级特性MASK
mask
用于临时降低用户或组的权限,但不包括文件的所有者和其他人。
mask
最主要的作用是用来决定用户的最高权限。
mask
默认不会对匿名用户降低权限,所以为了便于管理文件的访问控制,建议匿名用户的权限置为空
//临时降低用户或组权限 [root@lqz ~]# setfacl -m mask::rw filename
小结
1.mask
会影响哪些用户,除了所有者和其他人。
2.mask
权限决定了用户访问文件时的最高权限。(如何影响)
3.mask
用于临时降低用户访问文件的权限。(mask做什么)
4.任何重新设置acl
访问控制会清理mask
所设定的权限。
3.ACL高级特性Default
default: 继承(默认)
alice
能够对/opt
目录以及以后在/opt
目录下新建的文件有读、写、执行权限
//赋予 alice 对/home 读写执行权限 [root@lqz ~]## setfacl -R -m u:alice:rwX /opt //赋予 alice 对以后在/home 下新建的文件有读写执行权限(使 alice 的权限继承) [root@lqz ~]## setfacl -m d:u:alice:rwX /opt //检查对应的权限 [root@linux-node1 ~]# getfacl /opt/ getfacl: Removing leading '/' from absolute path names # file: opt/ # owner: root # group: bgx user::rwx user:alice:rwx group::rwx mask::rwx other::rwx default:user::rwx default:user:alice:rwx default:group::rwx default:mask::rwx default:other::rwx
4.ACL访问控制实践案例
案例1: 将新建文件的属性修改tom:admin
, 权限默认为644
要求: tom
对该文件有所有的权限, mary
可以读写该文件, admin
组可以读写执行该文件, jack
只读该文件, 其他人一律不能访问该文件
//实验前, 建立几个普通用户 [root@lqz ~]# useradd tom [root@lqz ~]# useradd bean [root@lqz ~]# useradd mary [root@lqz ~]# useradd jack [root@lqz ~]# useradd sutdent [root@lqz ~]# groupadd admin [root@lqz ~]# gpasswd -a mary admin [root@lqz ~]# gpasswd -a bean admin //检查用户属性 [root@linux-node1 ~]# id tom uid=1004(tom) gid=1004(tom) groups=1004(tom) [root@linux-node1 ~]# id mary uid=1006(mary) gid=1006(mary) groups=1006(mary),1007(admin) [root@linux-node1 ~]# id bean uid=1005(bean) gid=1005(bean) groups=1005(bean),1007(admin) [root@linux-node1 ~]# id jack uid=1002(jack) gid=1002(jack) groups=1002(jack) [root@linux-node1 ~]# id sutdent uid=1007(sutdent) gid=1008(sutdent) groups=1008(sutdent) //准备相关文件 [root@linux-node1 ~]# cp /etc/passwd /root/ [root@linux-node1 ~]# chown tom:admin passwd [root@linux-node1 ~]# chmod 644 passwd //检查设定前的acl列表 [root@linux-node1 ~]# getfacl passwd # file: passwd # owner: tom # group: admin user::rw- group::r-- other::r-- //设定acl权限 [root@linux-node1 ~]# setfacl -m u::rwx,u:mary:rw,u:jack:r,g:admin:rwx,o::- passwd //检查acl权限 [root@linux-node1 ~]# getfacl passwd # file: passwd # owner: tom # group: admin user::rwx user:jack:r-- user:mary:rw- group::r-- group:admin:rwx mask::rwx other::---
acl的控制规则是从上往下匹配
1.
tom
由于是文件的拥有者,所以直接按照user::rwx
指定的权限去操作2.
mary
用户从上往下寻找匹配规则,发现user:mary:rw-
能够精确匹配mary
用户,尽管mary
属于admin
组,同时admin
组有rwx
的权限,但是由于mary
用户的规则在前面,所有优先生效。3.
bean
由于找不到精确匹配的规则,而bean
是属于admin
组,根据文件的定义,该文件是属于admin
组,所以bean
的权限是按照group:admin:rwx
的权限去操作。4.
jack
用户从上往下寻找匹配规则,发现user:jack:r--
能够精确匹配jack
用户。5.
student
用户找不到精确匹配的user
定义规则, 也找不到相关组的定义规则,最后属于other
。
案例2: lab acl setup
controller组成员有:student sodor组成员有:thomas,james 目录: /shares/steamies 文件: /shares/steamies/file 脚本: /shares/steamies/test.sh controller属于该目录的所属组, 新建文件必须属于controller组 sodor组的成员对该目录拥有rwx权限 sodor组成员james对该目录及子目录(包括以后新建立的文件)没有任何权限
实际操作
//准备用户 [root@linux-node1 ~]# groupadd controller [root@linux-node1 ~]# groupadd sodor [root@linux-node1 ~]# useradd student -G controller [root@linux-node1 ~]# useradd thomas -G sodor [root@linux-node1 ~]# useradd james -G sodor //准备目录 [root@linux-node1 ~]# mkdir /shares/steamies -p [root@linux-node1 ~]# echo "file" >> /shares/steamies/file [root@linux-node1 ~]# echo "echo 123" >> /shares/steamies/test.sh [root@linux-node1 ~]# chmod 755 /shares/steamies/test.sh [root@linux-node1 ~]# chown -R :controller /shares/steamies/ [root@linux-node1 ~]# chmod g+s /shares/steamies/ //设定权限(X表示,如果原本有执行权限就保留,如果没有则不添加) [root@linux-node1 ~]# setfacl -R -m g:sodor:rwX,u:james:- /shares/steamies/ //设定继承规则 [root@linux-node1 ~]# setfacl -R -m d:g:sodor:rwX,d:u:james:- /shares/steamies/ [root@linux-node1 steamies]# getfacl /shares/steamies/ getfacl: Removing leading '/' from absolute path names # file: shares/steamies/ # owner: root # group: controller # flags: -s- user::rwx user:james:--- group::r-x group:sodor:rwx mask::rwx other::r-x default:user::rwx default:group::r-x default:group:sodor:rwx default:mask::rwx default:other::r-x
标签:文件,lqz,ACL,linux,bgx,权限,root,目录 From: https://www.cnblogs.com/coderxueshan/p/17933299.html