!Linux 文件权限详解与管理 !

1 .文件的基本权限

1.1 权限的作用

通过对文件设定权限可以达到以下三种访问限制权限:

只允许用户自己访问;

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

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

 

1.2 查看权限

[root@52nanxion 16:35:06 ~]# ll  /etc/passwd

-rw-r--r--. 1 root root 2053 9月  19 2019  /etc/passwd

文件权限基本解释:

-        rw-        r--       r--.     1 root root 2053 9月  19 2019 /etc/passwd

-

rwx

r-x

r-x

user1

user1

time

FILENAME

文件类型

拥有者的权限

所属组的权限

其他人的权限

拥有者

属组

最后修改时间

对象

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

p表示命名管道文件

d表示目录文件

l表示符号连接文件

-表示普通文件

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

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

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

1.3 权限说明

对于文件来说:

r:读

w:写

x:执行

对于目录来说:

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

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

x:进入 cd cat

1.4 文件拥有者

UGO:所有者--用户组--其它用户

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

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

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

1.5.常见几种文件权限组成

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

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

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

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

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

 

1.6 更改文件的属主和属组

 改变文件的所属关系用到命令:

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

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

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

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 :递归(目录下的所有内容都更改,否则只修改目录)

1.7 修改权限

1.7.1 使用字符设定

修改权限用的命令:chmod

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

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

对谁操作:

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

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

o---->其它用户others

a---->所有用户all

操作符:

+  #添加权限  ;  -  # 减少权限  ; =  #直接给定一个权限

例如:

          chmod u+x g-w o+r a.txt     表示给a.txt文件的拥有者增加执行,用户组减去写入,其他用户增加读取权限。

权限:r w x

例如下在的组合:

u-w

user

拥有者

g+x

group

o=r

other

其他人

a+x

all

所有人

1.7.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

有全部权限

例1:

!Linux 文件权限详解与管理 !_第1张图片

例1:

互动:rw- 的值是多少?         答: 4+2=6 

rwx  r-x  r-x 的值是多少?         答:  rwx=4+2+1=7  ;   r-x=4+1=5    即: rwx  r-x  r-x=7 5 5

语法:

chmod 755 文件或文件夹名字     (较常用)

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

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

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

权限

对文件的影响

对目录的影响

r(读取)

可以读取文件的内容

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

w(写入)

可以更改文件的内容

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

x(执行)

可以作为命令执行文件

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

1.8 补码

 为什么我们创建的文件的权限是644呢?

 我们创建文件的默认权限是怎么来的?

umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字

文件默认权限=666 ,目录默认权限=777

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

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

[root@52nanxion]# vim /etc/profile

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

注: -gt 在shell中表示大于; id -g 显示用户组ID ,id -gn显示组名。 

 

临时生效: umask 权限补码

[root@52nanxion~]# umask 044

[root@52nanxion ~]# touch ss.txt

[root@52nanxion ~]# ll ss.txt

-rw--w--w- 1 root root 0 5月   8 21:47 ss.txt

 

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

666-022=644 

777-022=755

# 这是一个好的记忆方法,但不严谨。

 

互动:umask掩码为033  创建普通文件后,权限是什么? 

互动:umask掩码为033  创建普通文件后,权限是什么?  666-033=633  ( rw- -wx  -wx) ?

例:[root@52nanxion~]# umask 033

[root@52nanxion ~]# touch k.txt

[root@52nanxion~]# ll k.txt

-rw-r--r-- 1 root root 0 5月   8 22:00 k.txt

答:结果为: 644

 

权限科学的计算方法:

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

2、对umask取反

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

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

例1: 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: umask 为033   结果为: 644

6  6  6            umask   0  3   3

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

                           111 100  100    # umask取反的值

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

111 100 100   # umask取反的值

110 100 100

6   4   4    # 转成8进制

 

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

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

特殊权限:

1.9.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

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

 

 

 

拓展:黑客常用技巧 (令文件无法修改删除)

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

        黑客使用xshell悄悄执行在后台添加attr扩展属性:(这是个小秘密哦^_^)

删除文件:

 [root@52nanxion1 ~]# rm -rf  hack.sh  #发现删除不了

为什么删除不了?

    从REHL6 开始,新增加文件系统扩展属性:

命令:chattr  

参数:  a  只能追加内容   ;  i  不能被修改

+a: 只能追加内容  如: echo aaa  >> hack.sh  

+i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。

注:immutable  [ɪˈmju:təbl]  不可改变的  ;  Append [əˈpend] 追加

解决:  -i :移除i参数。  -a :移除a参数

[root@52nanxion1 ~]# lsattr hack.sh

----i----------- hack.sh

[root@52nanxion1 ~]# chattr -i hack.sh

[root@52nanxion1 ~]# echo aa >> hack.sh

[root@52nanxion1~]# lsattr hack.sh   #查看扩展属性

---------------- hack.sh

[root@52nanxion1 ~]# chattr +a hack.sh

[root@52nanxion1 ~]# rm -rf   hack.sh

rm: 无法删除"hack.sh": 不允许的操作

[root@52nanxion1 ~]# echo aaa >> hack.sh  #可执行     

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Linux学习随笔)