八、Linux文件权限管理 学习笔记

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

8.1 权限的作用

只允许自己访问
允许预设用户组访问
允许任何用户访问

8.2 文件权限属性

Sample

[root@mytest001-18-56 ~]# ll /etc/passwd
-rw-r--r-- 1 root root 2051 Jul  3 18:23 /etc/passwd

在这里插入图片描述

其中:文件类型,可以为d、l、s、c、b和 –
d 表示目录文件
l 表示符号链接文件
– 表示普通文件
s 表示socket套接口文件,比如我们启用mysql时,会产生一个mysql.sock文件
c 表示字符设备文件,例: 虚拟控制台 或tty0
b 表示块设备文件 例: sda, cdrom

8.3 权限说明

文件权限
r:可读文件 cat
w:可写文件 vim echo
x:可执行 运行命令或者脚本
目录权限:
r:可读 ls
w:目录可编辑 touch mkdir rm mv cp
x:目录不能运行,目录x权限,代表用户可以进入目录,也就是说,赋予 x 权限的用户或群组可以使用 cd 命令,其他用户要读写该目录内文件,不仅要有该文件的读写权限,也要有该目录的x权限。

[root@mytest001-18-56 ~]# useradd test1
[root@mytest001-18-56 ~]# su - test1
[test1@mytest001-18-56 ~]$ pwd
/home/test1
[test1@mytest001-18-56 ~]$ touch test1.txt
[test1@mytest001-18-56 ~]$ ls
test1.txt
[test1@mytest001-18-56 ~]$ ll -h
total 0
-rw-rw-r-- 1 test1 test1 0 Jul  4 14:33 test1.txt
[test1@mytest001-18-56 ~]$ exit
logout
[root@mytest001-18-56 ~]# useradd test2
[root@mytest001-18-56 ~]# su - test2
[test2@mytest001-18-56 ~]$ cat /home/test1/test1.txt
cat: /home/test1/test1.txt: Permission denied
[test2@mytest001-18-56 ~]$ exit
logout
[root@mytest001-18-56 ~]# ll /home/test1/ -d
drwx------ 2 test1 test1 114 Jul  4 14:33 /home/test1/
[root@mytest001-18-56 ~]# ##test1家目录,只有自己可以进入
[root@mytest001-18-56 ~]# chmod +x /home/test1  ##增加可执行权限
[root@mytest001-18-56 ~]# su - test2
[test2@mytest001-18-56 ~]$ cat /home/test1/test1.txt
[test2@mytest001-18-56 ~]$

8.4 文件拥有者

UGO:所有者–用户组–其它用户
User-所有者: 就是创建文件的用户,拥有对它一切权限,允许其所在的用户组访问文件
Group-用户组:具有相同特征用户的逻辑集合,让这个组具有查看、修改此文件的权限
Other-其它用户:系统内的其他所有者用户就是other用户类

  • rwx — —:文件所有者对文件具有读取、写入和执行的权限。
  • rwx r-- r–: 文件所有者具有读、写与执行的权限,用户组里用户及其他用户则具有读取的权限
  • rw- rw- r-x:文件所有者与同组用户对文件具有读写的权限,而其他用户仅具有读取和执行的权限。
    drwx–x–x: 目录所有者具有读写与进入目录的权限,其他用户近能进入该目录,却无法读取任何数据。
    drwx------: 除了目录所有者具有完整的权限之外,其他用户对该目录完全没有任何权限。

Sample

[root@Learning-18-52 ~]# touch 1.txt
[root@Learning-18-52 ~]# ll
total 8
-rw-r--r--. 1 root  root     0 Jul 11 15:02 1.txt
-rw-------. 1 root  root  1350 Jul 11 12:05 anaconda-ks.cfg
drwxr-xr-x. 3 root  user1  135 Jul 11 14:55 dir1
-rw-r--r--. 1 user1 root  1696 Jul 11 14:51 passwd
[root@Learning-18-52 ~]# chmod u+x,g=-,o-r 1.txt
[root@Learning-18-52 ~]# ll
total 8
-rwx------. 1 root  root     0 Jul 11 15:02 1.txt
-rw-------. 1 root  root  1350 Jul 11 12:05 anaconda-ks.cfg
drwxr-xr-x. 3 root  user1  135 Jul 11 14:55 dir1
-rw-r--r--. 1 user1 root  1696 Jul 11 14:51 passwd

8.5使用数字表示权限

在这里插入图片描述

RWX -R-XR-X 755 普通文件夹
RWR–R-- 644 普通文件
RWX: 421 = 7

8.6 文件特殊权限

SUID:set uid设置用户ID,只能设置在二进制可执行程序、目录无线
SGID:可以给二进制可执行程序和目录设置,新建文件所属组会集成上级目录所属组
Stickybit:粘滞位针对目录,对文件无效

SUID 4, SGID 2, stickbit 1
U+S G+S O+T
4644 2644 1777

U+s Sample:

[root@MongDB-18-57 ~]# chmod u+s /usr/bin/less

/*这个命令修改了 /usr/bin/less 这个程序的权限。chmod 是 "change mode" 的缩写,用于改变文件或目录的权限。u+s 参数特别指定了对文件所有者增加设置 Set-UID 位。Set-UID 位是一个特殊权限标志,当一个程序被设置了 Set-UID,它在执行时将以该程序的所有者的权限(而非执行它的用户的权限)来运行。
在这个例子中,因为 /usr/bin/less 是一个系统命令,通常由 root 拥有,所以当任何用户执行 less 命令时,它实际上会以 root 权限运行。这个操作在某些情况下是有用的,比如允许非root用户查看通常只有root才能访问的文件,但同时也需要谨慎使用,因为它可能引入安全风险。*/

[root@MongDB-18-57 ~]# su - sunia3 
[sunia3@MongDB-18-57 ~]$ less /etc/shadow
/*[sunia3@MongDB-18-57 ~]$ less /etc/shadow: 切换到 sunia3 用户后,执行了 less 命令来查看 /etc/shadow 文件。通常,这个文件包含了系统的用户密码信息,并且只有 root 或具有特定权限的用户才能访问。由于之前给 less 命令设置了 Set-UID 权限,即使现在是 sunia3 用户在执行 less,该命令也会以 root 权限运行,因此 sunia3 用户能够查看原本没有权限直接访问的 /etc/shadow 文件。*/
[sunia3@MongDB-18-57 ~]$ ll /usr/bin/less
-rwsr-xr-x. 1 root root 178064 Mar 15  2021 /usr/bin/less
[root@MongDB-18-57 ~]# chmod u-s /usr/bin/less
[root@MongDB-18-57 ~]# ll /usr/bin/less
-rwxr-xr-x. 1 root root 178064 Mar 15  2021 /usr/bin/less

G+S Sample:

[root@MongDB-18-57 ~]# mkdir gstest
[root@MongDB-18-57 ~]# chown :bin gstest/
[root@MongDB-18-57 ~]# chmod g+s gstest/
[root@MongDB-18-57 ~]# ll -d gstest/
drwxr-sr-x. 2 root bin 6 Jul 15 18:35 gstest/
[root@MongDB-18-57 ~]# touch gstest/bbb
[root@MongDB-18-57 ~]# mkdir gstest/12345
[root@MongDB-18-57 ~]# ll gstest/
total 0
drwxr-sr-x. 2 root bin 6 Jul 15 18:38 12345
-rw-r--r--. 1 root bin 0 Jul 15 18:37 bbb

Sample-Sticky位示例:

[root@MongDB-18-57 /]# mkdir /mytest
[root@MongDB-18-57 /]# ll -d /mytest/
drwxr-xr-x. 2 root root 6 Jul 16 10:54 /mytest/
[root@MongDB-18-57 /]# chmod 1777 /test
chmod: cannot access '/test': No such file or directory
[root@MongDB-18-57 /]# chmod 1777 /mytest
[root@MongDB-18-57 /]# ll -d /mytest/
drwxrwxrwt. 2 root root 6 Jul 16 10:54 /mytest/
[root@MongDB-18-57 /]# su - sunia3 
[sunia3@MongDB-18-57 ~]$ echo my123456 > /mytest/sunia3.txt
[sunia3@MongDB-18-57 ~]$ cat /mytest/sunia3.txt 
my123456
[sunia3@MongDB-18-57 ~]$ exit
logout
[root@MongDB-18-57 /]#  ll /mytest/sunia3.txt  
-rw-rw-r--. 1 sunia3 sunia3 9 Jul 16 10:56 /mytest/sunia3.txt
[root@MongDB-18-57 /]# su - sunia3
[sunia3@MongDB-18-57 ~]$ echo user123456 >> /mytest/sunia3.txt 
[sunia3@MongDB-18-57 ~]$ cat /mytest/sunia3.txt 
my123456
user123456
[sunia3@MongDB-18-57 ~]$ rm /mytest/sunia3.txt

如上命令执行了以下操作:

  1. mkdir /mytest # 在根目录下创建了一个名为mytest的新目录。

  2. ll -d /mytest/ #: 显示了/mytest/目录的详细信息。初始权限设置为drwxr-xr-x., 表示所有者(root)有读、写、执行权限,所属组和其他用户有读和执行权限。

  3. chmod 1777 /test #: 尝试修改一个名为/test的目录权限,但因为该目录不存在,所以命令失败并提示"No such file or directory"。

  4. chmod 1777 /mytest #: 成功修改了/mytest目录的权限为1777。这个权限值意味着所有者有全部权限(读、写、执行),同时设置了sticky位(1),这允许目录内的文件可以被任何人创建或删除,但仅限于文件的所有者或超级用户。在Linux中,这样的权限设置常用于/tmp这类公共目录,以确保文件安全。

  5. 再次使用ll -d /mytest/显示目录权限,此时权限变为drwxrwxrwt., 其中的t表示sticky位已设置。

  6. su - sunia3 切换到用户sunia3

  7. echo my123456 > /mytest/sunia3.txt # : 用户sunia3/mytest/sunia3.txt文件写入了"my123456",由于目录权限包含sticky位,任何用户都可以在该目录下创建文件。

  8. cat /mytest/sunia3.txt # 查看了写入的内容。

  9. 用户sunia3退出登录后,root用户查看了/mytest/sunia3.txt的权限,显示为-rw-rw-r--., 文件属主为sunia3,表明sunia3成功创建了文件并拥有它。

  10. 再次切换到用户sunia3

  11. echo user123456 >> /mytest/sunia3.txt: 用户sunia3追加内容"user123456"到已有的sunia3.txt文件中,因为是文件的所有者,所以有权进行此操作。

  12. 再次查看文件内容确认追加成功。

  13. rm /mytest/sunia3.txt: 用户sunia3删除了自己创建的sunia3.txt文件,这也是因为sticky位允许文件所有者删除自己的文件。

8.7 FACL 扩展权限

Sample:

[root@MongDB-18-57 ~]# touch /opt/my.txt
[root@MongDB-18-57 ~]# setfacl -m u:sunia3:rwx /opt/my.txt 
[root@MongDB-18-57 ~]# getfacl /opt/my.txt 
getfacl: Removing leading '/' from absolute path names
**# file: opt/my.txt
**# owner: root**
**# group: root****
user::rw-
user:sunia3:rwx
group::r--
mask::rwx
other::r--

[root@MongDB-18-57 ~]# su - sunia3 
[sunia3@MongDB-18-57 ~]$ cat /opt/my.txt 
[sunia3@MongDB-18-57 ~]$ echo my123456 >> /opt/my.txt 
[sunia3@MongDB-18-57 ~]$ exit
logout
[root@MongDB-18-57 ~]# ll /opt/my.txt 
-rw-rwxr--+ 1 root root 9 Jul 16 11:08 /opt/my.txt
[root@MongDB-18-57 ~]# touch /opt/my2.txt
[root@MongDB-18-57 ~]# ll /opt/*.txt
-rw-r--r--. 1 root root 0 Jul 16 11:09 /opt/my2.txt
-rw-rwxr--+ 1 root root 9 Jul 16 11:08 /opt/my.txt
[root@MongDB-18-57 ~]# setfacl -m u:sunia3:rwx /opt/my2.txt 
[root@MongDB-18-57 ~]# su - sunia3
[sunia3@MongDB-18-57 ~]$ ll /opt/*.txt
-rw-rwxr--+ 1 root root 0 Jul 16 11:09 /opt/my2.txt
-rw-rwxr--+ 1 root root 9 Jul 16 11:08 /opt/my.txt
[sunia3@MongDB-18-57 ~]$

分析:

这些命令执行了以下功能:

  1. touch /opt/my.txt: 创建了一个空文件my.txt/opt/目录下。

  2. setfacl -m u:sunia3:rwx /opt/my.txt: 使用setfacl命令修改了/opt/my.txt的访问控制列表(ACL),给用户sunia3分配了读®、写(w)、执行(x)权限。这意味着尽管文件属于root,用户sunia3也被授权可以对该文件进行读、写和执行操作。

  3. getfacl /opt/my.txt: 查看了/opt/my.txt的ACL,输出显示了文件的权限详情,包括特定用户的权限,其中user:sunia3:rwx表明sunia3具有所有权限,且由于存在mask权限(mask::rwx),实际有效权限也是rwx。

  4. su - sunia3 切换到用户sunia3

  5. cat /opt/my.txt: 用户sunia3查看了文件内容,由于文件为空,没有输出显示。

  6. echo my123456 >> /opt/my.txt: 用户sunia3/opt/my.txt追加了文本"my123456",这验证了sunia3确实具有写权限。

  7. exit: 退出用户sunia3,返回到root用户。

  8. ll /opt/my.txt: 查看/opt/my.txt的权限,显示为-rw-rwxr--+,表明文件对所有者(root)是读写权限,对用户sunia3保留了rwx权限,而其他用户只有读权限。

  9. 最后,再次切换到用户sunia3并使用ll /opt/*.txt查看两个文件的权限,显示my.txtmy2.txt都对sunia3设置了rwx权限,验证了设置成功。

总结来说,这些命令主要实现了创建文件、使用ACL机制为指定用户分配文件权限,并验证了分配的权限能够被正确应用。

8.8 不能修改的文件属性

命令:chattr
参数: a 只能追加内容 ; i 不能被修改
+a: 只能追加内容
+i:系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
注:immutable [ɪˈmju:təbl] 不可改变的 ; Append [əˈpend] 追加
-i :移除i参数。 -a :移除a参数

Sample:

[root@MongDB-18-57 ~]# 
[root@MongDB-18-57 ~]# touch myhack.sh youhack.sh
[root@MongDB-18-57 ~]# chattr +i myhack.sh 
[root@MongDB-18-57 ~]# rm -rf myhack.sh 
rm: cannot remove 'myhack.sh': Operation not permitted
[root@MongDB-18-57 ~]# lsattr myhack.sh 
----i--------------- myhack.sh
[root@MongDB-18-57 ~]# chattr -i myhack.sh 
[root@MongDB-18-57 ~]# lsattr myhack.sh 
-------------------- myhack.sh
[root@MongDB-18-57 ~]# echo 12345 >> myhack.sh 
[root@MongDB-18-57 ~]# cat myhack.sh 
12345
[root@MongDB-18-57 ~]# chattr +a myhack.sh 
[root@MongDB-18-57 ~]# rm -rf myhack.sh 
rm: cannot remove 'myhack.sh': Operation not permitted
[root@MongDB-18-57 ~]# echo 56789 >> myhack.sh 
[root@MongDB-18-57 ~]# cat myhack.sh 
12345
56789
[root@MongDB-18-57 ~]# chattr +a myhack.sh 
[root@MongDB-18-57 ~]# lsattr myhack.sh 
-----a-------------- myhack.sh
[root@MongDB-18-57 ~]# chattr +i myhack.sh 
[root@MongDB-18-57 ~]# lsattr myhack.sh 
----ia-------------- myhack.sh
[root@MongDB-18-57 ~]# echo 78912 >> myhack.sh 
-bash: myhack.sh: Operation not permitted

[root@MongDB-18-57 ~]# mkdir mydoc3
[root@MongDB-18-57 ~]# chattr +i mydoc3/
[root@MongDB-18-57 ~]# touch mydoc3/test.txt
touch: setting times of 'mydoc3/test.txt': No such file or directory
[root@MongDB-18-57 ~]# chattr -i mydoc3/
[root@MongDB-18-57 ~]# touch mydoc3/test.txt
[root@MongDB-18-57 ~]# echo 123456 >> mydoc3/test.txt 
[root@MongDB-18-57 ~]# cat mydoc3/test.txt 
123456
[root@MongDB-18-57 ~]# chattr +i mydoc3/
[root@MongDB-18-57 ~]# rm -rf mydoc3/test.txt 
rm: cannot remove 'mydoc3/test.txt': Operation not permitted
[root@MongDB-18-57 ~]# cat mydoc3/test.txt 
123456
[root@MongDB-18-57 ~]# vim mydoc3/test.txt 
[root@MongDB-18-57 ~]# cat mydoc3/test.txt 
123456
456789

总结:

这段脚本主要演示了Linux系统中使用chattr命令来设置文件和目录的特殊属性,以保护文件免受意外修改或删除。下面是逐行分析:

  1. touch myhack.sh youhack.sh:创建了两个空白文件myhack.shyouhack.sh

  2. chattr +i myhack.sh:为myhack.sh文件添加了不可变属性(i),这意味着文件不能被修改、删除或重命名。

  3. rm -rf myhack.sh:尝试删除myhack.sh,但由于之前设置了不可变属性,系统拒绝了该操作,提示“Operation not permitted”。

  4. lsattr myhack.sh:显示myhack.sh的属性,显示为----i---------------,确认了不可变属性已设置。

  5. chattr -i myhack.sh:移除了myhack.sh的不可变属性。

  6. 再次lsattr myhack.sh显示文件已无特殊属性。

7-9. 向myhack.sh追加内容,然后查看内容,证明文件可以正常编辑。

  1. chattr +a myhack.sh:为文件添加了只追加属性(a),这意味着文件只能被追加内容,不能被覆盖或删除。

11-14. 尝试删除文件失败,因为尽管去除了不可变属性,只追加属性依然阻止文件被删除。继续追加内容到文件中并查看,证明只追加属性生效。

  1. chattr +i myhack.sh:再次为文件添加不可变属性。

  2. lsattr myhack.sh 显示文件同时具有不可变和只追加属性。

  3. 尝试再次追加内容到myhack.sh失败,因为现在文件既是不可变的也是只可追加的,不可变属性优先,阻止了所有修改。

接下来的步骤展示了类似的操作应用于目录mydoc3

18-20. 创建目录mydoc3,为其设置不可变属性,然后尝试在其中创建文件test.txt失败,因为目录不可修改。

  1. 移除目录的不可变属性后,成功创建并编辑了mydoc3/test.txt

22-24. 再次为mydoc3设置不可变属性,尝试删除其内部文件失败,但可以通过编辑器如vim修改已有文件内容(这是因为vim可能先将原文件移到临时位置,修改后再覆盖回原位置,绕过了直接修改的限制)。

综上,这段脚本展示了使用chattr命令的+i(不可变)、+a(只追加)属性来保护文件和目录,防止意外修改或删除,同时也展示了这些属性如何影响文件的日常操作。

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值