🔑 权限管理

一、基本权限

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权限
[root ~]# mkdir -p /a/b/c
[root ~]# chmod -R o=x /a
[root ~]# chmod o+r /a/b/c
[root ~]# touch /a/b/c/{1..3}.txt
 
[root ~]# su - gg
Last login: Tue Aug 11 16:27:33 CST 2020 on pts/2
[gg ~]$ ls /a/b/c
1.txt 2.txt 3.txt
 
例:要浏览目录下内容:对目录的x权限+对文件的x权限,如果文件是解释型语言的脚本程序,还需要对文件有r权限
[root ~]# mkdir -p /a/b/c
[root ~]# chmod -R o=x /a/b/c
[root ~]# cp /bin/echo /a/b/c
[root ~]# chmod o=x /a/b/c/echo
[root ~]#
[root ~]# su - gg
Last login: Tue Aug 11 16:30:17 CST 2020 on pts/2
[gg~]$ /a/b/c/echo "hello coco"
hello coco

二、特殊权限

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 -m g:group1:rx /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::rw￾group::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
创建时间:- 

 

posted @ 2020-10-29 22:22  沐灵修  阅读(1573)  评论(0编辑  收藏  举报
/* 点击爆炸效果*/
/*鼠标跟随效果*/