array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Linux笔记17-权限管理[文件特殊权限] - 爱码网

【权限管理-文件特殊权限 】

8.2.1 SetUID

8.2.2 SetGID

8.3.3 Sticky BIT

 

◆ SUID

◇ SetUID的功能与条件

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

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

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

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

Linux笔记17-权限管理[文件特殊权限]

passwd命令拥有SetUID权限,所以普通可以修改自己的密码

[[email protected] ~]# ll /usr/bin/passwd

-rwsr-xr-x. 1 root root 25980 2月 22 2012 /usr/bin/passwd

Linux笔记17-权限管理[文件特殊权限]

cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容

[[email protected] ~]# ll /bin/cat

-rwxr-xr-x 1 root root 47976 6月 22 2012 /bin/cat

Linux笔记17-权限管理[文件特殊权限]

◇ 设定SetUID的方法

数字4代表SUID

扩展:之前说的表示权限的3个数字(例如 755,777)其实是不完整的,其实前面还有一个数字。

有三种情况:4755(SUID),2755(SGID),1755(SBIT),7755(同时拥有前面三个,一般不这么用) 。

chmod 4755 文件名

chmod u+s 文件名

案例:创建一个空文件并查看其默认权限,结果是644

Linux笔记17-权限管理[文件特殊权限]

现在要给这个文件设定SUID,使用 chmod 4755 abc即可

Linux笔记17-权限管理[文件特殊权限]

上面的abc不是可执行程序,如果是的话,任何一个用户在操作的时候就可以获得root权限。

◇ 取消SetUID的方法

chmod 755 文件名

chmod u-s 文件名

Linux笔记17-权限管理[文件特殊权限]

◇ 危险的SetUID

① 关键目录应严格控制写权限。比如“/”、“/usr”等

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

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

视频中演示的是给vim文件 (/usr/bin/vim)设置了SUID权限,于是乎,任意用户使用vim都可以编辑打开任意的文件,

例如/etc/shadow等等所有的重要文件,或者系统的配置文件。这样会很危险!!

 

◆ SGID

◇ SetGID针对文件的作用

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

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

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

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

为什么普通用户可以使用 locate 命令呢?

[[email protected] ~]# ll /usr/bin/locate

-rwx--s--x 1 root slocate 35612 8月 24 2010 /usr/bin/locate

Linux笔记17-权限管理[文件特殊权限]

[[email protected] ~]# ll /var/lib/mlocate/mlocate.db

-rw-r----- 1 root slocate 1838850 1月 20 04:29 /var/lib/mlocate/mlocate.db

Linux笔记17-权限管理[文件特殊权限]

过程分析:

* /usr/bin/locate是可执行二进制程序,可以赋予SGID

* 执行用户lamp对/usr/bin/locate命令拥有执行权限

* 执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组对/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库

* 命令结束,lamp用户的组身份返回为lamp组

 

◇ SetGID针对目录的作用和条件(实际操作中的意义不大)

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

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

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

案例解说:

在/tmp 目录下创建一个目录,并且赋予2777权限(SGID,同时777)

Linux笔记17-权限管理[文件特殊权限]

切换到用户rx,然后先在家目录新建一个文件,查看该文件的所属组是默认的rx

Linux笔记17-权限管理[文件特殊权限]

但是,现在到刚才设置了SGID的目录 /tmp/test 目录下新建一个文件,再查看所属组:

Linux笔记17-权限管理[文件特殊权限]

结果显示,在这个目录新建的文件的所属组不是rx,而是这个目录的所属组root.

 

设定SetGID (2代表SGID )

chmod 2755 文件名

chmod g+s 文件名

取消SetGID

chmod 755 文件名

chmod g-s 文件名

◆ Sticky+BIT

◇ SBIT粘着位作用

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

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

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

◇ 一般最多设置的就是 /tmp 目录。

[[email protected] ~]# ll -d /tmp/

drwxrwxrwt. 3 root root 4096 12月 13 11:22 /tmp/

Linux笔记17-权限管理[文件特殊权限]

测试一下:

使用用户rx 在/tmp 下创建一个文件,然后切换到另一个用户尝试删除这个文件就会出错。

但是明显这个用户对/tmp 目录是有执行权限的。

Linux笔记17-权限管理[文件特殊权限]

◇ 设置与取消粘着位

设置粘着位

chmod 1755 目录名

chmod o+t 目录名

取消粘着位

chmod 777 目录名

chmod o-t 目录名

相关文章: