运维开发网

Linux基础篇(12)小白如何学习Linux?权限管理之文件权限

运维开发网 https://www.qedev.com 2021-04-13 22:59 出处:51CTO 作者:孙新杰博客
前言小文章《其实你离成功只差3厘米》每个人的人生都渴望成功而成功的经历往往都要经历一段熬的过程分别只是熬的长短更有甚者是有的人熬过去了有的人在半路倒下了。当你千辛万苦完成了一个项目一个人生的小目标的时候反过头来你会发现其实一切不过是一场厚积薄发的过程而已。人这辈子谁不得有那么几回被苦难教做人。那种被生活一巴掌连着一巴掌呼得满地找牙的感觉特别不好但是你要记得:无论境况多糟糕只要不认怂生活就没办法撂倒

前言小文章

《其实你离成功只差3厘米》

每个人的人生都渴望成功 而成功的经历往往都要经历一段熬的过程 分别只是熬的长短 更有甚者是有的人熬过去了 有的人在半路倒下了。当你千辛万苦完成了一个项目 一个人生的小目标的时候 反过头来 你会发现 其实一切不过是一场厚积薄发的过程而已。

人这辈子 谁不得有那么几回被苦难教做人。

那种被生活一巴掌连着一巴掌呼得满地找牙的感觉特别不好 但是你要记得:无论境况多糟糕 只要不认怂 生活就没办法撂倒你。

再艰难的困境

走下去就是柳暗花明

关键是 你要挺住 不要停!

权限管理-文件权限

把一个用户加入了一个组 该用户就拥有了该组的权限 当一个用户要操作某个文件时 系统会依次检索该用户是否是该文件的拥有者 其次是组成员 最后是其他人 如果扫描到是拥有者 则具备拥有者的权限 不必往后扫描 以此类推

一 文件权限管理之基本权限

1.1 基本权限介绍

基本权限类型

  • r:可读=》4
  • w:可写=》2
  • x:可执行=》1

权限的归属

  • 属主:u
  • 属组:g
  • 其他人:o

例如

[root@aliyun ~]# ls -l a.txt

-rw-r--r-- 1 root root 1146 Jul 16 18:42 a.txt

文件类型:

-:文本文档

d:目录

b:设备block

c:字符设备

s:套接字文件

l:软链接

权限

硬链接个数

属主

属组

文件所占用的空间(以字节为单位)

文件(目录)最近访问(修改)时间

文件名

1.2 设置权限

修改属主、属组

[root@aliyun ~]# chown alice.hr file1 # 改属主、属组

[root@aliyun ~]# chown alice file1 # 只改属主

[root@aliyun ~]# chown .hr file1 # 只改属组

[root@aliyun ~]# 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/

注意:把某一个非属主用户添加到文件的属组里,他就拥有了该组的权限,而不再是其他人

1.3 权限对文件or目录的意义

文件:ls -l 文件名

  • r:可以cat读取文件内容
  • w:可以修改文件
  • x:可以执行文件代码,如果该文件的代码是编译好的结果,那么只有x权限即可执行,但如果该文件的代码是一个解释型的脚本程序,则需要配合r权限才可执行

目录:ls -dl 文件名

  • r: 可以ls浏览文件下的内容
  • w:可以在目录下创建新文件or目录
  • x:
    • 可以执行目录下的程序,除了对目录有执行权限外,还要对程序文件有执行权限才行。
    • 可以正常切换到目录下
    • 涉及到多层目录如/a/b/c,需要对每一级都有x权限才可以正常走到下一级
    • 一:对文件夹的操作(不操作文件内容),需要当前用户具备的权限

      1、对沿途所有文件夹有x权限

      2、对目标文件夹有r或w权限

      r-》可以浏览

      w-》可以创建、删除、移动子文件和子目录

二:对文件的操作(操作文件内容),需要当前用户具备的权限

1、对沿途所有文件夹有x权限

2、对目标文件有r或w权限

r-》可以读取文件内容

w-》可以修改文件内容

!!!注意!!!

储备知识:vim修改的原理是将源文件删掉,然后再将内容的内容覆盖写入了新文件,新文件名重命名为原文件名

例子:

1、当前用户对沿途所有文件夹都有x权限

2、并且当前用户对目标文件夹有w权限

3、但是当前用户对目标文件没有w权限

此时当前用可以vim编辑文件内容,并且可以wq!强制保存退出完成文件修改,其实是将源文件删掉了,可以通过查看前后操作的文件inode号来确定

例1:要想在目录下创建\删除内容:对目录的x权限+对目录的w权限

1、设置权限

[root@aliyun ~]# mkdir -p /a/b/c

[root@aliyun ~]# chmod -R o=x /a # 其他人o对当前目录及其子目录都有x权限

[root@aliyun ~]# chmod o+w /a/b/c # 其他人o对/a/b/c目录有w权限

2、查看权限

[root@aliyun ~]# ls -dl /a

drwxr-x--x 3 root root 4096 Aug 11 16:24 /a

[root@aliyun ~]# ls -dl /a/b

drwxr-x--x 3 root root 4096 Aug 11 16:24 /a/b

[root@aliyun ~]# ls -dl /a/b/c

drwxr-x-wx 2 root root 4096 Aug 11 16:25 /a/b/c

3、验证

[root@aliyun ~]#

[root@aliyun ~]# su - gg

Last login: Tue Aug 11 16:17:28 CST 2020 on pts/2

[gg@aliyun ~]$ touch /a/b/c/1.txt

[gg@aliyun ~]$ exit

logout

[root@aliyun ~]# ls /a/b//c/

1.txt

例2:要浏览目录下内容:对目录的x权限+对目录的r权限

[root@aliyun ~]# mkdir -p /a/b/c

[root@aliyun ~]# chmod -R o=x /a

[root@aliyun ~]# chmod o+r /a/b/c

[root@aliyun ~]#

[root@aliyun ~]# touch /a/b/c/{1..3}.txt

[root@aliyun ~]#

[root@aliyun ~]# su - gg

Last login: Tue Aug 11 16:27:33 CST 2020 on pts/2

[gg@aliyun ~]$ ls /a/b/c

1.txt 2.txt 3.txt

例3:要执行目录下程序:对目录的x权限+对文件的x权限,如果文件是解释型语言的脚本程序,还需要对文件有r权限

[root@aliyun ~]# mkdir -p /a/b/c

[root@aliyun ~]# chmod -R o=x /a/b/c

[root@aliyun ~]# cp /bin/echo /a/b/c

[root@aliyun ~]# chmod o=x /a/b/c/echo

[root@aliyun ~]#

[root@aliyun ~]# su - gg

Last login: Tue Aug 11 16:30:17 CST 2020 on pts/2

[gg@aliyun ~]$ /a/b/c/echo "hello fly"

hello fly

二 文件权限管理之特殊权限

2.1 SUID

普通用户不是root也不属于root组,于是它对/etc/shadow文件没有任何权限

[root@aliyun ~]# ll /etc/shadow

---------- 1 root root 1109 Aug 11 16:11 /etc/shadow

但是普通用户却可以用passwd命令修改密码,而修改密码都是在修改/etc/shadow文件,如何实现的???

[root@aliyun ~]# ll which passwd

-rwsr-xr-x 1 root root 27856 Aug 9 2019 /bin/passwd

可以看到一个s权限,s权限的特殊之处

  • SUID 权限仅对二进制可执行文件有效
  • 如果执行者对于该二进制可执行文件具有 x 的权限,执行者将具有该文件的所有者的权限
  • 本权限仅在执行该二进制可执行文件的过程中有效

示例

[root@localhost ~]# ll which cat

-rwxr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat

[root@localhost ~]# chmod 4755 which cat # 或者 chmod u+s which cat

[root@localhost ~]# ll which cat

-rwsr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat

[root@localhost ~]# su - egon

[egon@localhost ~]$ cat /etc/shadow # 可以看到内容

了解:

1、在没有设置suid的情况下,我们登录了一个用户,来执行操作目标文件的命令

会依次比对当前登录用户是否是目标文件的属主、属组、其他人来确定是否拥有操作权限

2、在设置了suid的情况下,我们登录了一个用户,来执行操作目标文件的命令

当前用户会转换成命令文件的属主身份,然后拿着该身份去对应目标文件,如果该身份不是目标文件的主人,那么就直接被归为其他人一栏,不会检索组

sgid一样

准备

mkdir /test

chmod 777 /test/

echo 1111 > /test/a.txt

chmod 000 /test/a.txt

chown user1.group1 /test/a.txt

chown egon.devops /usr/bin/cat

chmod u+s /usr/bin/cat

实验

[root@egon ~]# ll /test/a.txt # 目标文件的属主:user1,属组:group1

----------. 1 user1 group1 4 10月 29 18:31 /test/a.txt

[root@fly ~]#

[root@fly ~]#

[root@fly ~]# ll /usr/bin/cat # 命令文件的属主:fly

-rwxr-xr-x. 1 egon devops 54160 10月 31 2018 /usr/bin/cat

[root@fly ~]#

[root@fly ~]#

[root@fly ~]# su - lili -c "cat /test/a.txt" # lili切换为fly用户执行,fly用户没有对上a.txt的属主,所以直接被当成其他人,没有任何权限

cat: /test/a.txt: 权限不够

[root@fly ~]# chmod o+r /test/a.txt

[root@fly ~]# su - lili -c "cat /test/a.txt"

111

[root@fly ~]#

[root@fly ~]#

[root@fly ~]# chmod o-r,g+r /test/a.txt

[root@fly ~]# ll /test/a.txt

----r-----. 1 user1 group1 4 10月 29 18:31 /test/a.txt

[root@fly ~]# usermod -a -G group1 egon

[root@fly ~]# ll /usr/bin/cat # 确保suid还在

-rwsr-xr-x. 1 fly devops 54160 10月 31 2018 /usr/bin/cat

[root@fly ~]# id fly

uid=1005(fly) gid=1005(fly) 组=1005(fly),1003(group1)

[root@fly ~]#

[root@fly ~]# su - lili -c "cat /test/a.txt" # lili--->fly,fly用户没有对上a.txt的属主,所以直接被当成其他人,虽然此时egon属于文件a.txt的属组group1的成员,但是对suid来说那没用

cat: /test/a.txt: 权限不够

[root@fly ~]#

[root@fly ~]# su - fly -c "cat /test/a.txt" # 如果当前用户与suid的用户重叠,那么就无所谓用户转换,同样会按照:属主、属组、其他人的次序依次对照

1111

注意:

sgid规则同suid

同时设置suid与sgid的情况下,suid优先级高于sguid

2.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 ~]#

    [root@localhost ~]# chown .fly /test/ # 后期任何人在该目录下创建的文件or目录的属组都是fly

2.3 SBIT

其实 SBIT 与 SUID 和 SGID 的关系并不大。

SBIT 是 the restricted deletion flag or sticky bit 的简称,有时也称为Sticky

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

inux中文件默认权限为666、目录权限默认为777,在umask的影响下

文件权限计算方法:偶数位直接相减,奇数位相减后加1

文件的起始权限值 umask值 操作 计算后文件权限
666 022 (每位如果都是偶数) 直接相减即可 644
666 033 (每位如果有奇数或偶数 相减(奇数位相减后在其原奇数位加1 644
666 325(每位如果有奇数或偶数) 相减(奇数位相减后在其原奇数位加1) 442

目录权限计算方法:直接相减即可

文件的起始权限值 umask值 操作 计算后文件权限
777 022 相减 755
777 033 相减 744
777 325 相减 452

总结:umask设置的越小,权限越大,慎用

临时设置umask

[root@localhost ~]# umask 000 //设置umask权限

永久设置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

0

精彩评论

暂无评论...
验证码 换一张
取 消