复习(day9)

2.18 特殊权限set_uid

  • set_uid(s):该权限针对二进制可执行文件使文件在执行阶段具有文件所有者的权限。
    • 可以使用chmod u+(-)s 【二进制文件名】 来设置权限。
  • 相当于set_uid设置user的权限位。
[root@hf ~]# which passwd
/usr/bin/passwd
[root@hf ~]# ls -l /usr/bin/passwd        
-rwsr-xr-x. 1 root root 27832 310 2014 /usr/bin/passwd
  • set_uid命令,就是保证普通用户临时拥有该命令所有者的身份
  • 给一个文件设置set_uid拥有临时所有者的权限

    • 前提,是该文件必须是二进制文件,而且是一个可执行(x)的文件
      • 例如:ls,passwd这些文件就是二进制文件
      • 而像,1.txt去设置set_uid权限是没有意义的
      • 小写的s包括了x权限,大写的S表示没有x权限
  • ls命令的绝对路径为 /usr/bin/ls

[root@hf ~]# chmod u+s /usr/bin/ls       
[root@hf ~]# chmod u-s /usr/bin/ls       
[root@hf ~]# chmod u=rws /usr/bin/ls     
[root@hf ~]# !ls     
ls -l /usr/bin/ls
-rwSr-xr-x. 1 root root 117616 610 2014 /usr/bin/ls
[root@hf ~]# chmod u+x /usr/bin/ls       
[root@hf ~]# !ls     
ls -l /usr/bin/ls
-rwsr-xr-x. 1 root root 117616 310 2014 /usr/bin/ls
[root@hf ~]# 
  • 目录可增加set_uid权限,但是基本没啥作用,目录基本不用去执行啥
  • set_uid权限本身的作用就是给一个普通用户的用户执行,临时拥有所有者的身份

2.19 特殊权限set_gid

  • set_gid(s):可作用于文件(二进制可执行文件)和目录。

    • 相当于set_gid 设置group组的权限位。
    • 可以使用chmod g+(-) 【文件名/目录名】 来设置权限。
    • 也就是将标志s加到gid的x标志位,sgid用在目录上最多。
  • set_gid作用在文件上时,和set_uid效果一致,会使普通用户临时拥有所属组的身份

[root@hf ~]# ls -l
总用量 8
-rw-r--r--. 1 root root   0 326 08:39 11.txt
drwxr-xr-x. 2 root root   6 326 08:39 123
drwxrwxr-x. 2 root root   6 326 08:57 234
-rwxrwxrwx. 1 root root 924 325 06:49 2.txt
-rw-rw-r--. 1 root root   0 326 08:56 33.txt
-rw-------. 1 root root 973 321 05:05 anaconda-ks.cfg.1
-rw-rw-r--. 1 root root   0 326 09:41 ha.txt
dr-x--xr-x. 2 root root  18 326 06:56 hf
[root@hf ~]# chmod g+s 234       
[root@hf ~]# ls -ld 234
drwxrwsr-x. 2 root root 6 326 08:57 234
[root@hf ~]# chown :hanfeng 234      
[root@hf ~]# ls -ld 234
drwxrwsr-x. 2 root hanfeng 6 326 08:57 234
[root@hf ~]# touch 234/gurui         
[root@hf ~]# ls -l 234/      
总用量 0
-rw-r--r--. 1 root hanfeng 0 1027 07:46 gurui
[root@hf ~]# mkdir 234/am            
[root@hf ~]# ls -l 234/
总用量 0
drwxr-sr-x. 2 root hanfeng 6 327 07:47 am
-rw-r--r--. 1 root hanfeng 0 327 07:46 gurui
[root@hf ~]# chmod g-s 234       
[root@hf ~]# touch 234/gurui111  
[root@hf ~]# !ls     
ls -l 234/
总用量 0
drwxr-sr-x. 2 root hanfeng 6 327 07:47 am
-rw-r--r--. 1 root hanfeng 0 327 07:46 gurui
-rw-r--r--. 1 root root    0 327 07:48 gurui111
[root@hf ~]# mkdir 234/am1   
[root@hf ~]# ls -l 234/  
总用量 0
drwxr-sr-x. 2 root hanfeng 6 327 07:47 am
drwxr-xr-x. 2 root root    6 327 07:49 am1
-rw-r--r--. 1 root hanfeng 0 327 07:46 gurui
-rw-r--r--. 1 root root    0 327 07:48 gurui111
  • 当给一个目录设置了set_gid之后,再去这个目录下面创建子目录和子文件的时候,那这个子文件和子目录的所属组会跟着父级目录(就是刚刚创建的set_gid权限的目录)保持一致。

  • set_gid这个权限的作用,他不仅仅可以作用在文件上,也可以作用在目录上

    • 当作用在文件上,和set_uid作用类似,可以让执行文件的普通用户临时拥有所属组的身份。
    • 当作用在目录上,在创建子目录和子文件的时候,子目录和子文件所属组和该目录的所属组保持一致

2.20 特殊权限stick_bit

系统中的/tmp/目录是拥有stick_bit权限的
[root@hf ~]# ls -ld /tmp/
drwxrwxrwt. 9 root root 4096 327 05:14 /tmp/
  • 这drwxrwxrwt.里面的t(t里面包含x权限),就是stick_bit权限,
  • stick_bit(t):又叫做防删除位。只对目录有效,对文件无效。
    • 在/tmp/下有很多类似的文件,拥有777权限,说明任何一个用户都可对这个目录可写,并创建自己的文件

      [root@hf ~]# cd /tmp/
      [root@hf tmp]# ls
      aminglinux amning mysql.sock yum.log
  • 相当于stick-bit设置others权限位。

stick_bit权限叫防删除位,只有有权限的用户(比如root)才可以删除,而其他的用户是根本无法删除掉的
- 就是防止别人删除自己的文件(root用户除外)

  • 文件是否可以被某用户删除,主要取决于该文件所在的目录是否对该用户具有写权限。如果没有写权限,则这个目录下的所有文件都不能删除,同时也不能添加新的文件。
  • 如果希望用户能够添加文件,但是不能删除该目录下其他用户的文件,则可以对该目录增加这个权限。
  • 设置该权限后,就算用户对目录具有写权限,也不能删除其他用户的文件。

  • 有时候,set-uid上的权限为大写的S,而不是小写的s。这是因为该文件没有x权限所致,不管是大写的S还是小写s,都表示它存在set-uid和set-gid权限。同理stick-bit也一样。

  • 当有特殊权限时,第一位数字可以是0、1(–t)、2(-s-)、3(-st)、4(s–)、5(s-t)、6(ss-)、7(sst),这里的“(—)”,分别指user、group、others的权限位(rwx rwx rwx)。
    如:/tmp是–t,所以第一位为1,所以/tmp权限用数字表示为1777。
  • 文件的读写执行权限不要和目录的读写执行权限混淆。
  • 比如:一个文件设置了可写权限,但目录未设置可写权限,表示不能删除该文件,但文件内容是可编辑的。
  • 一个目录设置了可写权限,但目录下文件没有可写权限,表示可删除该文件,但该文件不能编辑。能否删除一个文件或者目录,看得是这个文件或目录所在的父目录的权限,能否删除和文件本身的权限无关。

2.21 软链接文件

  • 命令ln(link)
    • 格式:ln【-s】 【来源文件】【目的文件】
    • -s 建立软链接,不加-s建立硬链接。
  • 链接文件分为硬链接文件(hard link)和软链接文件(symbolic link),两种链接的本质区别在于inode。

    • 软链接文件:是建立一个独立的文件,当读取这个链接文件时,它会把读取的行为转发到该文件所链接的文件上。做软链接尽量使用绝对路径。
  • 软链接其实就是在一个文件本身存了另一个文件目录的路径。链接文件的大小适合路径是有关系的,路径越长,那这个软链接文件越大

软链接就像是windows中的快捷方式,可以很大程度的节省磁盘空间

  • ln -s 源文件 软链接文件
[root@hf ~]# ls
11.txt  123  234  2.txt  33.txt  anaconda-ks.cfg.1  ha.txt  hf
[root@hf ~]# cd /tmp/
[root@hf tmp]# ls
aminglinux  amning  mysql.sock  user1  yum.log  yunwei
[root@hf tmp]# ln -s /tmp/yum.log /root/123/yum.log
[root@hf tmp]# ls -l /root/123/      
总用量 0
lrwxrwxrwx. 1 root root 12 330 05:44 yum.log -> /tmp/yum.log
  • 不仅可以链接文件,还可以链接目录
[root@hf-01 tmp]# ln -s /tmp/amning/ /root/amning111
[root@hf-01 tmp]# ls -l !$
ls -l /root/amning111
lrwxrwxrwx. 1 root root 12 1030 05:51 /root/amning111 -> /tmp/amning/
  • 在/tmp/目录下,源文件aa.log链接——》目标文件ss.log
[root@hf tmp]# ls -l
总用量 4
-rw-r--r--. 1 root    root     0 330 06:09 aa.log
srwxrwxrwx. 1 mysql   mysql    0 330 04:49 mysql.sock
drwxrwxrwx. 2 user1   user1    6 327 09:07 user1
[root@hf tmp]# ln -s aa.log ss.log
[root@hf tmp]# ls -l
总用量 4
-rw-r--r--. 1 root    root     0 330 06:09 aa.log
srwxrwxrwx. 1 mysql   mysql    0 330 04:49 mysql.sock
lrwxrwxrwx. 1 root    root     6 330 06:13 ss.log -> aa.log
  • 弊端——假设做了一个相对路径的软链接,再把所有的文件拷贝到另一台机器上的时候(软链接本身也是一个文件),结果会发现这个文件不存在,(也就是源不存在),所以尽量使用绝对路径
  • 尽量使用绝对路径,这样就会避免文件的不存在

2.22 硬连接文件

  • 硬链接:当系统要读取一个文件时,会先读inode信息,然后再根据inode中的信息到块区域将数据取出来。而硬链接是直接再建立一个inode链接到文件放置的块区域。即建立硬链接时该文件内容没有变化,只是增加了一个指向这个文件的inode,并不会额外占用磁盘空间。

  • 硬链接不支持对目录做链接,只支持对文件做链接

  • 硬链接, 软链接 对比:会发现软链接很小,硬链接很大

    • ls -i 查看inode号
    • 会发现硬链接文件和源文件使用了同一个inode号,大小相同,可使用find命令查找到硬链接
[root@localhost ~]# ls -l
总用量 32
drwxr-xr-x. 3 root root   45 1026 16:11 111
-rw-r--r--. 1 root root    0 1026 15:54 111.12.txt
-rw-r--r--. 2 root root  391 1030 15:10 1_heard.txt
lrwxrwxrwx. 1 root root    5 1030 15:06 1_sorft.txt -> 1.txt
[root@localhost ~]# ls -i
33584735 111          33575033 1_sorft.txt  33575034 2.txt   33574987 anaconda-ks.cfg
33584737 111.12.txt   33575035 1.txt        33584734 3.txt   33575006 anaconda-ks.cfg.1
33575035 1_heard.txt  33584733 1.txt~       33584736 3.txt~  33575036 windows.txt
  • 硬链接文件特性,就是创建的文件和另外一个文件是相同的inode号,这两个文件相互为硬链接文件。(软链接文件是有原有的目标,它有一个真正的文件,软链接仅仅为一个快捷方式)
  • 再删除源文件后,会发现==软链接==一直闪烁,表示找不到源文件了,那这个软链接文件就没有用了
  • 再删除源文件后,会发现==硬链接==,会发现正常使用,但inode会变成1
[root@localhost ~]# rm 1.txt
rm:是否删除普通文件 "1.txt"?y
[root@localhost ~]# ls -l
总用量 28
drwxr-xr-x. 3 root root   45 10月 26 16:11 111
-rw-r--r--. 1 root root    0 10月 26 15:54 111.12.txt
-rw-r--r--. 1 root root  391 10月 30 15:10 1_heard.txt
lrwxrwxrwx. 1 root root    5 10月 30 15:06 1_sorft.txt -> 1.txt
  • 真正存数据的地方,存这个文件信息的位置在inode上
    • inode号代表着一个inode,inode是存在于文件系统中特殊的东西,这个inode会去记录一些文件的属性,如文件的时间、权限、位置等
[root@localhost ~]# ls -i 1_heard.txt
33575035 1_heard.txt
  • 硬链接不会占用双份空间,因为使用的同一个inode

  • 硬链接的限制:

    1. 目录不能做硬链接

      [root@hf ~]# ln 111 hf11     在硬链接指向目录的时候,会提示错误
      ln: "111": 不允许将硬链接指向目录
    2. 不能跨文件系统(跨分区),因为不同的文件系统有不同的inode,不同的table目录体系。

[root@hf ~]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        18G  1.1G   17G    6% /
devtmpfs        483M     0  483M    0% /dev
tmpfs           493M     0  493M    0% /dev/shm
tmpfs           493M  6.7M  486M    2% /run
tmpfs           493M     0  493M    0% /sys/fs/cgroup
/dev/sda1       197M  109M   88M   56% /boot
tmpfs            99M     0   99M    0% /run/user/0
[root@localhost ~]# ls -i /boot/
    71 config-3.10.0-514.el7.x86_64
    67 grub
131136 grub2
    76 initramfs-0-rescue-513f8b3950084e768a99df3a6cd3d9e6.img
    75 initramfs-3.10.0-514.el7.x86_64.img
189445 initramfs-3.10.0-514.el7.x86_64kdump.img
    74 initrd-plymouth.img
    72 symvers-3.10.0-514.el7.x86_64.gz
    70 System.map-3.10.0-514.el7.x86_64
    77 vmlinuz-0-rescue-513f8b3950084e768a99df3a6cd3d9e6
    73 vmlinuz-3.10.0-514.el7.x86_64
[root@hf ~]# ln /boot/config-3.10.0-514.el7.x86_64 /tmp/conifg.1
ln: 无法创建硬链接"/tmp/conifg.1" => "/boot/config-3.10.0-514.el7.x86_64": 无效的跨设备连接
  • 硬链接总结
  • 硬链接文件不能跨分区创建,因为每个分区都有各自的inode。
    • 比如、:d1分区有a文件的inode号是88,而d2分区的b文件的inode号也是88.
    • 正是因为各个分区的inode号各自为营,如果跨分区创建硬链接文件就会导致混乱。
    • 为了避免这个问题,所以不允许跨分区创建硬链接文件。
  • 硬链接可以删除,因为使用了相同的inode
    显示无法创建硬链接
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值