1.3.4 Linux文件系统权限管理

本文深入解析Linux文件系统权限模型,包括rwx权限含义、权限判断逻辑、chmod和chown命令使用、ACL高级权限控制、SUID/SGID/SBIT特殊权限及文件隐藏属性。通过实例演示如何设置不同用户组的访问权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux文件系统权限:

权限对象:

​ 文件拥有者(属主)

​ 群组(属组):属性相同的用户放在同一组中

​ 其他人

权限类型:

[root@localhost b]# ls -l
total 0
d  rwxr-xr-x. 2 root root 6 Jul 29 09:20 c

​ r:4

​ w:2

​ x:1

练习:r--r--r--:444

​			rw-rwx-r;674(以加法进行计算)
1、rwx权限说明:

​ 1、对于文件而言:

            r:可以获取文件的数据

            w:可以修改文件的数据

            x:可以将此文件运行为进程

​ 2、对于目录而言:

            r:可以使用 ls 命令获取文件列表

            w:可以修改文件列表,即创建和删除

            x:表示我们可以 cd 到此目录,并且可以使用 ls -l 获取文件的详细属性

2、权限判断逻辑:

            文件:前提条件,用户能够进入文件所在目录

                      删除文件:看用户是否具备对目录的 w 权限

                        1、判断用户身份,顺序依次为:owner - group - other

                      创建文件:和删除文件逻辑相同

            目录:前提条件:判断用户是否能够成功进入目录所在目录,也就是说要有 x 权限

                      删除目录:对上级目录有w权限,在以此依次判断是不是上级目录的属主(左三位),属组(中三位),其他(右三位)

3、权限管理命令:

chmod

chmod [OPTION]... MODE[,MODE]... FILE...
or:  chmod [OPTION]... OCTAL-MODE FILE...
or:  chmod [OPTION]... --reference=RFILE FILE...

三类用户(UGO模型):

​ u:属主

​ g:属组

​ o:其他

​ a:所有

  chmod [OPTION]... MODE[,MODE]... FILE...

MODE表示法:

​ 1. 赋权表示法,rwx

​ u= u=r(=表示覆盖)

​ g=

​ o=

​ a=

chmod  u=  ,g=   , o=    
或者
chmod  a=

​ 2. 授权表示法:

​ u+ , u-

​ g+ , g-

​ o+ , o-

​ a+ , a-

​ 注意:只有用户自己修改自己的文件

	chmod   777    filename

从属关系:

chown(既可以修改属主,也可修改属组) ,

chgrp(直接修改属组)

​              -R:递归修改

​              注意:只有管理员可以修改

	chown  username:groupname  dirname
		chown  username:  name
		chown  :groupname  name
	chgrp groupname  name

小练习:

1、新建用户组:hr,tech,edu

[root@localhost /]# groupadd hr
[root@localhost /]# groupadd tech
[root@localhost /]# groupadd edu

2、新建用户要求:

tom是hr组成员,

jerry是tech组成员

natasha是tech组成员

gentoo是edu组成员

admin不属上面三组

[root@localhost /]# useradd -G hr tom
[root@localhost /]# useradd -G tech jerry
[root@localhost /]# useradd -G tech natasha
[root@localhost /]# useradd -G edu gentoo
[root@localhost /]# useradd admin
或者:
[root@localhost /]# gpasswd -a natasha tech
Adding user natasha to group tech
[root@localhost /]# gpasswd -a gentoo edu
Adding user gentoo to group edu

3、新建目录要求:

/pub目录为公共资源,所有用户均可以读写执行。

/HR目录只有hr用户可以写入,其他用户只有只读权限

/TECH目录只有tech组成员可以写入,其他用户没有任何权限

/EDU目录只有edu组成员可以访问写入

/ADM目录只有admin用户可以访问,只有读写执行权限,其他用户没有任何权限

[root@localhost /]# mkdir /pub
[root@localhost /]# ll -d /pub
drwxr-xr-x. 2 root root 6 Jul 29 11:49 /pub
[root@localhost /]# chmod 777 /pub
[root@localhost /]# chmod a=rwx /pub
[root@localhost /]# chmod u=rwx,g=rwx,o=rwx /pub
[root@localhost /]# chmod g+w,o+w /pub

[root@localhost /]# mkdir /HR1
[root@localhost /]# chmod o-x /HR
[root@localhost /]# ll -d /HR
drwx-w-r--. 2 root root 6 Jul 29 11:28 /HR
[root@localhost /]# chmod o-x /HR/
[root@localhost /]# ll -d /HR
drwx-w-r--. 2 root root 6 Jul 29 11:28 /HR
[root@localhost /]# ll -d /HR/
drwx-w-r--. 2 root root 6 Jul 29 11:28 /HR/
[root@localhost /]# chown :hr /HR/
[root@localhost /]# ll -d /HR/
drwx-w-r--. 2 root hr 6 Jul 29 11:28 /HR/
[root@localhost /]# chmod g+w /HR/
[root@localhost /]# ll -d /HR/
drwx-w-r--. 2 root hr 6 Jul 29 11:28 /HR/

[root@localhost /]# mkdir /TECH-1
[root@localhost /]# ll -d /TECH-1/
drwxr-xr-x. 2 root root 6 Jul 29 11:54 /TECH-1/
[root@localhost /]# chown jerry /TECH-1/
[root@localhost /]# ll -d /TECH-1/
drwxr-xr-x. 2 jerry root 6 Jul 29 11:54 /TECH-1/
[root@localhost /]# chmod 700 /TECH-1/
[root@localhost /]# ll -d /TECH-1/
drwx------. 2 jerry root 6 Jul 29 11:54 /TECH-1/

[root@localhost /]# mkdir test
[root@localhost /]# chown admin:admin /test
[root@localhost /]# ll -ld /test
drwxr-xr-x. 2 admin admin 6 Jul 29 11:57 /test
进程安全上下文:

      指进程对文件的访问权限模型:
            进程的属主与文件的属主是否相同,如果相同,则应用的是属主权限。

            否则,则检查进程的属主是否属于文件的属组,如果是,则应用属组的权限。

            否则,使用other权限。

基本权限 ACL:

​ (访问控制列表)

​ 1、针对单个用户设置

​ 2、针对用户组设置

​ 3、让子文件或者子目录继承父目录的权限

查看系统是否支持ACL:
[root@localhost ~]# tune2fs -l /dev/sda2 |grep "Defaul mount options:"
设置ACL:
 setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...

            -m:配置 ACL 权限,不能与-x一同使用

            -x:删除 ACL 配置

            -b:移除所有的 ACL 配置

            -R:递归配置

            -d:配置默认的 ACL 参数,只对目录生效 (只能编辑,不能创建和新增)

1、对单个用户设置ACL
[root@localhost tmp]# setfacl -m u:nebula:rw  /tmp/aclfile		
	//setfacl -m 用户:用户名:权限   /路径		(-u表示对单个用户设置权限,-g表示对用户组,没有o,用户名必须事先存在)
[root@localhost tmp]# getfacl  /tmp/aclfile
user:nubula:rw-
	//getfacl  /路径

2、对用户组进行设置ACL
[root@localhost tmp]# setfacl -m g:hr:rw  aclfile
[root@localhost tmp]# getfacl aclfile
# file: aclfile
# owner: root
# group: root
user::rw-
user:tom:rw-
group::r--
group:hr:rw-
mask::rw-
other::r--

3、对目录设置ACL
[root@localhost tmp]# mkdir mydir
[root@localhost tmp]# setfacl -m  d:u:jerry:rwx mydir/
[root@localhost tmp]# getfacl mydir
# file: mydir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:jerry:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

[root@localhost tmp]# cd mydir
[root@localhost mydir]# ls
[root@localhost mydir]# touch testfile
[root@localhost mydir]# getfacl testfile
# file: testfile
# owner: root
# group: root
user::rw-
user:jerry:rwx                  #effective:rw-
group::r-x                      #effective:r--
mask::rw-(mask同真为真)
other::r--

[root@localhost tmp]# mkdir testdir
[root@localhost tmp]# getfacl testdir
# file: testdir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

权限掩码:

umask
[root@localhost tmp]# umask
0022    //每一组的权限位有四位

​ 文件权限:666 - 022 = 644

​ 目录:777-022 = 755

特殊权限:

SUID: s

当在文件所有者的 x 权限上出现s时,表示当前这个文件具有 SUID 权限。

             SUID的权限:

            1、SUID权限仅仅对二进制程序才有效,(不能用于脚本、目录上,一般放在系统的命令上)

            2、执行者对于该程序有 x 权限

            3、本权限仅仅在执行程序的过程中才有效(即变成进程才有效)

            4、程序的执行者拥有该程序的拥有者的权限

​ 如果当前这个文件属主位没有 x 权限,显示大写 S

[root@localhost mydir]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

SGID: s(继承组)

            SGID的权限:

            1、SGID对二进制有效

            2、执行者对该程序具有可执行权限 即 x 权限

            3、主要用于目录之上:

SBIT: t

            SBIT的权限:

            1、主要针对于other位

​             2、作用于目录

​             3、在该目录下创建的文件或目录,(不论你具有什么权限,)只有自己和root可以删除

             4、对文件无效

[root@localhost mydir]# ll -ld /tmp
drwxrwxrwt. 36 root root 4096 Jul 29 16:01 /tmp

SUID , SGID , SBIT

​ 字符表示法 :s        s        t        u+s

​ 数字表示法 :4        2        1

​                        chmod 0755 文件 :删除 s 权限(如果失败则输入u-s , g-s:表示属主和 属组分别减s)

                                    1755 :1表示当前目录具有SBIT权限

[root@localhost tmp]# chmod 4755 testdir1
[root@localhost tmp]# ll
drwsr-xr-x. 2 root root     6 Jul 29 16:59 testdir1

[root@localhost tmp]# chmod 2755 testdir
[root@localhost tmp]# ll
drwsr-sr-x. 2 root root     6 Jul 29 16:59 testdir1

[root@localhost tmp]# chmod 1755 testdir
[root@localhost tmp]# ll
drwsr-sr-t. 2 root root     6 Jul 29 16:59 testdir1

[root@localhost tmp]# chmod u-s,g-s testdir1
[root@localhost tmp]# ll
drwxr-xr-x. 2 root root     6 Jul 29 16:59 testdir1

chattr:显示文件的隐藏属性

            a:append 只能够向文件中添加数据,不能够删除数据(只能追加,不能覆盖)

            i:当前文件不能被删除,改名 和 链接,同时不能写入内容

            A:atime 访问时间不能修改

lsattr:列出文件的一些隐藏属性

[root@localhost tmp]# chattr +a file{2
[root@localhost tmp]# lsattr file2
-----a--------- file2
[root@localhost tmp]# echo asd > file2
-bash: file2: Operation not permitted

​ 【扩展:】

stat:查看系统存储的详细信息

练习:
1、新建系统组mariadb, 新建系统用户mariadb, 属于mariadb组,要求其没有家目录,且shell为/sbin/nologin;尝试root切换至用户,查看其命令提示符;

[root@localhost tmp]# groupadd mariadb
[root@localhost tmp]# useradd -M -g mariadb -s /sbin/nologin mariadb
[root@localhost tmp]# cat /etc/passwd
mariadb:x:40009:50004::/home/mariadb:/sbin/nologin

[root@localhost tmp]# su - mariadb
su: warning: cannot change directory to /home/mariadb: No such file or directory
This account is currently not available.

2、新建GID为5000的组nebulaedu,新建用户gentoo,要求其家目录为/users/gentoo,密码同用户名;

[root@localhost tmp]# groupadd -g 5000 nebulaedu
[root@localhost tmp]# useradd -d /users/gentoo gentoo
[root@localhost tmp]# passwd gentoo
[root@localhost tmp]# tail /etc/passwd
gentoo:x:40013:40013::/users/gentoo:/bin/bash

3、新建用户fedora,其家目录为/users/fedora,密码同用户名;

[root@localhost tmp]# useradd fedora
[root@localhost tmp]# usermod -d /users/fedora fedora
[root@localhost tmp]# passwd fedora
[root@localhost tmp]# tail /etc/passwd
fedora:x:40012:40012::/users/fedora:/bin/bash

4、新建用户www, 其家目录为/users/www;删除www用户,但保留其家目录;

[root@localhost tmp]# useradd -d /users/www www
useradd: cannot create directory /users/www
[root@localhost tmp]# tail /etc/passwd
www:x:40014:40014::/users/www:/bin/bash
[root@localhost tmp]# userdel www

5、为用户gentoo和fedora新增附加组nebulaedu;

[root@localhost tmp]# usermod -aG nebulaedu gentoo
[root@localhost tmp]# usermod -aG nebulaedu fedora
[root@localhost tmp]# id fedora
uid=40012(fedora) gid=40012(fedora) groups=40012(fedora),5000(nebulaedu)
[root@localhost tmp]# id gentoo
uid=40013(gentoo) gid=5000(gentoo)
groups=40013(gentoo),5000(nebulaedu)

6、复制目录/var/log至/tmp/目录,修改/tmp/log及其内部的所有文件的属组为nebulaedu,并让属组对目录本身拥有写权限

[root@localhost ~]# cp -a /var/log /tmp
[root@localhost tmp]# chgrp nebulaedu /tmp/log
[root@localhost tmp]# ll -d /tmp/log
drwxr-xr-x. 6 root nebulaedu 4096 Aug  1 09:50 /tmp/log
[root@localhost tmp]# chmod 731 log
[root@localhost tmp]# ll -d /tmp/log
drwx-wx--x. 6 751 nebulaedu 4096 Aug  1 09:50 /tmp/log

7、研发部开发人员David和Peter属于组A,行政部人员Jack和Mike属于组B

[root@localhost ~]# groupadd A
[root@localhost ~]# groupadd B
[root@localhost ~]# useradd -G A Peter
[root@localhost ~]# useradd -G B Mike
[root@localhost /]# usermod -aG A  David
[root@localhost /]# usermod -aG B  Jack
[root@localhost /]# tail /etc/group
A:x:50005:David,Peter
B:x:50006:Jack,Mike

(1.)建立目录“/project_a”,该目录里面的文件只能由研发部开发人员读取、增加、删除、修改以及执行,其他用户不能对该目录进行任何的访问操作;并要求在此目录下创建的文件研发组内成员可以互相访问

[root@localhost ~]# mkdir /project_a
[root@localhost /]# chown :A /project_a/
[root@localhost /]# chmod 770 /project_a/
[root@localhost /]# ll -d /project_a/
drwxrwx---. 2 root A 6 Aug  1 11:04 /project_a/
[root@localhost project_a]# chmod 2770 /project_a/

(2.)建立目录“/project_b”,该目录里面的文件只能由行政部人员读取、增加、删除、修改以及执行,其他用户不能对该目录进行任何的访问操作;要求在此目录下创建的文件行政部人员只能删除自己的文件,不得删除其他人员文件

[root@localhost /]# mkdir /project_b
[root@localhost /]# chown :B /project_b/
[root@localhost /]# chmod 770 /project_b/
[root@localhost /]# ll -d /project_b/
drwxrwx---. 2 root B 6 Aug  1 11:15 /project_b/
[root@localhost project_b]# chmod 1770 /project_b/

[Jack@localhost project_b]$ vi 3
[Mike@localhost project_b]$ cat 3
1234567
[Mike@localhost project_b]$ echo "zx" > 3
[Mike@localhost project_b]$ cat 3
zx
[Mike@localhost project_b]$ rm 3
rm: cannot remove ‘3’: Operation not permitted
//表示在Jack下创建的文件3,切换至Mike下只能对文件3进行增,改,查,而不能对齐进行删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值