Linux权限管理详解

1Linux 的基本权限:

1Linux的基本权限说明

-rw-r--r-- 1 root root 08-11 01:45 aa.txt

权限位是十位

第一位:代表文件类型

-   普通文件

d   目录文件

l   链接文件

b   块设备文件

c   字符设备文件

s   套接字

p   管道

 

其余九位

执行        执行       执行

r   w  x         r   w  x        r  w  x

4   2  1         4   2  1        4  2  1

文件所有者(u 文件所属组(g 其他用户(o

 

r4):允许查看文件内容;允许显示目录内的文件列表

w2):允许修改文件内容;允许对目录内的文件进行添加、删除、移动

执行 x1):允许文件文件执行;允许目录的切换

 

2)文件归属

所有者(属主):拥有该文件或目录的用户

所属组(属组):用户改文件或目录的组

 

3)修改文件权限的命令及用法

命令名称:chmod

命令英文原意:change the permissions mode of a file

命令所在路径:/bin/chmod

功能描述:修改文件的权限

例:

chmod u+x aa       aa文件的所有者添加x权限

chmod g+w,o+w aa   aa文件的所属组和其他人添加w权限

chmod u=rwx aa     aa文件的所有者赋予rwx权限

chmod 644 aa       修改aa文件的权限为644,对应为rw-r--r—

chmod -R 777 aa     递归修改aa目录及其子目录和文件权限为777

-R 递归修改目录下子选项的权限

说明:对文件有写权限,只代表可以修改这个文件;要想删除文件,需要对文件所在目录有写权限,只要对目录有写权限,目录中的文件,就算是 root 创建的,普通用户一样能删

除。目录一般都同时有 r-x 权限,如果一个目录只有 r 却没有 x,你能用 ls 查看,却

不能 cd 进去!  

 

4)文件或目录的所有者和所属组修改

命令名称:chown

命令英文原意:change file ownership

命令所在路径:/bin/chown

功能描述:修改文件或目录的所有者、所属组

例:

chown user1 aa        aa文件的所有者修改为user1用户

chown user1:user1 aa   aa文件的所有者修改为user1用户并且所属组修改为user1

chown :user1 aa       aa文件的所属组修改为user1

chown -R  [属主:属组目录   递归修改目录和文件的所有者和所属组

 

 

命令名称:chgrp

命令英文原意:change file group ownership

命令所在路径:/bin/chgrp

功能描述:改变文件或目录的所属组

语法:chgrp 用户组文件或目录

例:chgrp adm file1     改变文件file1的所属组为adm

 

 

命令名称:umask

功能描述:显示和设置默认掩码值

777

-022

--------------

755

就是创建文件的默认权限

总结:Linux的安全机制,不给新建文件x权限。

 

2ACL 权限

1ACL权限的介绍

Linux基本的权限控制仅可以对所属用户、所属组、其他用户进行的权限控制,而不能精确地控制每个用户的权限。ACL规则就是用来解决这个问题的。使用ACL规则,我们可以针对单一账户设置文件及目录的访问权限。在centos7xfs文件系统中默认开启了ACL权限

2ACL 权限的使用

格式:setfacl  [选项] {-m|-x} {u:username:rwx} 文件或目录

选项:

-m :添加 ACL 权限

-x :删除某项 ACL 权限

-b :清空所有 ACL 权限

-R :实现目录上 ACL 权限的递归

:设置默认 ACL 权限

 

1:添加 ACL 权限

setfacl –m u:u1:rwx a.txt      添加 u1 用户对 a.txt 文件的 rwx 权限

 

2:删除某项 ACL 权限

setfacl -x u:u1 a.txt      删除 u1 用户在 a.txt 文件上的 ACL 权限

 

3:清空所有 ACL 权限

setfacl -b a.txt      清空在 a.txt 文件上的所有 ACL 权限

 

4:实现目录上 ACL 权限的递归(目录)

setfacl -R –m u:u2:rwx aa      添加 u1 用户对 aa 目录以及目录内子选项的 rwx 权限

 

5:设置默认 ACL 权限(目录)

空目录:

setfacl -m d:u:u3:rwx bb

添加 u3 用户对目录 bb rwx 权限,并且在 bb 目录里新建的文件 u3用户都有 rwx 权限

非空目录:

setfacl –m d:u:u3:rwx bb

setfacl -R –m u:u3:rwx  bb

第一条设置默认权限,第二条递归设置 ACL 权限

 

注:前五个例子使用的 u 均可换成 g,然后实现特殊组对文件的 ACL 权限

 

6:设置最大有效权限 mask(目录)

setfacl -m m:rx cc    cc 目录添加默认最大权限为 rx,其他 ACL 权限不得超出此权限

 

 

3sudo 授权

1sudo授权的介绍

在企业实践中,不是每一个系统管理员都能用 root 来管理服务器,所以需要给普通用户赋予一部分超级管理员权限。然后普通用户在使用超级管理员的命令时前面加上sudo 命令就可以正常使用超级管理员的命令了。/sbin/usr/sbin里面的命令只有超级管理员才能执行,这个时候,就需要root来使用sudo授权普通用户使用部分超级用户才能使用的命令了。

 

2sudo授权的系统验证步骤

1. 当普通用户执行/sbin /usr/sbin 下的命令时,系统会查询/etc/sudoers 文件中是否有 root 给的授权

2. 当查询普通用户已拥有授权后,需要输入普通用户的密码来确认用户身份

3. 若密码输入成功后,则执行对应已经授权的命令

 

3sudo授权的方法

给普通用户授权使用超级用户命令方法一般是使用visudo命令来打开/etc/sudoers这个配置文件来给普通用户授权,普通用户使用这些被授权的超级用户命令时,只需在命令的前面添加上sudo加空格即可执行这些授权的超级用户命令。

 

注意:/etc/sudoers 文件内有固定语法结构,使用其它文档编辑器可能会造成配置文件出现错误,所以必须使用 visudo 命令打开该配置文件

 

## Allow root to run any commands anywhere

root    ALL=(ALL)       ALL

a1      192.168.115.0/24=(ALL)     ALL

 

上面的元素介绍:

roota1系统的哪个用户能使用 sudo 命令,即被授权者。也可以是组,组要在前面加%表示

 

ALL或某个网段:可以被管理的服务器的网络地址,写自己或 ALL 代表任何来源地址都可以管理本台服务器,192.168.115.0/24代表这个网段的服务器可以执行sudo授权的命令。

 

(ALL)或某个权限较大的用户:是以谁的身份来执行,ALL:ALL 就代表 root 可以任何人的身份来执行命令。

 

ALL或命令的绝对路径:可以使用什么命令,多条命令用逗号隔开(必须写绝对路径)

 

1:给 admin 用户赋予 root 所有命令权限

admin ALL=ALL ALL

 

2:授权 zhangsan 用户可以重启服务器

zhangsan ALL=root /sbin/shutdown -r now

 

3:授权 web 用户可以管理 IP192.168.110.39 web 服务器

NO.1:可以使用 Apache 管理脚本

web  192.168.110.39=root /etc/rc.d/init.d/httpd reload/etc/rc.d/init.d/httpd configtest

reload 重新加载配置文件使之生效;configtest 检查配置文件是否有语法错误。

 

NO.2:可以修改 Apache 的配置文件

web  192.168.110.39=(root)  /bin/vi  /etc/httpd/conf/httpd.conf

sudo 不仅仅能授权超级管理员的命令,还能授权普通命令以及详细选项和参数。

 

NO.3:可以更新网页文件

设置合理权限即可(w),可以通过给/var/www/html目录设置ACL权限,让 web 用户对/var/www/html 有写权限即可。

 

4:授权 add 用户可添加普通用户

add  ALL=/usr/sbin/useradd         add 用户可以添加普通用户

add  ALL=/usr/bin/passwd [A-Za-z]* !/usr/bin/passwd“”,!/usr/bin/passwd root

add 用户可以给新添加用户修改密码,不允许修改 root 用户的密码

 

 

4、文件特殊权限

1SetUID 权限

1、当一个具有执行权限的文件设置 SetUID 权限后,用户执行这个文件时将以文件所有者的身份执行

特点:

 

2、只有可以执行的二进制程序才能设定 SUID 权限

 

3、命令执行者要对该程序拥有 x(执行)权限

 

4、命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)

 

5SetUID 权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

 

例:普通用户使用/usr/bin/passwd命令修改自己的密码

普通用户使用/usr/bin/passwd 的那一瞬间临时调用了 root 的身份,进行对/etc/passwd /etc/shadow 进行了修改,当信息修改完成后,立即释放 root 身份变回了自己普通用户的身份。

 

注意:如果取消了/usr/bin/passwd SetUID 权限,则普通用户无法修改密码

 

危险的 SetUID:如果给/usr/bin/vim这个命令设置 SetUID 权限后,普通用户即可使用/usr/bin/vim命令来修改/etc/passwd等系统文件,使普通用户成为超级用户。

 

2 SetGID 权限(文件和目录)

1、针对文件的作用:

1)只有可执行的二进制程序才能设置 SGID 权限

2)命令执行者要对该程序拥有 x(执行)权限

3)命令执行在执行程序的时候,组身份升级为该程序文件的属组

4SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效

 

2、针对目录的作用:

1)普通用户必须对此目录拥有 r x 权限,才能进入此目录

2)普通用户在此目录中的有效组会变成此目录的属组

3)普通用户对此目录拥有 w 权限时,新建的文件的默认属组是这个目录的属组

 

例:创建long目录,并给long目录SetGID权限,让普通用户有写权限。

[root@localhost ~]# mkdir /long            

[root@localhost ~]# chmod g+s /long/

[root@localhost ~]# chmod 777 /long/

[root@localhost ~]# ls -ld /long/

drwxrwsrwx 2 root root 6 11 29 15:56 /long/

[root@localhost ~]# su - a1     切换到普通用户a1

[a1@localhost ~]$ cd /long/    让普通用户进入/long目录创建文件

[a1@localhost long]$ touch 1.txt

[a1@localhost long]$ ls -l

总用量 0

-rw-rw-r-- 1 a1 root 0 11 29 16:04 1.txt

最后发现普通用户创建的1.txt文件的所属组不是a1,而是 root

 

3Sticky BIT 权限

Sticky BIT 粘着位,也简称为 SBITSBIT 目前仅针对目录有效,它的作用如下:

1、粘着位目前只对目录有效,普通用户对该目录拥有 w x 权限,即普通用户可以在此目录拥有写入权限

 

2、如果没有粘着位,因为普通用户拥有 w 权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了 root 可以删除所有文件,普通用户就算拥有 w 权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件。

 

5、总结SetUID 权限,SetGID 权限,Sticky BIT 权限的设置

1)各种特殊权限所对应的权限数值

权限名称

对应的权限数值

SetUID

4

SetGID

2

Sticky   BIT

1

读(r

4

写(w

2

执行(x

1

注意:权限值由4位数字组成,从左往右第一位是特殊权限值,第二位是文件或目录所有者的权限值,第三位是文件或目录的所属组的权限值,第四位是文件或目录其他人的权限值。

 

2SetUID 权限,SetGID 权限,Sticky BIT 权限的设置

上面知道了这些特殊权限所对应的权限值,那么我们就可以使用chmod来进行设置。

1:给文件/long/1.txt设置SetUID权限

方法1

[root@localhost long]# chmod u+s 1.txt    设置SetUID权限

[root@localhost long]# ls -l

总用量 0

-rwSrw-r-- 1 a1 root 0 11 29 16:04 1.txt

[root@localhost long]# chmod u-s 1.txt    取消SetUID 权限

[root@localhost long]# ls -l

总用量 0

-rw-rw-r-- 1 a1 root 0 11 29 16:04 1.txt

 

方法2

[root@localhost long]# chmod 4755 1.txt   使用权限值设置SetUID权限

[root@localhost long]# ls -l

总用量 0

-rwsr-xr-x 1 a1 root 0 11 29 16:04 1.txt

[root@localhost long]# touch 2.txt

[root@localhost long]# chmod 755 1.txt     使用权限值取消SetUID权限

[root@localhost long]# ls -l

总用量 0

-rwxr-xr-x 1 a1   root 0 11 29 16:04 1.txt

 

 

2:给/long/2.txt设置SetGID 权限。

方法1

[root@localhost long]# chmod g+s 2.txt    设置SetGID 权限

 [root@localhost long]# ls -l

总用量 0

-rw-r-Sr-- 1 root root 0 12  1 16:27 2.txt

[root@localhost long]# chmod g-s 2.txt     取消SetGID 权限

[root@localhost long]# ls -l

总用量 0

-rw-r--r-- 1 root root 0 12  1 16:27 2.txt

 

方法2

[root@localhost long]# chmod 2744 2.txt     使用权限值设置SetGID 权限

[root@localhost long]# ls -l

总用量 0

-rwxr-Sr-- 1 root root 0 12  1 16:27 2.txt

[root@localhost long]# chmod 744 2.txt      使用权限值取消SetGID 权限

[root@localhost long]# ls -l

总用量 0

-rwxr--r-- 1 root root 0 12  1 16:27 2.txt

 

3:给/long目录设置Sticky BIT 权限

方法1

[root@localhost long]# chmod o+t /long/      设置Sticky BIT 权限

[root@localhost long]# ls -ld /long/

drwxr-xr-t 2 root root 19 12  1 16:35 /long/

[root@localhost long]# chmod o-t /long/       取消Sticky BIT 权限

[root@localhost long]# ls -ld /long/

drwxr-xr-x 2 root root 19 12  1 16:35 /long/

 

方法2

[root@localhost long]# chmod 1755 /long/       使用权限值设置Sticky BIT 权限

[root@localhost long]# ls -ld /long/

drwxr-xr-t 2 root root 19 12  1 16:35 /long/

[root@localhost long]# chmod 755 /long/       使用权限值取消Sticky BIT 权限

[root@localhost long]# ls -ld /long/

drwxr-xr-x 2 root root 19 12  1 16:35 /long/

 

 

6、文件系统属性设置(chattr可以限制root

格式:chattr [+-=] [选项] 文件或目录

选项:

i:如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能

添加和修改数据;如果对目录设置 i 属性,那么只能修改目录下文件的

数据,但不允许建立和删除文件

 

a:如果对文件设置 a 属性,那么只能在文件中增加数据,但是不能删

除也不能修改数据;如果对目录设置 a 属性,那么只允许在目录中建立

和修改文件,但是不允许删除

 

eLinux 中绝大多数的文件都默认拥有 e 属性。表示该文件是使用 ext

件系统进行存储的,而且不能使用“chattr -e”命令取消 e 属性

查看文件系统属性

格式:lsattr  选项  文件名

选项:

-a 显示所有文件和目录

-d 若目标是目录,仅列出目录本身属性