快速掌握linux的文件权限管理

 

 

快速掌握linux的文件权限管理

1、文件的基本权限:r w x (UGO)

2、文件的特殊权限:suid sgid sticky和文件扩展权限ACL

 

1.1.权限的作用

我们通过文件设备权限可以达到以下三种访问权限的方式:

 1) 只允许用户自己访问

2)允许一个预先指定的用户组中用户访问

3)允许系统中的任何用户访问

1.2如何查权限

root@localhost ~]# ll
total 20
-rw-r--r--  1 root root  223 Feb 21 21:05 aa
-rw-------. 1 root root 1621 Oct 29 08:49 anaconda-ks.cfg
-rw-r--r--  1 root root    0 Feb 29 22:59 bb
-rw-------. 1 root root 1208 Oct 29 08:49 original-ks.cfg
-rw-r--r--  1 root root 1539 Feb 26 23:32 pass
-rw-r--r--  1 root root 1503 Feb 21 21:09 passwd
drwxr-xr-x  2 root root    6 Oct 29 00:54 perl5
d
rw- 
 r-x 
r-x
2
 root
root 
Feb 21 21:09
passwd
 文件类型 拥有者权限  所属组的权限  其他人的权限  大小  这个文件拥有者  属组  最后修改的时间  文件对象

   

文件类型,可以为p、d、l、s、c、b和 –

p表示命名管道文件

d表示目录文件

l表示符号连接文件

-表示普通文件

s表示socket套接口文件,比如我们启用mysql时,会产生一个mysql.sock文件

c表示字符设备文件,例: 虚拟控制台 或tty0

b表示块设备文件   例: sda, cdrom

这里有颜色的区分文件的内型

1.3 权限说明

对于文件来说:

r:读(4)         w:写(2)        x:执行(1)

对于目录来说:

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

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

x:进入 cd cat

1.3常见几种文件权限组成

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

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

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

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

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

这中间如自己创建的文件或目录,自动成为该文件的所属主和组

1.4 更改文件的属主和属组

chown:可以用来改变文件(或目录)的属主

chgrp:可以用来改变文件(或目录)的默认属组

如果你要对目录进行操作,加参数  -R 递归权限 

chown 语法

chown user:group filename    chown hk:hk  bb  把文件的属主和属组改为hk

chown user filename       比如:chown hk   bb 把文件的属主改为hk用户

chown :group filename    比如: chown :hk  bb把文件的属组改为hk这个组

chown user: filename 比如:chown hk:  bb       #把bbt文件的属主和属组改为hk用户

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

一个文件只有读的权限,拥有者是可以写这个文件

文件所有者一定可以写文件。 就像root可以对shadow强制写。 因shadow的拥有者是root

1.5 修改权限

1.5.1 使用字符设定

修改权限用的命令: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 u-w  bb  给bb    的拥有者加一个写的权限

  chmod g+x  bb    给bb 的组加一个执行的权限

 chmod a+x    bb  给bb 所有人都加一个执行权限,一般情况在SHELL 脚本会用到

chmod a=rwx  bb  给bb 的(UGO) 的权限加成rwx

1.5.2 使用八进制(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

有全部权限

 

 

 

 

 

 

 

 

 

 

 

 

 

[root@localhost ~]# chmod 700 bb

[root@localhost ~]# ll bb
-rwx------ 1 root root 0 Feb 29 22:59 bb

1.6权限对文件和目录的影响

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

权限

对文件的影响

对目录的影响

r(读取)

可以读取文件的内容

可以列出目录的内容(文件名)

w(写入)

可以更改文件的内容

可以创建或删除目录中的任意文件

x(执行)

可以作为命令执行文件

可以访问目录的内容(取决于目录中文件的权限)

1.8 补码

创建的文件的权限是644

 

实际linux中:文件默认权限=666 ,目录默认权限=777

主要由于umask

我们一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中设置umask值。

永久生效,编辑用户的配置文件vim .bash_profile  

vim /etc/profile

UID大于199 且用户的组名和用户名一样,那么 umask值为002,否则为022.

如果需要临时生效,

umask 权限补码

umask 044

权限的算法:一般情况是:目录默认权限-umask 值 

666-022=644 

777-022=755 

这种方法可用但是不科学

权限科学的计算方法:

1、将默认权限(目录777,文件666)和umask值都转换为2进制

2、对umask取反

3、将默认权限和umask取反后的值做与运算

4、将得到的二进制值再转换8进制,即为权限,

 umask 为022 
6    6   6        umask   0   2    2
110 110 110               000 010  010    # 转成二进制 
                           111 101  101    # umask取反的值
110 110 110    与              #第二步,默认权限和umask取反后的值做与运算
111 101 101   # umask取反的值
110 100 100
6   4   4     #转成8进制

  

 umask 022

6    6   6        umask   0   2    2

110 110 110               000 010  010    #转成二进制

                           111 101  101    # umask取反的值

110 110 110                  #第二步,默认权限和umask取反后的值做与运算

111 101 101  # umask取反的值

110 100 100

6   4   4     #转成8进制

 

2 文件的特殊权限:suid sgid sticky和文件扩展权限ACL

 

其实文件与目录设置不止这些,还有所谓的特殊权限。由于特殊权限会拥有一些“特权”.

 

特殊权限:

 

2.1  文件的特殊权限:suid sgid sticky

 

1、SUID(set uid设置用户ID):限定:只能设置在二进制可执行程序上面。对目录设置无效

 

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

 

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

 

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

 

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

 

功能:在一个公共目录,每一个用户都可以创建文件,但是只能够删除属于自己文件,不能删除其他用户的文件

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

SUID

SGID

Stickybit

u+s或u=4

g+s或g=2

o+t或o=1

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

[hk@localhost root]$ ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd

举个例 子:

我们用一个用户hk,正常情况下,这个hk是不能查看到/etc/shadow这个文件,现在我们用root 给一个less 命令的权限再访问

 

[hk@localhost root]$ less /etc/shadow
/etc/shadow: Permission denied

[root@localhost ~]# chmod 4755 /usr/bin/less   等同于 chmod u+s /usr/bin/less
[root@localhost ~]# su hk
[hk@localhost root]$ less /etc/shadow
root:$1$YnDObia6$DqEc9x5iTHVHQ212Cjgde1::0:99999:7:::

[hk@localhost root]$ ll /usr/bin/less
-rwsr-xr-x. 1 root root 158240 Jul 31 2015 /usr/bin/less

SGID

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

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

 还是举例:

[root@localhost ~]# mkdir t1
[root@localhost ~]# ll -d t1
drwxr-xr-x 2 root root 6 Mar  1 09:39 t1
[root@localhost ~]# chmod g+s t1
[root@localhost ~]# ll -d t1
drwxr-sr-x 2 root root 6 Mar  1 09:39 t1
[root@localhost ~]# !ll
ll -d t1
drwxr-sr-x 2 root root 6 Mar  1 09:39 t1
[root@localhost ~]# cd t1 
[root@localhost t1]# ll
total 0
[root@localhost t1]# cd ..
[root@localhost ~]# chown :bin t1/

[root@localhost ~]# touch t1/aa.txt

[root@localhost ~]# ll t1
total 0
-rw-r--r-- 1 root bin 0 Mar  1 09:41 aa.txt

 

Stickybit

限定:只作用于目录 

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

[root@localhost tmp]# chmod o+t /tmp/test
[root@localhost tmp]# ll

drwxr-xr-t 2 root root  6 Mar  1 09:46 test

2.2 文件扩展权限ACL

 简单 的说是就给特定的用户开启或关闭一个文件目录的使用权限

 setfacl 设置权限   get 查看权限

给让hk对bbb有读写执行的权限

[root@localhost ~]# getfacl bbb
# file: bbb
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

[root@localhost ~]# setfacl -m  u:hk:rwx  /root/bbb
[root@localhost ~]# getfacl /root/bbb
getfacl: Removing leading '/' from absolute path names
# file: root/bbb
# owner: root
# group: root
user::rwx
user:hk:rwx
group::r-x
mask::rwx
other::r-x

  

 给目录加扩展权限

# mkdir /tmp/test

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

# 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:hk:rwx

  

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

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

# setfacl -x u:mk /tmp/a.txt          # 去掉单个用户的权限

# setfacl -b  /tmp/a.txt              # 去掉所有acl权限

扩展:

内核检测访问者与文件的权限过程:

没开启facl权限:owner ---> group ---> other

开启facl权限: owner ---> facl,user---> group ---> facl,group ---> other

 

posted @ 2020-02-29 23:58  科子  阅读(512)  评论(0)    收藏  举报