一、基本权限
1.权限介绍
权限类型
- r:可读权限==>4
- w: 可写权限==>2
- x: 可执行权限==>1
权限归属
- 属主:u
- 属组:g
- 其他人:o
例如:
[root~] ls -l a.txt
-rw-r--r-- 1 root root 1146 Jul 16 18:42 a.txt
文件类型
- -:文本文档
- d:目录
- b:设备block
- c:字符设备
- s:套接字文件
- l : 软连接
2.设置权限
修改属主、属组
[root ~]# chown alice.hr file1 # 修改属主,属组
[root ~]# chown alice file1 # 只改属主
[root ~]# chown .hr file1 # 只改属组
[root ~]# chown -R /test # 递归修改
修改u、g、o、对应的权限
# 加减法
chmod u+x,g-w,o+r a.txt
# 赋值法
chmod a=rwx a.txt
chmod a=- a.txt
chmod ug=rw,o=r file1
# 数字法
chmod 644 file1
chmod -R 777 xxx/
注:把某一个非属主用户添加到文件的属主里,他就拥有了该组的权限,而不是其他人
3.权限对文件or目录的意义
文件:ls -l 文件名
- r :可以读cat读取文件内容
- w :可以修改文件
- x : 可以执行文件代码,如果该文件的代码是编译好的结果,那么只有x权限即可执行,但如果该文件的代码是一个解释型的脚本文件程序,则需要配合r权限才可以执行
目录:ls -dl 文件名
- r : 可以ls浏览文件下的内容
- w: 可以在目录下创建新文件or目录
- x :可以执行目录下的程序,除了对目录有执行权限外,还要对程序文件有执行权限才行
可以在正常切换到目录下
涉及到多层目录 如/a/b/c,需要对每一级都有x权限才可以正常走到下一级
例:要想在目录下创建删除内容:对目录的x权限+对目录的w权限
# 设置权限 [root ~]# mkdir -p /a/b/c [root ~]# chmod -R o=x /a #其他人o 对当前目录及其子目录都有x权限 [root~]# chmod o+w /a/b/c # 其他人o对/a/b/c目录有w权限 #查看权限 [root~]# ls -dl /a drwxr-x--x 3 root root 4096 Aug 11 16:24 /a [root~]# ls -dl /a/b drwxr-x--x 3 root root 4096 Aug 11 16:24 /a/b [root ~]# ls -dl /a/b/c drwxr-x-wx 2 root root 4096 Aug 11 16:25 /a/b/c #验证 [root ~]# su - gg Last login: Tue Aug 11 16:17:28 CST 2020 on pts/2 [gg ~]$ touch /a/b/c/1.txt [gg ~]$ exit logout [root~]# ls /a/b//c/ 1.txt
例:要浏览目录下内容:对目录的x权限+对目录的r权限
例:要浏览目录下内容:对目录的x权限+对文件的x权限,如果文件是解释型语言的脚本程序,还需要对文件有r权限
二、特殊权限
1.SUID
普通用户不是root也不属于root组,于是它对/etc/shadow文件没有任何权限
[root ~]# ll /etc/shadow
---------- 1 root root 1109 Aug 11 16:11 /etc/shadow
但普通用户可以用passwd命令修改密码,而修改密码都是在修改/etc/shadow文件,如何实现?
[root ~]# ll `which passwd`
-rwsr-xr-x 1 root root 27856 Aug 9 2019 /bin/passwd
可以看到一个s权限,s权限的特殊之处
- SUID 权限仅对二进制可执行文件有效
- 如果执行者对于该二进制可执行文件具有x的权限,执行者将具有该文件的所有权限
- 本权限仅在执行该二进制可执行文件的过程中有效
示:
[root ~]# ll `which cat`
-rwxr-xr-x. 1 root root 54160 10์月31 2020/usr/bin/cat
[root~]# chmod 4755 `which cat` # 或者 chmod u+s `which cat`
[root ~]# ll `which cat`
-rwsr-xr-x. 1 root root 54160 10์ 31 2018 /usr/bin/cat
[root ~]# su - tom
[tom~]$ cat /etc/shadow # 可以看到内容
2.SGID
- 当SGID作用于普通文件时,和SUID类似,在执行该文件时,用户将获得该文件所属组的权限
- 当SGID 作用与目录时,意义就非常重大了:
当一个用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件
如果该目录同时用SGID修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组
[root@localhost ~]# mkdir /test
[root@localhost ~]# chmod g+s /test/ # 等同于chmod 2755 /test/
[root@localhost ~]# ll -dl /test/
drwxr-sr-x 2 root root 6 8月 11 17:06 /test/
[root@localhost ~]# chown .coco /test/ # 后期任何人在该目录下创建的文件or目录的属组都是coco
3.SBIT
SBIT 目前只对目录有效,用来阻止非文件的所有者删除文件,常见就是/tmp目录
[root@localhost ~]# ls -dl /tmp/
drwxrwxrwt. 13 root root 4096 8月 11 17:09 /tmp/
[root@localhost ~]# chmod o+t /test/ # 或者chmod 1755 /test
权限信息中最后一位t表明该目录被设置了SBIT权限。SBIT 对目录的作用是:当用户在该目录下创建新文件或目录时,仅有自己和root才有权利删除,主要作用于一个共享的文件夹。
三、umask
新建文件、目录的默认权限是由umask决定的
1、uid >199 并且属主与属主相等的用户下,umask :0002
- 文件664
- 目录775
2、除1之外的其他用户下,比如root用户,umask :0022
- 文件644
- 目录755
linux中文件默认权限为666、目录权限默认为777,在umask的影响下
文件权限计算方法:偶数位直接相减,奇数位后相减后加1
目录权限计算方法:直接相减即可
结:umask设置越小,权限越大,慎用
临时设置umask
[root@localhost ~]# umask 000 设置umask权限
永久设置
root@localhost tmp]# vim /etc/profile #或者/etc/bashrc内容一样
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002 表示uid大于等于199的默认umask值,表示普通用户
else
umask 022 表示uid小于199的默认umask值,表示root
fi
四、ACL
用命令setfacl设置的ACL权限是UGO权限的扩展:
setfacl命令可以用来细分linux下的文件权限。chmod命令可以把文件权限分为u,g,o三个组,而setfacl可以对每一个文件或者目录设置更精确的文件权限。换句话说,setfacl可以更精确地控制权限的分配。
比如:让某一个用户对某一个文件具有某种权限
这种独立于传统的u,g,o的rwx权限之外的具体设置叫ACL,ACL可以针对单一用户、单一文件或目录来进行r,w,x的权限控制,对于需要特殊权限的使用状况有一定帮助。
>>ACL基本用法<<>>设置:
[root@localhost ~]# touch /opt/a.txt
[root@localhost ~]# chmod o=- /opt/a.txt
[root@localhost ~]# ll /opt/a.txt
-rw-r----- 1 root root 0 8์ 11 18:46 /opt/a.txt
[root@localhost ~]# getfacl /opt/a.txt
getfacl: Removing leading '/' from absolute path names
# file: opt/a.txt
# owner: root
# group: root
user::rw--
group::r--
other::---
[root@localhost ~]# setfacl -m u:bobo:r /opt/a.txt
[root@localhost ~]# setfacl -m u:tom:w /opt/a.txt
# 验证
[root@localhost ~]# su - bobo
上次登录 :8月 11 18:47:27 CST 2020pts/1 上
[bobo@localhost ~]$ cat /opt/a.txt
big_bobo
[root@localhost ~]# su - tom
8月 11 18:40:21 CST 2020pts/1 上
[tom@localhost ~]$ cat /opt/a.txt
cat: /opt/a.txt: 权限不够
[tom@localhost ~]$ echo small_bobo >> /opt/a.txt
# 也就可以对组设置,设置的组合用户都必须存在
清除
[root@localhost ~]# setfacl -x g:group1 /opt/a.txt # 删除组hr的 权限
[root@localhost ~]# setfacl -b /opt/a.txt #删除所有acl权限
>>>>>ACL高级用法<<<<<
1.mask设置完mask后,除了所有者和other不受影响,其他都会受到mask的影响,mask决定他们的最高权限与mask权限按位与运算得到最终的权限
建议:为了方便管理文件权限,其他人的权限置为空:chmod o= - /opt/a.txt
1.保证其他人对/opt/a.txt没有权限,然后展开实验
[root@bobo opt]# cat /opt/a.txt
111
[root@bobo opt]# chmod o=- /opt/a.txt
[root@bobo opt]# ll /opt/a.txt
-rw-r-----. 1 root root 4 10์ 29 19:33 /opt/a.txt
2.添加acl权限
[root@bobo opt]# getfacl /opt/a.txt
getfacl: Removing leading '/' from absolute path names
# file: opt/a.txt
# owner: root
# group: root
user::rwgroup::r--
other::---
[root@bobo opt]# setfacl -m u:egon:rw /opt/a.txt # 其他人bobo对a.txt有rw权限
[root@bobo opt]# setfacl -m u:lili:r /opt/a.txt # 其他人lili对a.txt有r权限
[root@bobo opt]# getfacl /opt/a.txt # 可以看到mask默认值为rw-
getfacl: Removing leading '/' from absolute path names
# file: opt/a.txt
# owner: root
# group: root
user::rw-
user:lili:r--
user:bobo:rw-
group::r--
mask::rw-
other::---
[root@bobo opt]# ll /opt/a.txt
-rw-rw----+ 1 root root 4 10์ 29 19:33 /opt/a.txt
[root@bobo opt]#
按位与运算
lili权限:r--
mask权限:rw--
lili๋最终权限: r--
[root@bobo opt]# su - lili -c "cat /opt/a.txt"
111
222
[root@bobo opt]# su - lili -c "echo 666 >> /opt/a.txt"
-bash: /opt/a.txt: 权限不够
bobo权限: rw-
mask权限:rw-
最终权限: rw-
[root@bobo opt]# su -bobo -c "cat /opt/a.txt"
111
[root@bobo opt]# su - bobo -c "echo 222 >> /opt/a.txt"
4.设置mask
[root@bobo opt]# setfacl -m m:- /opt/a.txt
[root@bobo opt]# getfacl /opt/a.txt
getfacl: Removing leading '/' from absolute path names
# file: opt/a.txt
# owner: root
# group: root
user::rw-
user:lili:r-- #effective:---
user:bobo:rw- #effective:---
group::r-- #effective:---
mask::---
other::---
[root@bobo opt]# su - egon -c "cat /opt/a.txt"
cat: /opt/a.txt: 权限不够
[root@bobo opt]# su - lili -c "cat /opt/a.txt"
cat: /opt/a.txt: 权限不够
ps:我们一般不更改mask权限,只赋予mask最大权限(也就是rwx),则给用户或群设定的ACl权限本身就是有效的
2.default:继承(默认)要求:希望bobo能够对/home 及以以后在/home下新建的文件有读、写、执行权限
思路:
1.赋予bobo对/home读、写、执行权限[root@~] # set -m u: bobo :rwx: /home
2.赋予bobo对以后在/home下新建的文件有读、写、执行权限(使bobo的继承权)
注意:是作用到子目录,对当前文件没有相应权限[root@~] # setfacl -m d:u:bobo:rwx:/home
[root@bobo opt]# mkdir /test
[root@bobo opt]# setfacl -m u:bobo:rwx /test
[root@bobo opt]# setfacl -m d:u:bobo:rwx /test
[root@bobo opt]# getfacl /test
getfacl: Removing leading '/' from absolute path names
# file: test
# owner: root
# group: root
user::rwx
user:bobo:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:bobo:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
[root@bobo opt]# mkdir /test/aaa
[root@bobo opt]# touch /test/b.txt
[root@bobo opt]# getfacl /test/aaa/
getfacl: Removing leading '/' from absolute path names
# file: test/aaa/
# owner: root
# group: root
user::rwx
user:bobo:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:bobo:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
[root@bobo opt]# getfacl /test/b.txt
getfacl: Removing leading '/' from absolute path names
# file: test/b.txt
# owner: root
# group: root
user::rwuser:egon:rwx #effective:rw- # 权限已经继承过来了,但是因为mask的影响变成了rw-
group::r-x #effective:r--
mask::rw
other::r--
五、文件属性
[root@localhost ~]# touch /opt/{1..3}.txt
[root@localhost ~]# chmod 000 /opt/*
[root@localhost ~]# lsattr /opt/
---------------- /opt/1.txt
---------------- /opt/2.txt
---------------- /opt/3.txt
[root@localhost ~]# chattr +a /opt/1.txt # 允许追加内容
[root@localhost ~]# chattr +i /opt/2.txt # 禁止修改时间
[root@localhost ~]# chattr +A /opt/3.txt # 不更改文件访问时间
[root@localhost ~]# lsattr /opt/
-----a---------- /opt/1.txt
----i----------- /opt/2.txt
-------A-------- /opt/3.txt
# 验证
[root@localhost ~]# echo 111 >> /opt/1.txt
[root@localhost ~]# cat /opt/1.txt
111
[root@localhost ~]# rm -rf /opt/1.txt
rm: 无法删除/opt/1.txt": 不允许操作
#去掉
[root@localhost ~]# chattr -a /opt/1.txt
[root@localhost ~]# chattr -i /opt/2.txt
[root@localhost ~]# chattr -A /opt/3.txt
实验
[root@localhost ~]# echo 123131231 > e.txt
[root@localhost ~]# chattr +A e.txt
[root@localhost ~]# stat e.txt
文件:"e.txt"
大小:10 块:8 IO 块:4096 普通文件
设备:803h/2051d Inodeғ17154806 硬链接:1
权限(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2020-08-11 19:15:15.548257742 +0800
最近更改:2020-08-11 19:15:15.548257742 +0800
最近改动:2020-08-11 19:15:22.494283808 +0800
创建时间:-