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
如上命令执行了以下操作:
-
mkdir /mytest# 在根目录下创建了一个名为mytest的新目录。 -
ll -d /mytest/#: 显示了/mytest/目录的详细信息。初始权限设置为drwxr-xr-x., 表示所有者(root)有读、写、执行权限,所属组和其他用户有读和执行权限。 -
chmod 1777 /test#: 尝试修改一个名为/test的目录权限,但因为该目录不存在,所以命令失败并提示"No such file or directory"。 -
chmod 1777 /mytest#: 成功修改了/mytest目录的权限为1777。这个权限值意味着所有者有全部权限(读、写、执行),同时设置了sticky位(1),这允许目录内的文件可以被任何人创建或删除,但仅限于文件的所有者或超级用户。在Linux中,这样的权限设置常用于/tmp这类公共目录,以确保文件安全。 -
再次使用
ll -d /mytest/显示目录权限,此时权限变为drwxrwxrwt., 其中的t表示sticky位已设置。 -
su - sunia3切换到用户sunia3。 -
echo my123456 > /mytest/sunia3.txt# : 用户sunia3向/mytest/sunia3.txt文件写入了"my123456",由于目录权限包含sticky位,任何用户都可以在该目录下创建文件。 -
cat /mytest/sunia3.txt# 查看了写入的内容。 -
用户
sunia3退出登录后,root用户查看了/mytest/sunia3.txt的权限,显示为-rw-rw-r--., 文件属主为sunia3,表明sunia3成功创建了文件并拥有它。 -
再次切换到用户
sunia3。 -
echo user123456 >> /mytest/sunia3.txt: 用户sunia3追加内容"user123456"到已有的sunia3.txt文件中,因为是文件的所有者,所以有权进行此操作。 -
再次查看文件内容确认追加成功。
-
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 ~]$
分析:
这些命令执行了以下功能:
-
touch /opt/my.txt: 创建了一个空文件my.txt在/opt/目录下。 -
setfacl -m u:sunia3:rwx /opt/my.txt: 使用setfacl命令修改了/opt/my.txt的访问控制列表(ACL),给用户sunia3分配了读®、写(w)、执行(x)权限。这意味着尽管文件属于root,用户sunia3也被授权可以对该文件进行读、写和执行操作。 -
getfacl /opt/my.txt: 查看了/opt/my.txt的ACL,输出显示了文件的权限详情,包括特定用户的权限,其中user:sunia3:rwx表明sunia3具有所有权限,且由于存在mask权限(mask::rwx),实际有效权限也是rwx。 -
su - sunia3切换到用户sunia3。 -
cat /opt/my.txt: 用户sunia3查看了文件内容,由于文件为空,没有输出显示。 -
echo my123456 >> /opt/my.txt: 用户sunia3向/opt/my.txt追加了文本"my123456",这验证了sunia3确实具有写权限。 -
exit: 退出用户sunia3,返回到root用户。 -
ll /opt/my.txt: 查看/opt/my.txt的权限,显示为-rw-rwxr--+,表明文件对所有者(root)是读写权限,对用户sunia3保留了rwx权限,而其他用户只有读权限。 -
最后,再次切换到用户
sunia3并使用ll /opt/*.txt查看两个文件的权限,显示my.txt和my2.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命令来设置文件和目录的特殊属性,以保护文件免受意外修改或删除。下面是逐行分析:
-
touch myhack.sh youhack.sh:创建了两个空白文件myhack.sh和youhack.sh。 -
chattr +i myhack.sh:为myhack.sh文件添加了不可变属性(i),这意味着文件不能被修改、删除或重命名。 -
rm -rf myhack.sh:尝试删除myhack.sh,但由于之前设置了不可变属性,系统拒绝了该操作,提示“Operation not permitted”。 -
lsattr myhack.sh:显示myhack.sh的属性,显示为----i---------------,确认了不可变属性已设置。 -
chattr -i myhack.sh:移除了myhack.sh的不可变属性。 -
再次
lsattr myhack.sh显示文件已无特殊属性。
7-9. 向myhack.sh追加内容,然后查看内容,证明文件可以正常编辑。
chattr +a myhack.sh:为文件添加了只追加属性(a),这意味着文件只能被追加内容,不能被覆盖或删除。
11-14. 尝试删除文件失败,因为尽管去除了不可变属性,只追加属性依然阻止文件被删除。继续追加内容到文件中并查看,证明只追加属性生效。
-
chattr +i myhack.sh:再次为文件添加不可变属性。 -
lsattr myhack.sh显示文件同时具有不可变和只追加属性。 -
尝试再次追加内容到
myhack.sh失败,因为现在文件既是不可变的也是只可追加的,不可变属性优先,阻止了所有修改。
接下来的步骤展示了类似的操作应用于目录mydoc3:
18-20. 创建目录mydoc3,为其设置不可变属性,然后尝试在其中创建文件test.txt失败,因为目录不可修改。
- 移除目录的不可变属性后,成功创建并编辑了
mydoc3/test.txt。
22-24. 再次为mydoc3设置不可变属性,尝试删除其内部文件失败,但可以通过编辑器如vim修改已有文件内容(这是因为vim可能先将原文件移到临时位置,修改后再覆盖回原位置,绕过了直接修改的限制)。
综上,这段脚本展示了使用chattr命令的+i(不可变)、+a(只追加)属性来保护文件和目录,防止意外修改或删除,同时也展示了这些属性如何影响文件的日常操作。

3553

被折叠的 条评论
为什么被折叠?



