Linux文件权限


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)数字表示权限法

权限二进制值八进制值描述
---0000没有任何权限
--x0011只有执行权限
-w-0102只有写入权限
-wx0113有写入和执行权限
r--1004只有读取权限
r-x1015有读取和执行权限
rw-1106有读取和写入权限
rwx1117有全部权限

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

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

文件的特殊权限

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

SUID(set uid设置用户ID):
限定:只能设置在二进制可执行程序上面。对目录设置无效
功能:程序运行时的权限从执行者变更成程序所有者的权限

SGID:
限定:既可以给二进制可执行程序设置,也可以对目录设置
功能:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会,继承上级目录的所属组

Stickybit:粘滞位权限是针对目录的,对文件无效,也叫防删除位
这3个特殊权限对应的数值为

SUIDSGIDStickybit
u+s或u=4g+s或g=2o+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

声明:Rock 版权所有,内容均为原创,欢迎转载。

转载:转载请注明原文链接 - Linux文件权限


我是一个程序员,致力于网页开发,我还很年轻,什么也不懂。