无法删除,权限不够

今天用普通用户在CentOS6.0下无意中想删除一个文件,结果确报错,说我无权限;图如下:

我试了好几次,还在root下把shi这个文件的权限开到最大——chmod 777 shi;最后当然是没成功了,要不然我也不会写接下来的权限问题!

Why,这是什么问题!得好好深究一下。OK,说干就干!(当然,本人不才,难免有不周之处,敬请开骂!呵呵)。

1、在开始学Linux的时候,最开始摆在面前的文件权限是:rwxrwxrwx,每三个一组,代表:owner,group,other;可针对文件,也可以针对目录;OK,下面得分别讲一下:

1.1、针对文件:对文件的r、w、x而言,主要都是针对文件的内容来说的;r:可读,能够读取文件的内容,但是不可修改文件的内容;w:可写,能够对文件的内容修改,但是你可千万别以为你可以删除文件;举例来说:shi rwxrwxrwx,你能说你有权限来删除文件shi吗?No,你可能不行。因为这里的可写是针对文件内容来说的,不包括删除该文件,那是针对目录该有的。x:可执行,就是能运行该文件,Linux下文件的是否执行不是依靠windows里的扩展名而言,而是要看这个东西。

1.2、针对目录:对文件的r、w、x而言,我们知道目录的主要内容是记录文件名的列表;r:这里的可读,表示的是有读取目录结构列表的权限,就是说你如果把这个可读的权限赋给了某个目录,那么表示你可以查询该目录下的文件名列表;w:这个可写跟针对文件可大不一样了,它可很强大,为什么这样说呢,因为它表示你可以修改该目录结构列表;就是你可以新建文件,删除文件,重命名,把里面的文件copy到别的地方,把别的地方move到这里。x:这个当然不说你要执行这个目录了,它表示你是否有权限进入该目录,就是cd啦。这个跟你是否要求别人能否进入该目录有直接关系。所以你要别人不能删除你的文件,你要设置要目录权限!OK,你这样脑袋能明白,你肯定已经明白了,<- ->!

难道文件不能删除就只跟上面的有关系?当然不是,还有的!

2、接下来是所谓的“隐藏权限”:

隐藏权限如果你查看和修改,那得要用lsattr和chattr了,不过有个强调,这写指令在Ext2、Ext3、Ext4文件系统上面生效,其它的就不一定了,但是不管行不行,试试不就知道了,你说是吧!我就直接说重点的,这里主要谈两个隐藏属性,i和a,这个两个的共同点是,它们都必须要root设置才行。i:表示不能删除、改名、设置连接、写入和添加数据;a:表示只能增加数据,不能删除和修改数据,即append;来看看设置:

2.1、以root登入:

chattr +i shi

这样就给shi文件添加了隐藏属性,含义你懂的!

查看一下:

lsattr shi

好了,你应该已经看到了!(你如果在目录下用ls -l指令来查看,你是看不到什么特别之处的)

你现在把这个shi文件删除给我看看,用root也行;当然你会发现无法删除,所以说这里又是一种导致文件无法删除的设置。取消掉这个属性吧(文件开始建立的时候是没有这样的属性的)。

chattr -i shi

这样就没有了!(这个设置要root账户权限)。

添加a的属性一样,你也懂的!

这样的属性是可以针对文件和目录,你把一个目录这样设置了,也是会删除不了的;那一个没有设置i目录下面有个设置了i属性的文件,能否删除这个目录呢?当然删除不了!不信试试!

我们来看看特殊的:

3、文件特殊权限:SUID、SGID、SBIT

这几个东西,SUID是针对拥有者,SGID是针对群组,SBIT等会再讲;来看看这个文件的权限显示:

 跟我们以前看的:-rwxr-xr-x可不太一样了,有个x变成了s,这是什么造型啊?这个就是因为设置了SUID,也就是拥有者!表示什么意思呢?你要知道这个文件以他的显示的权限来看,普通的用户是可以执行这个指令的,就是设置密码的指令嘛。那这个指令修改哪个文件呢,是这个文件:

 这个文件的显示权限表明,普通的用户只有读的权限,不可写的;耶,那你还怎么能设置自己的密码呢?哦,你应该想到了,那就是因为那个s了。那个s表示的意思就是:现在root是/etc/passwd文件的拥有者,如果以普通的用户执行passwd这个指令,会暂时获得root拥有者的权限,你知道root拥有者权限是可以写的,当然也就能修改密码了,虽然不是你动手,你借别人的手嘛。

SUID:

3.1、仅对二进制程序有效;

         执行者要对程序具有X可执行权限

          本权限仅在执行程序的过程中有效

          执行者将取得该程序拥有者的权限(鸟哥讲的,这里引述)

SGID呢?

它的出现标识跟SUID的出现标识一样,也是s的,但是位置不一样了,怎么说呢?请看:

 

就是SUID出现在Owner权限地方,SGID出现在group权限地方!懂了?!

SGID:

3.2、SGID对二进制程序有用(对目录也有用)

          程序执行者对程序要有X执行权限

          执行者在执行程度的过程中拥有该程序拥有者的权限

            本权限仅在执行程序的过程中有效(鸟哥讲的,这里引述)

哎,说这些还不是重点,重要的还是SBIT了,上面只是说明一些权限的概念;那就开始说他了;

SBIT:目前只能针对目录,对文件没效果了;当你在一个test目录下能创建和修改文件或目录的时候,如果你对test目录设置了SBIT权限,那么你作为一个用户,你自己创建的文件和目录,只有你自己和root才有权限删除该文件和目录。先来看看设置SBIT的目录显示:

 在other的x权限项显示了t,那么意思你懂的!那如果别人以后这样设置了,你啥都不看,当然会提示“不允许操作了”。

怎么设置呢,很简单,SUID、SGID、SBIT,分别对应的是:4、2、1,示范一下:

chmod 4755 txt(文件),就是设置SUID了,755权限的设置前面加上面对应的数字就可以设置了,再来点实例:

chmod 2755 test(目录),就是设置了SGID啦,

chmod 1755 test(目录),就是设置了SBIT啦,

好了,这个暂且到这里!记住,SUID不能用在目录上,SBIT不用在文件上,SGID都可以的。

我们时常听到什么ACL权限控制,就是访问控制了。这个是干什么的呢,它怎么对文件进行权限设置?Ok,大概是这样的!

4、ACL

这个我开始也被搞晕了,没事找抽呢,搞这么多干什么!但是现在觉得还是有用的,哪里有用呢?举例说明吧:

我有一个A目录,拥有者当然是我了,群组是我的群组——mygroup,我群组的里的人我是相信的,随他们访问,other组里面我不想封的太死,其它人里面,我主要还是讨厌那个sb,其它人我无所谓,好了,让我设置一下权限吧;哎,我怎么设置不要其它人里面的某个个体不能访问呢,不好设吧!所以ACL横空出世了!

ACL:可以针对用户、针对用户组来设置权限(当然还有默认权限,这里不提了)。

ACl要有文件系统支持才行,目前绝大部分的文件系统都能支持了,我的CentOS6.0是支持,Ext2/Ext3/Ext4都是默认支持的。如果系统没有帮你加上ACL,你可以手动加的,看下图:

 那个就表示加上了,不过这个下次开始是没有的,如果你要下次开始也加上,那就这样添加:

 

保存后就OK了!

我们先来看看,设置这样的属性后,外观有什么不同;下面是设置了ACL权限的文件:

 后面有个+号,可看见否,这就表示设置了ACL权限;怎么查看呢?

getfacl hello

这样就可以了。

现在该下手了,针对那个sb设置吧:

setfacl -m u:sb:rx A/ (目录)

给他读和进入目录的权限就够了!

这个可以针对文件,也可以针对目录!

所以那个sb,在里面如果乱删东西,那也会出现“权限不够的问题”!出现权限不够的问题就要综合分析了!(对SELinux,那个现在是谈不了了)

哎,寥寥草草说了这些!