Linux文件权限

  • 文件基本权限

  • 文件特殊权限

文件基本权限

  1. 文件所属

U:所有者

就是创建文件的用户,这个用户拥有对它所创建的文件的一切权限,所有者可以允许其所在的用户组可以访问所有者的文件。

G:用户组

用户组是具有相同特征用户的逻辑集合,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有10个用户的话,就需要授权10次,显然这种方法不太合理;另一种方法是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中,那么所有用户就具有了和组一样的权限。这就是用户组。

O:其它用户

系统内的其他所有者用户就是other用户类

  1. 权限说明

权限对文件和目录的影响有三种权限可以应用:读取,写入与执行,这些权限对访问文件和目录的影响如下:

| 权限 | 对文件的影响 | 对目录的影响 |

|-------|------------|------------------------|

| r(读取) | 可以读取文件的内容 | 可以列出目录的内容(文件名) |

| w(写入) | 可以更改文件的内容 | 可以创建或删除目录中的任意文件 |

| x(执行) | 可以作为命令执行文件 | 可以访问目录的内容(取决于目录中文件的权限) |

对于文件来说:

  • r:读

  • w:写

  • x:执行

对于目录来说:

  • r:读(看到目录里面有什么) ls

  • w:在目录里面建文件,删除,移动 touch mkdir rm mv cp

  • x:进入 cd cat

示例:

| 权限标识 | 说明 |

|-----------|------------------------------------------|

| rwx------ | 文件所有者对文件具有读取、写入和执行的权限。 |

| rwxr--r-- | 文件所有者具有读、写与执行的权限,用户组里用户及其他用户则具有读取的权限。 |

| rw-rw-r-x | 文件所有者与同组用户对文件具有读写的权限,而其他用户仅具有读取和执行的权限。 |

| drwx--x—x | 目录所有者具有读写与进入目录的权限,其他用户近能进入该目录,却无法读取任何数据。 |

| drwx----- | 除了目录所有者具有完整的权限之外,其他用户对该目录完全没有任何权限。 |

  1. 权限命令

chown

  • 作用:修改文件所属者

  • 语法:

    • chown user:group filename 比如:chown hr:san a.txt 把文件的属主和属组改为hr,san

    • chown user filename 比如:chown san a.txt 把文件的属主改为san用户

    • chown :group filename 比如: chown :miao a.txt 把文件的属组改为miao这个组\

    • chown user: filename 比如:chown san: a.txt 自动继承这个用户所有的组

    • chgrp hr filename 比如: chgrp hr f.txt

    • -R :递归(目录下的所有内容都更改,否则只修改目录)

示例:


[root@love ~]# touch {a,b,c}.txt

[root@love ~]# ll  *.txt

-rw-r--r-- 1 root root 0 5月 8 21:03 a.txt

-rw-r--r-- 1 root root 0 5月 8 21:03 b.txt

-rw-r--r-- 1 root root 0 5月 8 21:03 c.txt

chmod

  • 作用:修改文件,目录的权限

  • 语法:chmod [对谁操作] [操作符] [赋于什么权限] 文件名

  • 对谁操作:

    • u----> 用户user,表示文件或目录的所有者

    • g---->用户组group,表示文件或目录所属的用户组

    • o---->其它用户others

    • a---->所有用户all

  • 操作符:

    • + 添加权限

    • - 减少权限

    • = 直接给定一个权限

  • 权限:r w x

例如下在的组合:

  • u-w user 拥有者

  • g+x group 组

  • o=r other 其他人

  • a+x all 所有人

示例:chmod修改权限


[root@love ~]# touch 1.txt

[root@love ~]# ll 1.txt

-rw-r--r-- 1 root root 0 5月 8 21:20 1.txt

[root@love ~]#

[root@love ~]# chmod u-w 1.txt

[root@love ~]# ll 1.txt

使用八进制(0-7)数字表示权限法

| 权限 | 二进制值 | 八进制值 | 描述 |

|-----|------|------|----------|

| --- | 000 | 0 | 没有任何权限 |

| --x | 001 | 1 | 只有执行权限 |

| -w- | 010 | 2 | 只有写入权限 |

| -wx | 011 | 3 | 有写入和执行权限 |

| r-- | 100 | 4 | 只有读取权限 |

| r-x | 101 | 5 | 有读取和执行权限 |

| rw- | 110 | 6 | 有读取和写入权限 |

| rwx | 111 | 7 | 有全部权限 |

语法:chmod 755 文件或文件夹名字

chmod a=rwx b.txt 等于 chmod 777 b.txt

文件的特殊权限

  1. 文件的特殊权限:suid sgid sticky

SUID(set uid设置用户ID):

限定:只能设置在二进制可执行程序上面。对目录设置无效

功能:程序运行时的权限从执行者变更成程序所有者的权限

SGID:

限定:既可以给二进制可执行程序设置,也可以对目录设置

功能:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会,继承上级目录的所属组

Stickybit:粘滞位权限是针对目录的,对文件无效,也叫防删除位

这3个特殊权限对应的数值为

| SUID | SGID | Stickybit |

|---------|---------|-----------|

| u+s或u=4 | g+s或g=2 | o+t或o=1 |

SUID:SUID属性一般用在可执行文件上

功能:当用户执行该文件时,会临时拥有该执行文件的所有者权限。使用”ls -l” 或者”ll”命令浏览文件时,如果可执行文件所有者权限的第三位是一个小写的”s”,就表明该执行文件拥有SUID属性。比如/usr/bin/passwd文件

SGID:既可以给二进制可执行程序设置,也可以给目录设置。

功能:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的权限。

Stickybit:只作用于目录

功能:目录下创建的文件只有root、文件创建者、目录所有者才能删除。


# 例:系统中的tmp目录就是这样

[root@love ~]# ll -d /tmp/

drwxrwxrwt. 11 root root 4096 Jan 24 19:41 /tmp/

# 用法:

chmod o+t /tmp/test/

  1. 文件扩展权限ACL

扩展ACL :access control list

例1:设置用户mk对文件a.txt拥有的rwx权限 ,mk不属于a.txt的所属主和组,mk是other。怎么做?


[root@love ~]# touch /tmp/a.txt

[root@love ~]# getfacl /tmp/a.txt

getfacl: Removing leading '/' from absolute path names

# file: tmp/a.txt

# owner: root

# group: root

user::rw-

group::r--

other::r--

#setfacl -m u:mk:rwx /tmp/a.txt u : 设置某个用户拥有的权限

[root@love ~]# getfacl /tmp/a.txt

getfacl: Removing leading '/' from absolute path names

...

user::rw-

user:mk:rwx

[mk@love ~]$ vim /tmp/a.txt

[mk@love ~]$ ll /tmp/a.txt

-rw-rwxr--+ 1 root root 8 5月 8 22:42 /tmp/a.txt

例2:给目录加扩展权限


[root@love ~]# mkdir /tmp/test

setfacl -m d:u:mk:rwx /tmp/test # -d default 设置默认acl,对目录有效,此目录下新建的目录或文件都继承此acl权限

# 例:测试一下 -d 参数:

[root@love ~]# mkdir /tmp/test

[root@love ~]# setfacl -m d:u:mk:rwx /tmp/test

[root@love ~]# getfacl /tmp/test/

getfacl: Removing leading '/' from absolute path names

# file: tmp/test/

# owner: root

# group: root



user::rwx

group::r-x

other::r-x

default:user::rwx

default:user:mk:rwx

default:group::r-x

default:mask::rwx

default:other::r-x



[root@love ~]# touch /tmp/test/a.txt

[root@love ~]# mkdir /tmp/test/data

[root@love ~]# getfacl /tmp/test/a.txt #因为-d参数,所以test下所有创建的文件和目录都继承了默认的acl权限

getfacl: Removing leading '/' from absolute path names

# file: tmp/test/a.txt

# owner: root

# group: root



user::rw-

user:mk:rwx #effective:rw-

group::r-x #effective:r--

mask::rw-

other::r--



[root@love ~]# getfacl /tmp/test/data

getfacl: Removing leading '/' from absolute path names

# file: tmp/test/data

# owner: root

# group: root



user::rwx

user:mk:rwx

group::r-x

mask::rwx

other::r-x

default:user::rwx

default:user:mk:rwx

default:group::r-x

default:mask::rwx

default:other::r-x

例3:给目录下所有文件都加扩展权限


[root@love ~]# setfacl -R -m u:lee:rw- testdirectory/ #-R一定要在-m前面,表示目录下所有文件

[root@love ~]# setfacl -x u:mk /tmp/a.txt # 去掉单个权限

[root@love ~]# setfacl -b /tmp/a.txt # 去掉所有acl权限

实战:创建一个让root都无法删除的文件


[root@love ~]# touch hack.sh aa.sh

[root@love ~]# ll hack.sh aa.sh

-rw-r--r-- 1 root root 0 May 24 21:29 aa.sh

-rw-r--r-- 1 root root 0 May 24 21:29 hack.sh

[root@love ~]# rm -rf aa.sh

# 黑客使用xShell悄悄执行在后台添加attr扩展属性:(这个别让学员看到^_^)

[root@love ~]# chattr +i hack.sh