2.18-2.22特殊权限和软硬链接
2.18-2.20 特殊权限
一、特殊权限之suid
set uid权限使普通用户临时拥有root赋予某个命令的特殊权限。即这个命令在普通用户用起来和root用户用起来效果是一样的。
语法:chmod u+s 二进制可执行文件,例如:chmod u+s /bin/ls。这样普通用户可以用ls查看root文件夹。
注:如果权限中的s变成了S,是由于所有者没有执行权限,加一个x可执行权限就变成小s了。umask第一位表示为4
二、特殊权限之set gid
set gid类似于suid,但它可以作用于目录。
chmod g+s 命令/可执行文件:让其他用户临时拥有该命令所属组的权限
chmod g+s 目录:其他用户在这个目录下新建的一切目录和文件都归该目录所属组。
注:umask第一位表示为2
三、sticky_bit
作用于目录,对文件没有意义。
语法:chmod o+t 目录
注:文件能否被其他用户删除,主要取决于文件所在的目录是否对其他用户有写的权限。(如果目录具有写的权限,即使文件不能读写执行,也并没有什么用,还是能被其他用户删除和修改。)
四、为什么要使用特殊权限
举个例子,比如 /usr/bin/passwd 这个二进制文件。
它的权限是 -rwsr-xr-x ,我不是所有者,我具有"x"权限,我执行它时,获得了它的所有者(即root)的权限,
所以在该二进制程序执行时,我可以用它来读到我平时是没有权限访问的 /etc/shadow 文件(-r--------),从而能更改我自己的密码
五、修改SUID,SGID,SBIT权限
1.符号类型修改权限
chmod u+s test --为test文件加上suid权限
chmod g+s test --为test文件加上sgid权限
chmod o+t test --为test文件加上sbit权限
2.数字类型修改权限
我们知道普通文件的rwx权限修改
对于特殊权限,需要在最前面增加一位,SUID:4,SGID:2,SBIT:1
chmod 4777 test --test拥有SUID权限,rwsrwxrwx
chmod 2777 test --test拥有SGID权限,rwxrwsrwx
chmod 1777 test --test拥有SBIT权限,rwxrwxrwt
2.21-2.22 软链接和硬链接
软链接(symbolic link)和硬链接(hard link)。两种链接的本质区别关键点在于inode。
软连接 : 跟hard link不同,这个是建立一个独立的文件,而这个文件的作用是当读取这个链接文件时,它会把读取的行为转发到该文件所link的文件上。这样讲,也许比较绕口,那么就来举一个例子。现在有文件a,我们做了一个软链接文件b(只是一个链接文件,非常小),b指向了文件a。当读取b时,那么b就会把读取的动作转发到a上,这样就读取到了文件a。所以,当您删除文件a时,文件b并不会被删除,但是再读取b时,会提示无法打开文件。而,当您删除b时,a是不会有任何影响的。
看样子,似乎 hard link 比较安全,因为即使某一个 inode 被删掉了,只要有任何一个 inode 存在,那么该文件就不会消失不见!不过,不幸的是,由于 Hard Link 的限制太多了,包括无法做目录的link ,所以在用途上面是比较受限的!反而是 Symbolic Link 的使用方向较广!那么如何建立软链接和硬链接呢?这就用到了ln 命令。
硬链接 : 当系统要读取一个文件时,就会先去读inode table,然后再去根据inode中的信息到块区域去将数据取出来。而hard link 是直接再建立一个inode链接到文件放置的块区域。也就是说,进行hard link的时候实际上该文件内容没有任何变化,只是增加了一个指到这个文件的inode, hard link 有
两个限制:(1)不能跨文件系统,因为不同的文件系统有不同的inode table; (2) 不能链接目录。
如何创建:
命令: ln
语法 : ln [-s] [来源文件] [目的文件]
ln 常用的选项就一个 ‘-s’, 如果不加就是建立硬链接,加上就建立软链接。
创建软连接的方式
#ln -s soure /file object
创建软连接是连接文件本身,可以跨分区建立软连接,不会应为不同分区而出现不能使用的问题。
在创建软连接的文件中,修改一处文件另一处同时发生修改,当删除软连接对象时,不影响源文件使用,当删除源文件后,连接对象失去作用
创建硬连接的方式
#ln soure /file object
硬连接在文件中使用inode号连接,两个连接文件同事使用一个inode号进行文件表示,一处文件修改,修改针对文件底层数据块修改,两个文件同时修改内容
删除一处文件,不会影响另一处文件的使用。因为硬连接使用inode号连接,所以只能在同分区能使用,不能跨分区使用。
举例:
上例中的 ‘ll’ 命令等同于 ‘ls -l’, 请使用 ‘which’ 命令查看一下。做了硬链接后,虽然两个文件大小都为 ‘1097’, 但是目录的大小并没有变化。
删除源文件passwd, 空间依旧不变。这说明硬链接只是复制了一份inode信息。
硬链接不能用于目录。
如果删除掉源文件,则软链接文件不能读取了,而且使用 ‘ll’ 查看发现颜色也变了。
目录是可以软链接的。