一。权限介绍
权限就是,定义了 什么样的角色可以干什么样的事情。 在计算机中 用户拥有什么样的权限军能干什么事情。 由于linux中一切皆文件的特性。所有用户对linux的权限就可以理解为用户对文件的权限。
并且因为Linux中除了文件还有保存文件的文件夹,所以linux权限其实就是 用户对linux中文件夹和文件的权限。
文件和文件夹得基本权限有三个:
读 写 执行
相对于文件来说:根据权限linux用户可以分为三类:
1)所有者
2)所属组中的成员
3)其他人
权限的查看:
[root@python ~]# ls -l a.txt # 查看a.txt这个文件的权限-rw-r--r--. 1 root root 48 7月 2 13:10 a.txt 第一个 - 代表文件的类型, 这个是普通文件 剩余的三个为一组,三个为一组分开看 rw- 代表文件所有者对,文件有什么权限 (r读 w写) r-- 代表所属组中的成员,对这个文件有什么权限 r-- 代表其他人对这个文件有什么权限 1 代表(block块和 i节点,只做过一次绑定. 做硬链接时这里会发生变化) * 链接 第一个 root 代表文件所有者 第二个 root 代表文件的所属组 48 代表的是 文件的大小。 (单位是 字节) 之后的就是时间了。 7 月 2号 13:10 分创建的, 名字叫 a.txt
r(read) 读 w(write) 写 x(exceute) 执行
链接:链接使用 ln 做链接。(链接的意思 就类似于 window 的快捷方式的东西。
ln -s /root/a.txt /root/xxx #这是软连接, /root/axtxt 连接到 /root/xxx 两个文件的 i 节点是不相同的
ln /root/a.txt /root/ccc # 这是硬链接, 两个文件的 i 节点是相同的。
)
二。普通权限
定义所有者、所属组、其他人对 文件或文件夹有何种的权限。
普通权限就只有 r(read) 读 w(write) 写 x(exceute) 执行
chmod - 改变文件的访问权限
语法: chmod [options] mode file
-R 递归设置权限,针对目录有效
mode 谁给什么权限 u(所有者) g(所属组) o(其他人) a(所有人) +(增加) -(收回) =(赋予) 权限 r(读) w(写) x(执行)
[root@python ~]# chmod g+w,o-r a[root@python ~]# ll a-rw-rw----. 1 root root 0 7月 3 08:52 a [root@python ~]# chmod u+x,g+x-w,o+x-w b [root@python ~]# ll b -rwxr-xr-x. 1 root root 0 7月 3 08:52 b [root@python ~]# chmod g-r,o-r c [root@python ~]# ll c -rw-------. 1 root root 0 7月 3 08:52 c [root@python ~]# chmod u=rw,g=---,o=--- c -rw-------. 1 root root 0 7月 3 08:52 c
命令在输入时,注意不要添加多余的 空格。
数字权限:
r == 4 w == 2 x == 1
用法就是 当一个用户拥有所有权限时,就是7 只有读就是4 读写就是6 这样来算的。
-rw-r--r-- 这个所对应的数字权限就是 644 -rwxr-xr-x 这个所对应的数字权限就是 755
[root@python ~]# chmod 711 a b c[root@python ~]# ll a b c-rwx--x--x. 1 root root 0 7月 3 08:52 a-rwx--x--x. 1 root root 0 7月 3 08:52 b-rwx--x--x. 1 root root 0 7月 3 08:52 c
chown - 改变文件所有者和所有组
语法: chown [options] user [:group] file ...
-R 递归设置,针对文件夹的
[root@python doc]# chown python_web a[root@python doc]# ll-rwx--x--x. 1 python_web root 0 7月 3 08:52 a-rwx--x--x. 1 root root 0 7月 3 08:52 b-rwx--x--x. 1 root root 0 7月 3 08:52 c [root@python doc]# chown python_web.python_web b # 所属组用 . 表示的 .组名称 就能修改组了 [root@python doc]# ll -rwx--x--x. 1 python_web root 0 7月 3 08:52 a -rwx--x--x. 1 python_web python_web 0 7月 3 08:52 b -rwx--x--x. 1 root root 0 7月 3 08:52 c
chgrp - 改变文件所属组
语法: chgrp [option] 组名称
-R 递归设置,只对文件夹有效
三。特殊权限
定义了 SUID SGID SBIT 权限。 特殊权限是对 普通权限的一个扩充
linux 特殊权限 7 777
suid 4 当一个二进制拥有SUID权限后,当其他用户执行该二进制文件的时候。该二进制文件就会以他所有者的权限去执行。
[root@python ~] # chmod 4755 /bin/systemctl- rwsr-xr-x 1 root root 7178283 。。。。。 这里多了一个 s 的粘连位。 这样再普通用户再执行 shutdown 的时候也会执行成功,因为它自动的回去使用root的身份去执行
sgid 2 要求文件夹下 新建的子文件夹或者子文件 继承父文件夹的属组
[root@python ~] # chmod 2755 doc # 这样再进行创建文件的时候,不管所有者是谁,所属组都会是继承自父文件夹的
sticky bit 1 如果给文件夹赋予 粘连位, 则该文件夹下的文件或者文件夹只能够由所有者以及ROOT删除。(粘连位一般用于公共目录, 确保谁的文件谁才能够删除, 不能够随便的删除。)
[root@python ~] # chmod 1755 /opt/publick # 为公共的文件夹添加粘连位,不允许随便删除。
四。ACL权限
针对某个用户或者私人定制权限,优先级高于基本权限。
例:
-rwx--x--x. 1 root root 0 7月 3 08:52 c root rwx root --x other --x 以上是 root用户 root组 和 其他人的权限 如果我需要让 user02 user03 要有 rwx 权限。 group01组拥有 rw 权限。这时单纯的去更改 other 这个位置 上的权限就不行了。 因为这里的是针对的 所有的用户。 一旦改了所有的用户都会有这个权限。 而不是我想要的只是个别用户了
所以 ACL 权限, 就是用在现在的情况下了。
1.设置 ACL 权限:
setfacl 设置文件的ACL权限
语法: setfacl [option] file...
-m 修改acl
-x 删除acl
-b 删除所有acl
-k 删除默认的acl
-R 递归
[root@python ~]# setfacl -m user:user01:rwx filename # 给一个用户 user01 设置 rwx 权限 [root@python ~]# setfacl -m group:group01:rw filename # 给一个组 group01 设置rw权限 (都是对filename这个文件来说的) # 添加权限 [root@python doc]# setfacl -m user:python_web:rwx a [root@python doc]# setfacl -m group:python_web:rw a [root@python doc]# getfacl Usage: getfacl [-aceEsRLPtpndvh] file ... Try `getfacl --help' for more information. [root@python doc]# getfacl a # file: a # owner: python_web # group: root user::rwx user:python_web:rwx group::--x group:python_web:rw- mask::rwx other::--x # 收回权限 [root@python ~]# setfacl -x python_web a # 收回python_web 这个用户的对 a 文件的权限 [root@python ~]# setfacl -b a # 删除 a 文件所有的 ACL 权限。
2.查看 ACL 权限:
getfacl -查看某个文件的所有的权限
五。隐藏权限
对文件属性进行特殊的定义。需要特殊的命令才可以看得到这种权限
[root@python ~ ]# lsattr 文件或文件名 # 查看我文件或者文件夹的隐藏权限 [root@python ~]# lsattr doc ---------------- doc/a ---------------- doc/b ---------------- doc/c 全部都是 - 表示没有设置过任何的 隐藏权限
chattr - 设置文件或文件夹的隐藏权限
chattr [+-=][options] 文件或文件名
+ : 增加某个特殊的权限参数,其他原本存在的参数不动
- : 删除某个特殊的权限参数,其他原本存在的参数不动
= : 设置权限参数,并且仅有后面接的参数, 其他原本有的将会被覆盖
A : 当设置了 A 属性时, 这个文件(或目录) 的存取时间 atime (access) 将不可被修改,可避免电脑磁盘I/O错误的情况发生时,这个会被改变,(一般会设置在频繁访问的文件上,防止因为频繁访问,频繁修改atime 造成频繁的 磁盘 I/O 写入。)
S: 此功能类似 sync (同步操作) , 就是将数据同步写入磁盘中, 可以有效的避免数据流失。 (实时的将数据写入磁盘)
a: 设置 a 之后,此文件只能增加数据,不能删除数据。(只有 root 才可以设置这个属性)。(适合于多人编辑的文档,只写不删)
a 设置之后,就不能使用 vim 进行编辑了。 只能使用 ( echo '内容' >> 文件名 ) 这种方式才能写入文件
c: 设置 c 之后,将会自动将此文件 “压缩”, 在读取的时候将会自动的解压缩,但是在存储的时候,将会先进性压缩再存储.(这个属性对大文件非常的有用。)
d: 当执行 dump (备份) 程序的时候,设置d 属性将可使该文件(或者目录)具有转储的功效。
i : i的作用非常大。 他可以让一个文件' 不能被删除、改名、设置链接、也无法写入或新增数据', 对于系统安全性有相当大的帮助。
j: 当使用 ext3 文件系统格式时。 设置 j 属性将会使文件在写入时先记录在 joumal 中。 但是,当文件系统设置参数为 data=joumalled 时,有于已经设置了日志了, 所以这个属性无效。
s: 当文件设置了 s 参数时, 他会从这个硬盘空间完全删除。
u: 于s相反, 当使用 u 来设置文件时,则数据内容其实还存在于粗盘中,可以用来还原删除的。
注: 这个属性的设置上,比较常见的时 a 于 i 的设置, 并且很多设置值都是必须要root才能设置的。