用户的权限管理

发布时间:2020-06-28 14:48:05 作者:TWJDavid
来源:网络 阅读:196

兄弟们,我又回来了,几天不写博客真是浑身难受呢(当然是骗人的。。。)但本周学的内容还蛮多的,感觉不整理一下又得白学了。还有本周学了听着很高大上的脚本,虽然感觉蛮难的吧,但是听老师的口气貌似和之前一些基本命令的用法有着很大的关系,命令学的好不好直接决定你脚本编的好不好,第一感觉脚本就跟C++里面的函数是一个东西,就是把很多命令集中成一个文件,让计算机集中去处理,完成某一特定功能,感觉好像走远了,先从用户的权限管理说起吧。


用户的权限管理主要分为一下两点:

普通权限:

特殊权限:

跟其相关的还有一个叫做FACL的东西这个后面再讨论


首先我们先明确一下为什么用户的权限要分为普通和特殊权限?

因为每一个用户使用计算机的过程中,必然存在对有限计算机资源使用的限制性,那么操作系统就必须提供一种途径来保证每个用户独立、合理的使用计算机。

解决完这个问题后我们来浅析一下用户的权限管理



首先用户的普通权限:

说到用户的普通权限我们又不得不说到上周提到过的安全上下文


进程安全上下文:

1.判断进程的所有者是否为想要操作的文件的所有者,如果是,就按照属主的权限进行授权,如果不是,就转到第二条

2.在判断进程的所有者是否为想要操作的文件的属组中的成员,如果是,就按照属组的权限进行授权,如果不是就转到第三条

3.按照文件其他用户权限进行授权


对于用户的授权一般按照以上顺序进行,下面我们来说说用户权限的构成

用户的权限分为使用权(MODE0)和所有权(OWNERSHIP)


MODE(Permission):使用权

r:Readable,可读

w:Writable,可写

x:Executable,可执行


我们分几个方面对用户的使用权进行理解一下,首先是对于目录而言:

r:可以使用ls命令获得其中所有的文件名的列表:ls -l命令来获取目录文件中的详细的属性信息,不能使用cd命令进入其中,也不能在路径中引用该目录


w:可以修改此目录下的文件名或文件名列表,即:可以在此目录中创建、修改或删除文件名


x:可以使用ls-l命令来获取其中的文件的详细属性信息,也可以在路径中引用该目录,也可以使用cd命令进入其中

注意:x权限是最基本权限,任何目录都必须对任何用户开放x权限


为什么说对于目录而言,必须给任何用户开放x权限呢,对于目录文件来说,我们在进行命令操作的时候,经常要通过引用文件的目录去指引计算机找到这个文件,如果不给予计算机这个权限的话,这会对我们用户管理计算机带来极大的不便


在一个就是对于文件而言:

文件:

r:可以查看或获取文件中存放的数据

w:可以修改文件中存放的数据

x:可以将此文件发起运行为进程


前两个选项不难理解,基本上和目录一样,对于x权限,我们认为,一旦文件对我们用户开放了这个权限,我们就可以将其发起为一个进程去执行,而不是简单地打开去读取它或者修改它。


对于权限在计算机中的表示我们使用以下几种表示方式


例:rw-r--r--:三个权限位-属主、属组、其他用户

属主权限:rw-

属组权限:r--

其他用户权限:r--

显而易见,属主对于其有可读和可写的权限,而属组对于其只有刻度的权限,其他用户和属组一样,只对其有可读的权限


除此之外我们还可以用三元组的方式表示权限

---  000  0

--x  001  1

-w-  010  2

-wx  011  3

r--  100  4

r-x  101  5

rw-  110  6

rwx  111  7

例:rw-r--r--

    110100100

    644


 权限既然存在,我们就必然可以修改它,但是我们为了计算机安全考虑,必须对于权限修改作出严格规定,我们规定只有某个文件的属主才能修改文件的使用权,root除外。


修改文件的使用权限:

chmod --> change mod

chmod - change file mode bits

一共有以下三种方式:

 1.chmod [OPTION]... MODE[,MODE]... FILE...

 MODE:符号权限标识符

 u,g,o,a标识所有权

 +,-,=标识授权方式


 +:在原有的权限基础上加上某些权限

 -:在原有的权限基础上减去某些权限

 =:不考虑原有权限,直接将权限设置为目标权限


 r,w,x表示具体权限内容:

 例:

 chmod u+w file

 chmod g+rw file

 chmod u+x,g-wx,o-x file

 chmod u=rw,g=r,o=r file

 chmod ug-x file

 chmod +x file 默认的为a添加执行权限

 chmod +w file 默认的只为属主添加写权限


 注意:文件的执行权限:Linux的文件系统来说,非常重要的安全标识,一旦文件具备了执行权限,就意味着该文件可以被发起执行为进程,所以默认情况下文件都不具备执行权限


 2.chmod [OPTION]... OCTAL-MODE FILE...

 如果使用八进制数字标识法的话,则每次必须给足所有的权限位,如果给的权限位不完整,文件系统会自动补足,将给定的权限放置在右侧,左侧使用0来补

 chmod 640 file


 3.chmod [OPTION]... --reference=RFILE FILE...

 chmod --reference=/PATH/TO/SOMEFILE DES_FILE

 chmod --reference=a b


 这是linux中给出的几种修改文件权限的方式,大家根据具体情况灵活使用


选项:

-R:--Recursive:将目录中的文件及子目录和子目录中的文件统一的设置为指定的权限标识



说完了使用权,再说说所有权:

OWNERSHIP:所有权

属主:资源掌控的某个特定用户:owner(user),u

属组:是资源掌控的某些特定用户:group,g

其他用户:未曾掌控资源的那些用户:other,o

全部用户:all,a


对于文件的属主和属组我们也可以进行修改,主要用到chown和chgrp命令:

chown:可以修改文件属主和属组

chown - change file owner and group

       chown [OPTION]... [OWNER][:[GROUP]] FILE...

       chown OWNER FILE

       chown :GROUP FILE

       chown OWNER:FILE //将目标文件的属主改为OWNER,同时将属组改为OWNER的基本组

       chown OWNER:GROUP FILE //将目标文件的属主和属组改为OWNER和GROUP


       chown [OPTION]... --reference=RFILE FILE...


-R:--Recursive:将目录中的文件及子目录和子目录中的文件统一的设置为指定的所有权root


注意修改OWNERSHIP操作只有超级用户(root)可以完成


chgrp:只能修改文件的属组

chgrp - change group ownership

chgrp [OPTION]... GROUP FILE...

       chgrp [OPTION]... --reference=RFILE FILE...


一般我们用chown就可以满足用户对于文件属主和属组的修改,对于chgrp我们也可以记住。


下面我们再来说几个命令


1.install命令:

install - copy files and set attributes

安装:复制文件:

常用选项:

-m:指定目标文件的权限,默认为755   

-o, --owner=OWNER:设定目标文件的属主:只能是root可用

-g, --group=GROUP:设定目标文件的属组:只能是root可用


注意:install命令不能复制目录,即其源不能为目录,如果其源为目录,则install经历了会进入目录,依次复制其中的所有非目录文件到目标位置


我们用install命令可以在复制文件的过程中,对其使用权和所有权进行修改,比如说在复制过程中给文件加上了执行权限,那么复制完之后的文件就可以被发起为进程


mktemp命令:

一般来讲,临时文件都会创建在/tmp或/var/tmp目录中,无需手动删除,系统会定期删除这两个目录中的文件


选项:

-d, --directory:可以创建临时目录


例:

mktemp [-d] /PATH/TO/TMP.XXXXXXXXXXXX


这个命令方便我们创建临时目录,而且不用自己手动对其进行删除操作,计算机会定期清理



说完了普通权限,我们再说一下特殊权限,特殊权限主要就是SUID、SGID、STICKY

默认情况下,用户发起执行一个进程,该进程的发起者是其属主,也就是说,该进程是以其发起者的身份在运行

SUID:

功能作用:用户发起一个进程时,该程序文件如果拥有SUID权限的话,则此程序发起的进程其属主为该程序文件的属主,而不是其发起者,这句话的意思就是我们不管是哪个用户发起的这个进程,只要这个文件具有SUID权限的话,我们都认为其所有者是这个文件的属主,而不是发起这个进程的用户


SUID权限显示的位置:文件的属主权限中的执行权限位,如果属主本来就有执行权限则显示为s,否则显示为S


管理文件的SUID权限:

chmod u+|-s FILE


SGID:

如果某个目录的对于一些用户有写权限并且设置了SGID权限,则所有对此目录有写权限的用户在创建新的文件或目录以后,新文件的属组不再是创建用户的基本组,而是继承了该目录的属组


SGID显示位置:文件的属组权限中的执行权限位:如果属组本来有执行权限,显示为s,否则显示为S


管理文件的SGID权限:

chmod g+|- s FILE


SICKY:sticky(粘性的):粘滞位

如果某个目录中,有超过一个用户可以有写权限,则这多个用户都可以在该目录中随意创建、修改和删除文件名


STICKY的功能作用:

如果为上述的类似目录设置了STICKY权限,则每个用户仍旧能够创建和修改文件名,但每个用户只能删除那些属主为其自身的文件名


STICKY权限的显示位置:在文件权限的其他用户的执行权限位,如果原来就有执行权限的话显示为t,否则显示为T


管理文件的STICKY权限:

chmod o+|- t FILE...


suid sgid sticky

---  000    0

--t  001    1

-s-  010    2

-st  011    3

s--  100    4

s-t  101    5

ss-  110    6

sst  111    7

特殊权限另一种修改方式:

将特殊权限对应的八进制数字放置于普通权限八进制数字的前面即可

例:想要给某个目录加上粘滞位

chmod 1755 DIRECTORY


粘滞位的存在主要是对root用户提供限制,防止root用户由于失误对计算机做出不可挽回的损失。


下面我们再了解一下权限遮罩码的概念,我们知道我们在创建文件的时候,计算机会默认的给文件授权,那么计算机是根据什么标准给文件授权的呢,我们就得说到权限遮罩码的概念了。


root:0022

不考虑特殊权限位

对于新创建的文件或目录,不遮挡属主的任何权限,遮住了数组的写权限和其他用户的写权限

理解遮罩码的方法:将遮罩码的值变为二进制,凡是有1的位置,其权限在创建文件是就不设置


0033:000011011 ---110100100 644

               ---111100100 744

默认情况下,文件的遮罩码已经有了一个0111,在此基础上再次应用umask来遮罩权限


文件还有一些比较特殊的属性:

查看文件的特殊属性:

lsattr - list file attributes on a Linux second extended file system

lsattr [ -RVadv ] [ files...  ]


修改设置文件的特殊属性:

chattr - change file attributes on a Linux file system

chattr [ -RVf ] [ -v version ] [ mode ] files...

mode:会使用+-=的方式来设置

整个chattr命令最关键最核心的设置就是mode部分:

[aAcCdDeijsStTu]都是所需要的属性


+:在原有属性设定的基础上添加新属性

-:从原有属性设定中移除指定的属性

=:不考虑原有的属性设置,直接将文件的属性更新为指定的属性内容


a:append 设置这个属性的文件其内容不能被更改和删除,只能以追加的方式向文件中写数据,多数的服务器日志类文件会设置为此属性

A:atime,文件的访问时间戳,IO瓶颈:设置A属性可以使得文件在被访问时不更改文件的访问时间戳,从而可以有效地防止IO瓶颈事件的发生

c:设置文是否自动压缩后再行存储

C:设置文件是否开启“写时复制”属性

d:设置文件在使用dump进行备份的时候,不会成为备份目标

D:设置文件在文件系统中的异步写操作

i:设置文件不能被删除、修改、设定链接关系

s:设置文件的保密性删除,一旦设置s属性的文件被删除,其对应存储设备中的使用空间会被一并收回

u:跟s属性相反,如果这样的文件被删除,则其存储于设备中的数据被留存


最常用的属性其实就是i和a


常用选项:

-R:递归的去设置指定目录中的所有文件和子目录中的文件


除了以上所讲的管理用户的权限方法之外,计算机还提供给我们另一种管理文件权限的方法

为文件赋予额外的权限的机制:FACL:File Access Control List,文件访问控制列表

文件的额外赋权机制:

在原有的u,g,o权限位之外,让普通用户能够控制权限赋予另外的用户和组的一种赋权机制


一般推荐为在centos或RHEL7版本以后的发行版中,才逐渐成熟;

与FACL有关的命令:

getfacl:getfacl - get file access control lists

getfacl [-aceEsRLPtpndvh] file ...

user:USERNAME:MODE

group:GROUPNAME:MODE



setfacl:setfacl - set file access control lists

setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...


acl_spec: acl specification,指定的访问控制列表

u:USERNAME:MODE

g:GROUPNAME:MODE

MODE:一般使用符号权限标识法


为用户赋予额外权限:

setfacl -m u:USERNAME:MODE FILE...


为组赋予额外权限:

setfacl -m g:USERNAME:MODE FILE...


撤销为用户赋予额外权限:

setfacl -x u:USERNAME


撤销为组赋予额外权限:

setfacl -x g:USERNAME


注意:如果设置了FACL之后再修改目标文件的使用权限,那么FACL中设置的条目就可能收到影响而导致与要求不符,因此,如果真的需要设置FACL,就要在已经确定目标文件的使用权限以后再进行设置


以上就是关于用户的权限管理,学的有点云里雾里的,还得配合着作业去巩固一下。


推荐阅读:
  1. MySQL用户和权限管理
  2. MongoDB用户及权限管理(二):用户管理

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

计算机 操作系统 上下文

上一篇:NSSet for in遍历   OC排序

下一篇:python必选参数有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》