20190830笔记

2.17 隐藏权限lsattr/chattr

2.18 特殊权限set_uid

2.19 特殊权限set_gid

2.20 特殊权限stick_bit

2.21 软链接文件

2.22 硬连接文件

一、隐藏权限lsattr/chattr

chattr 设置隐藏权限

查看用法 man chattr

语法:chattr 【+-=】 【Asaci】 【文件或目录名】

参数或选项描述:

示例

提示文件只读

查看权限

可以看到root用户是有读写权限的,这时候就要考虑是否有什么隐藏权限

lsattr查看隐藏权限

知识点:正常情况下新建一个文件是没有任何隐藏权限的,

加了‘i’权限之后,不能mv(重命名)、rm(删除)、vi(编辑)、touch(更改时间)、>(覆盖)

如何去除‘i’权限?

# chattr -i 2.txt

另一种用法

# chattr +a 2.txt 只能追加,不允许其他操作

由上可以看到赋予2.txt a 的隐藏权限后,允许追加,类似于日志,还允许touch(更改时间),不允许其他操作

如何去除‘a’权限

# chattr -a 2.txt 

示例

1.用chattr命令防止系统中某个关键文件被修改:

# chattr +i /etc/resolv.conf

然后用mv /etc/resolv.conf等命令操作于该文件,都是得到operation not permitted 的结果

vim编辑该文件时会提示W10:warning:changing a readonly file错误。要想修改此文件就要把‘i’属性去掉:

# chattr -i /etc/resolv.conf

使用lsattr 命令来显示文件属性

# lsattr /etc/resolv.conf

输出结果:

---i----- /etc/resolv.conf

2.让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:

# chattr +a /var/log/messages

总结lsattr命令用法

lsattr命令格式:lsattr 【-RVadlv】【files...】

lsattr可以查看目录下面的子目录和文件,不能查看目录本身

lsattr -d 可以查看目录本身,和ls -d用法相同

知识点:给目录加‘i’权限和给文件加‘i’权限,实际上是一样的。但是针对已存在目录下的文件,限制不大,依然可以对目录下的文件进行编辑,‘a’权限也是,只能限制目录本身

lsattr 1 只能查看目录下的权限

lsattr -R 1 可以查看目录和目录下子目录的所有的文件权限

完整的目录

知识点:lsattr -a 可以查看隐藏的文件权限

二、特殊权限set_uid

创建set_uid权限,是为了让一般用户在执行某些程序的时候,能够暂时具有该程序拥有者的权限。列如:账号和密码的存放文件其实是/etc/passwd与/etc/shadow,它们的拥有者是root。在这个权限中,仅有root可以强制写入。一个普通用户webgod去更新自己的密码时,使用的就是/usr/bin/passwd程序,却可以更新成功,而/usr/bin/passwd的拥有者是root

那么,就是说webgod这个普通用户可以访问/etc/shadow密码文件,这就是因为有‘s’权限的帮助。当‘s’权限在user的x时(注意下图的/usr/bin/passwd的相关属性),此处是‘-rwsr-xr-x’,称为Set UID,简称SUID,这个UID表示User的ID,而User表示这个程序(/usr/bin/passwd)的拥有者(root)。所有,当webgod用户执行‘/usr/bin/passwd’时,它就暂时获取文件拥有者root的权限

SUID仅可用在二进制文件(binary file),而且对目录无效。

列如,passwd root 修改root用户密码,passwd的权限是

这时候第一位权限是‘rws’,而不是我们常见的‘rwx’,这里的‘s=set_uid’

set_uid权限意味着,除了这个权限的所有者外,其他所属组、其他用户在执行此命令那一瞬间,拥有所有者的权限。列如,更改密码,普通用户应该是不能更改密码,但是passwd命令拥有‘s’权限,所有者是root。那么普通用户在执行passwd命令修改密码时,那一瞬间就拥有root的权限。要赋予文件set_uid权限,那么此文件必须要二进制可执行的,列如:ls、passwd、vi等等

拓展

file 文件路径 可以比ls -l 更详细的显示文件的类型信息,查看文件是否是二进制文件

如何给文件赋予set_uid权限?

此时,其他用户使用ls命令可以查看/root用户下目录

如何给文件去除set_uid权限?

另一种形式给文件赋予set_uid权限

这时看到ls权限是rwS,是因为它没有x可执行权限,但不影响,普通用户还是可以执行,可以再赋予一个x权限,就会S变s

为什么没有x权限也可以直接执行?

1.s也有执行的含义,所有可以直接执行。2.ls命令普通用户权限本身就是x权限

目录也可以加s权限,但是没意义

set_uid 设定之后会在rwxr-xr-x前面加一位,就是4755。chmod u+s 和 chmod 4755等价

三、特殊权限set_gid

可以应用在文件和目录上。设置在文件上和set_uid类似,前提是这个文件必须是可执行的二进制文件。设置set_gid后,执行该文件的用户会临时以该文件所属组的身份执行。若目录被设置这个权限后,任何用户在此目录下创建的文件或者目录都具有和该目录所属组相同的组

set_gid作用在组权限位上

s权限意味着,除了这个文件的所属组之外,其他用户在执行此命令那一瞬间,拥有所属组的权限

root所属组权限为 r-x,可读可执行。所以普通用户拥有set_gid权限时,也可以使用root所属组的权限,可以查看/root/下的目录文件

如果所属组没有set_gid权限时,普通用户访问会提示权限不够

set_gid权限也可以作用在目录上,给123目录赋予s权限

查看权限

更改用户组

在目录下创建一个文件

这是新建的文件所属组也是huhu

注意:当给一个目录set_gid权限时,它下面创建的子目录和文件的所属组会跟着父级目录走,跟创建set_gid权限的目录保持一致

set_gid 设定之后会在 rwxr-xr-x前面加一位,就是2755,chmod g+s和chmod 2755 等价,变成 rwxr-sr-x

总结:如果s的权限是在用户组,那么就是 Set GID,简称 SGID。SGID可以用在两个方面:

四、特殊权限stick_bit

SBit一般用于目录上,对文件的意义不大。SBit对目录的作用是:在具有SBit的目录下,用户若在该目录下具有w及x权限,则当用户在该目录下创建文件或目录时,只有文件拥有者与root才有权利删除。SBit可以理解为防删除位。如果希望用户能够添加文件但同时不能删除文件,则可以对文件使用SBit位。设置该位后,就算用户对该文件的父目录具有写权限,也不能删除文件

/tmp/目录默认有stick_bit权限,简写为t

它的权限位在其他用户上,防删除位,防止别人删除自己的文件,root用户除外。用户在/tmp/下新建一个文件

所属用户和所属组都是huhu,这时其他用户huhu1可以对1进行编辑,但是不可删除,root除外

增加stick_bit防删除位

# chmod o+t  目录

在/tmp/目录下,用户新建一个目录,赋予777权限

另外一个用户,进入此目录下创建文件和目录

这时候到创建主目录的用户下,查看刚才创建的文件和子目录,所属用户和用户组是huhu1

然后删除huhu1创建的文件和目录

为什么能删除?

因为删除1.txt和222看的不是他们自身的权限,而是他们所在目录huhu这个目录的权限,huhu之前赋予的是777权限,所以用户是可读可写可执行的,当然可以删除。如果这时候huhu加了防删除位,那么就不能删除它下面的文件和目录了

一个文件能否被删除,取决于该文件的父目录的权限,/tmp/目录时777,任何人都可读可写可执行,所以理论上任何人都可以删除/tmp/下的所有文件,但是,user2是不可以删除user1的文件,可以修改,只有user1和root可以删除,这就是因为/tmp/目录有个stick_bit

stick_bit设定之后会在rwxr-xr-x前面加一位,就是1755,chmod o+t 和 chmod 1755等价,变成 rwxr-xr-t

五、软链接文件

除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪个文件,最终读取的都是文件B。这时,文件A就称为文件B的软链接(soft link)或者符号链接(symbolic link)

这意味着,文件A依赖于文件B而存在,如果删除文件B,打开文件A就会报错:No such file or directory。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号,文件B的inode‘链接数’不会因此发生变化。软链接类似于Windows的快捷方式

查看系统版本,只针对于Redhat和centos

# cat /etc/redhat-release

/bin相当于/usr/bin的快捷方式

链接文件的大小和路径有关,路径越长,文件越大。软链接可以节省空间,有些文件需要在某个路径下有某个文件,但是这个文件其实在另一个目录下,这时候就需要用到软链接

如何创建软链接?

ln -s 源文件 创建软链接的文件

软链接也可以链接目录

注意:删除软链接目录时,后面不要加‘/’

相对路径软链接有弊端,之前我们用到的是绝对路径,在同一个路径下创建的软链接是相对路径

如果复制到另一台机器上或者目录改动,那么软链接就会失效,尽量使用绝对路径。将ifcfg.log2这个软链接移动到/root/1下,查看

此时ifcfg.log是找不到的,会一直闪烁,但是新建一个该文件,恢复正常

软链接的使用场景示例:

假设现在有个服务server,会生成一个日志文件run.log,路径在/boot/run.log,但是/boot/目录空间快满了,这时候可以把run.log复制到/目录下

然后删掉/boot下的run.log

rm /boot/run.log

做一个软链接

ln -s /run.log /boot/run.log

这时,server继续使用的是/boot/run.log这个日志文件,但事实上它现在只是一个软链接,真正的位置是在/目录下,有效的解决了/boot空间内存不足的问题。

六、硬连接文件

一般情况下,文件名和inode号是一一对应的,每个inode号对应一个文件名,但是Unix/Linux系统很多,多个文件名指向同一个inode号

这意味着,可以用不同的文件名访问同样的内容,对文件内容进行修改,会影响到所有文件名,但是,删除一个文件名,不影响另一个文件名的访问。这种情况被称为硬链接(hard link)

文件的inode号一般都为1,代表没有重复使用inode号的其他文件。目录的inode号比较特殊,下面有子目录,所以会有相同的inode号

硬链接:硬链接不支持对目录做硬链接,只支持对文件做硬链接,而且不能跨分区

# ln 源文件 硬链接文件

2.txt和2-1txt inode号相同

运行上面这条命令以后,源文件与目标文件的inode号相同,都指向同一个inode号。inode信息中有一项叫做链接数,记录指向该inode的文件名总数,这时就会增加1

反过来,删除一个文件名,就会使得inode节点中的‘链接数’减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号,以及其所对应block区域

目录文件的链接数,创建目录时,默认会生成两个目录项:‘.’和‘..’。前者的inode号就是当前目录的inode号,等同于当前目录的‘硬链接’,后者的inode号就是当前目录的父目录的inode号,等同于父目录的‘硬链接’。所以,任何一个目录的‘硬链接’总数,总是等于2(某一目录的目录名和该目录的当前目录名)

关于硬链接,总结以下几点:

转载于:https://my.oschina.net/u/4093954/blog/3099919

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值