感谢支持
我们一直在努力

Linux基础教程:Linux权限管理

权限管理是Linux中一个十分重要的概念,也是系统安全性的重要保障。

一、基本权限

用户对文件拥有所有者,所属组和其他人三个身份,每个身份都有读写执行三个权限。

wKioL1fRRnWA-kEJAAAv59NmBXk327.png

-rw-r–r–:第一个“-“位置是代表文件类型的。

 

文件权限前的第一个字母用来标识文件类型:

:一般文件

d:目录文件

b:块设备文件

c:字符设备文件

l:链接文件

p:人工管道

常见的为dI

rw-  r–  r– :文件权限

u    g   o

u所有者,g所属组,o其他人

rwx执行 -不具有权限

8进制数值表示方法

  r:4          

  w:2      

  x: 1 

如:-rw- r– r–的意思就是这个文件的类型是一般文件,文件本身所在的用户可读可写不可执行,所在的组可读,不可写不可执行,其他用户可读,不可写不可执行。

权限管理命令

chmod  改变文件或目录权限

英语原意:change the permissions mode of a file

语法:1chmodugoa】【+-=】【rwx】【文件或目录】

执行权限:文件所有者和root用户

wKioL1fRR0WysK_fAAAenq4u69U054.png

2、权限的数字表示

chmod 【421】【文件或目录】

 r——4

 w——2

 x——1

wKioL1fRR1zRDh1aAAARomiwKPM862.png

chown  更该文件或目录的所有者

英语原意:chamge file ownership

执行权限:root

语法:chown 【用户】【文件或目录】

wKiom1fRR42jscvQAAAhFQxb7EU869.png

chgrp  改变文件或目录的所属组

英语原意:change file froup ownnership

执行权限:root

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

wKioL1fRR6nSfzJ2AAAc5SEuLjo398.png

二、默认权限

umask  显示、设置文件的缺省权限

英语原意:the user file-creation mask

语法:umask【选项】

执行权限:root

-S 以rwx形式显示新建文件缺省权限

wKiom1fRSACCCDftAAAk2TBvtwI828.png

看到目录默认的权限和umask -S的权限一致,touch的权限每位比umask -S显示的权限少一个x权限,在linux会把任何一个新建的文件的可执行权限去掉(基于安全性考虑),所以也是和umask -S的权限是一样的

直接输入umask,得到0022,第一个0是特殊权限,后三位代表正常权限,表示拥有者,所属组,其他用户,但其实真正的权限是777-022=755,所以是rwxr-xr-x

wKioL1fRSCHSHL1OAAAHaLZT9wo146.png

设置默认权限为754,应由777-754=023

umask 023,但不建议更改,默认的权限是比较合理的

wKiom1fRSDqTUt2PAAAao0loDFc324.png

三、ACL权限

有时候,所有者,所属组,其他人三个身份的权限是770,假如想要某一个用户的身份为5,那么这些身份权限就满足不了要求了,就要使用到ACL权限了。

ACL权限

需要文件所在的分区支持ACL权限

查看分区ACL权限是否开启

 dumpe2fs -h /dev/sda3

dumpe2fs命令是查询指定分区详细文件系统信息额命令

  -h 仅显示超级块中信息,而不显示磁盘块组的详细信息

df 查看分区使用状况,查看到//dev/sda3

wKioL1fRSHiROfxtAABHzBv6I-M215.png

默认挂载选项,支持ACL,默认都开启了ACL

wKiom1fRSJGCQVmsAAC9sBkgwbI758.png

若没有开启

临时开启分区ACL权限

mount -o remount,acl/  重新挂载跟分区,并挂载加入acl权限

永久开启分区ACL权限

vim /etc/fstab   是系统开机自动挂载文件

 

 

wKiom1fRSK3htocWAADgloFUrsw946.png

在defaults后加,acl,重启系统或重新挂载文件系统就可以了,当然,在默认的情况下,本身就支持acl的。

查看与设定acl权限

getacle 文件名        查看acl权限

setfacl  【选项】 文件名  设定ACL权限

-m    设定ACL权限  

-x     删除指定的ACL权限

-b     删除所有的ACL权限

-d     设定默认ACL权限

-k     删除默认ACL权限

-R     递归设定ACL权限

setfacl -m u:test:rx //root/wt/   u/g

为给用户/组分配acltest为用户名,rx为写执行权限,/root/wt为文件名)

wKiom1fRSM3xBNQBAABH6DPiXxY200.png

可以看到,权限后面多了个+号,然后使用getfacl查看acl权限,可以看到usertestr-x

最大有效ACL权限与删除ACL权限

wKioL1fRSOiiCB4kAAAwQdTY1SA766.png

mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限。

相与就是逻辑运算两个都为真才为真,如user的读r权限和mask的读r权限相与为读权限,若其中任何一个为权限,则结果就为权限。

上面用setfacl -m u来指定用户,用m来指定mask的权限

wKiom1fRSQKBxnVzAAB4q4jMxXQ181.png

当然,mask设置成了rwx权限,任何权限与他相与,都是本身,所以默认的mask权限是合理的。

删除ACL权限

setfacl -x u:用户名  文件名     删除指定用户的ACL权限

setfacl -b 文件名  删除文件的所有的ACL权限

wKiom1fRSSjiSm9uAAB7zwkUn9s612.png

默认ACL权限和递归ACL权限

递归ACL权限:递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限。之前所说的命令,也有递归的概念,比如mkdirrm的时候。

setfacl -m u:用户名:权限 -R文件名

wKioL1fRSUaRooKVAABEQX92iNw508.png

但是新建的文件不是拥有ACL权限。

默认ACL权限

默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限。

setfacl -m d:u:用户名:权限 文件名

wKioL1fRSXjAwAiJAABCc_1JmfA823.png

更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2016-09/135076p2.htm

四、文件特殊权限

SetUID

setGID

Sticky BIT

 

 

SetUID

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

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

命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中成为文件的所有者的身份)

setUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效,一旦程序终止,身份就会消失

passwd命令拥有setUID权限,所以普通用户可以修改自己的密码,setuid是文件的所有者拥有s权限,setgit是文件所属组拥有s权限,Sticky BIT是其他人拥有s权限。

wKiom1fRSaOC0IbNAADWi6sgs7w384.png

很明显的看到passwd的文件拥有者有s权限,也就是有setUID权限,之前也看过/etc/shadow的文件的权限是000,所以cat无法查看,但是passwd命令拥有s权限,执行此命令的身份变成身份的所有者root用户,所以无法查看却可以往里面写入数据了。

设定setUID的方法

chmod 4755文件名  (命令执行者要对该程序拥有x权限,若没有执行权限,系统会用大写的S进行报错,755是文件本身的权限,开头的4代表SUID2表示GUID1表示SBIT7表示拥有SUID,SGID,SBIT

chmod u+s 文件名


wKioL1fRSb3SMDjrAADsslV9WsU591.png

先切换到普通用户,无法查看/etc/shadow,回到root身份,设定setUID后,再切换到普通用户,可以查看/etc/shadow了。

取消setUID权限

chmod 755 文件名

chmod u-s 文件名

危险的SetUID

关键目录应严格控制写权限,比如/  /usr等。

用户的密码设置要严格遵守密码三原则

对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限

系统默认有些拥有SUID的权限,没有特殊情况,不允许设置SUID权限

 SetGID

SetGID针对文件的作用

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

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

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

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

wKiom1fRSdfhnOigAAAwEKW9Z-M265.png

我们在使用locate查询的时候,实际上在查找mlocate.db库,但是库的权限对于其他人的权限的0,我们怎么有看的权限?再看locate的权限,/usr/bin/locate是可执行二进制程序,可以赋予SGID权限,我们在使用locate的时候,已经变成了所属组了,slocate组对库有r权限。所以普通用户可以使用locate命令查看mlocate.db数据库,命令结束,返回为普通身份。

SetGID除了可以针对文件,还可以针对目录,SUID是没有这个特征的。

SetGID针对目录的作用

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

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

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

设定SetUID

chmod 2755 文件名

chmod g+s  文件名

取消SGID

chmod 755 文件名

chmod g-s 文件名

wKiom1fRSfLzwY2JAABnj5VhaYk778.png

可以看到user1新建的文件的所属组是user1,但是在tmp/test下新建的所属组就是root组了,这就是SGID针对目录的作用。

Sticky BIT

SBIT粘着位作用

粘着位目前只针对目录有效

普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限。

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

wKioL1fRSg-iLmvMAACnOrGqNuU615.png

tmp默认的权限是1777,先将权限改为777,新建文件,切换到其他用户可以删除,改回默认权限1777设置SBIT,没有删除权限了。

设置粘着位

chmod 1755 目录名

chmod o+t 目录名

取消粘着位

chmod 755 目录

chmod o-t 目录名

五、文件系统属性chattr权限

chattr命令格式

chattr【+-=】【选项】文件或目录名

+:增加权限

-:删除权限

=:等于某权限

选项:

i:文件设置看i属性,不允许对文件进行删除、改名,也不能添加和修改数据;目录设置了i属性,那么只能修改目录下文件的数据,但允许建立和删除文件。

a:文件设置a属性,那么只能在文件中增加数据,但是不能删除和修改数据,目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许修改。

查看文件系统属性

lsatter 【选项】 文件名

-a 显示所欲文件和目录

-d 若目标是目录,仅列出目录本身的属性,而不是子文件的

wKioL1fRSiqT6vOBAAA-dnecnVA502.png

新建文件test,查看属性为644,用chattr +itesti属性,需要注意的是ls命令无法查看文件系统属性,使用lsatr 查看文件系统属性,多了i属性,e属性代表这个文件是在ext文件系统创建的。然后再继续写入数据,提示权限不足,也无法删除,细心的同学应该看到了我使用的还是root用户,所以这个权限对root用户也生效,当然使用chattr -r test删除i属性,就可以实现以上操作了。

wKiom1fRSkDBfJ5SAAA1TK-9V3A470.png

对目录设置了i属性,可以看到目录有i属性,但是目录下的文件没有i属性,我们可以修改目录下文件的数据,但是没有权限新建和删除文件。

wKiom1fRSlaQ3HqhAAAu-kMOdRg843.png

新建文件,添加a属性,我们可以添加文件,但是无法修改和删除数据,需要注意的是“>”无法添加,“>”是覆盖追加,也等于把以前的数据删了。

wKioL1fRSmrzQ87BAAAkDEkH314109.png

对目录设置了a权限,只能在目录中建立和修改文件,修改文件指修改文件中的数据,而不是修改文件名,但是不能删除。

chattr不是为了限制文件权限,而是为了防止root在内的误操作的保险措施。

六、系统命令权限sudo权限

sudo 权限

root把本来只能超级用户执行的命令赋予普通用户执行。

sudo 的操作对象是系统命令。

visudo 实际上修改的是/etc/sudoers文件

wKiom1fRSoSylX5fAAAQK5V3-_M591.png

user1     ALL        =         (ALL)             ALL

用户名  被管理主机的地址     可使用的身份     授权命令(绝对路径)

user1     ALL        =         (ALL)             ALL

%组名  被管理主机的地址     可使用的身份     授权命令(绝对路径)

第一个ALL是被管理额主机地址是linux的地址,不是外部访问的地址命令越简单,第三个ALL是授权的命令,可以写ALL,但是这个太过于危险,就相当于root身份了,权限太大,如果具体到某个参数,则限制的权限非常的小。建议写绝对路径并具体到某一个参数。

wKiom1fRSqCSnQrIAACnK2sCpRc862.png

切换到user1用户我们可以用sudo -l查看已被root授权的用户,可以看到我们在上面授权的/usr/bin/vim命令。

wKiom1fRSrnz8gVpAACWVyatrE0384.png

在使用被授权的命令之前,需加sudo + 命令的绝对路径 

wKioL1fRSs6SR5edAAAQXU8ZnBk787.png

可以看到普通用户可以修改etc/passwd文件了,这个危害有多大就不用多说了。

wKioL1fRSvXxCUcBAAFs6aU0SIw642.png

Linux的权限基本都说完了,由于水平有限,文中若有错误,多多包涵,同时欢迎一起交流。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-09/135076.htm

赞(0) 打赏
转载请注明出处:服务器评测 » Linux基础教程:Linux权限管理
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏