特殊权限,t权限,S权限 (资源)

一、 特殊权限set_uid

set命令做用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。使用set更改shell特性时,符号"+"和"-"的做用分别是打开和关闭指定的模式。set命令不可以定义新的shell变量。若是要定义新的变量,可使用declare命令以变量名=值的格式进行定义便可。node

语法

set(选项)(参数)

选项

-a:标示已修改的变量,以供输出至环境变量。
-b:使被停止的后台程序马上回报执行状态。
-C:转向所产生的文件没法覆盖已存在的文件。
-d:Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。
-e:若指令传回值不等于0,则当即退出shell。
-f:取消使用通配符。
-h:自动记录函数的所在位置。
-H Shell:可利用"!"加<指令编号>的方式来执行history中记录的指令。
-k:指令所给的参数都会被视为此指令的环境变量。
-l:记录for循环的变量名称。
-m:使用监视模式。
-n:只读取指令,而不实际执行。
-p:启动优先顺序模式。
-P:启动-P参数后,执行指令时,会以实际的文件或目录来取代符号链接。
-t:执行完随后的指令,即退出shell。
-u:当执行时使用到未定义过的变量,则显示错误信息。
-v:显示shell所读取的输入值。
-x:执行指令后,会先显示该指令及所下的参数。

参数

取消某个set曾启动的参数。python

实例

使用declare命令定义一个新的环境变量"mylove",而且将其值设置为"Visual C++",输入以下命令:linux

declare mylove='Visual C++'   #定义新环境变量

再使用set命令将新定义的变量输出为环境变量,输入以下命令:shell

set -a mylove                 #设置为环境变量

执行该命令后,将会新添加对应的环境变量。用户可使用env命令和grep命令分别显示和搜索环境变量"mylove",输入命令以下:bash

env | grep mylove             #显示环境变量值

此时,该命令执行后,将输出查询到的环境变量值。函数

set_uid的表现,权限上添加了小写的s,ui

更改密码的文件/etc/shadow,root也没法更改。spa

ls能够查看root权限时。是添加了set_uid权限。.net

去掉set_uid权限方法。code

普通用户用ls命令查看root权限。能显示的内容。


二、 特殊权限set_gid

(1)、设置set_gid的方法。设置过的文件会变成黄(橙)色。

(2)、更改所属组方法。

 

在ls命令前面添加!号,显示的全面。


三、 特殊权限stick_bit

(1).防删除,在权限中以t显示。

设置777权限,所属者,所属组。

四、 软连接文件(symbolic link

Symbolic Links : 跟hard link不一样,这个是创建一个独立的文件,而这个文件的做用是当读取这个连接文件时,它会把读取的行为转发到该文件所link的文件上。这样讲,也许比较绕口,那么就来举一个例子。如今有文件a,咱们作了一个软连接文件b(只是一个连接文件,很是小),b指向了文件a。当读取b时,那么b就会把读取的动做转发到a上,这样就读取到了文件a。因此,当你删除文件a时,文件b并不会被删除,可是再读取b时,会提示没法打开文件。而,当你删除b时,a是不会有任何影响的。

命令: ln

语法 : ln [-s]  [来源文件]  [目的文件]

ln 经常使用的选项就一个 ‘-s’, 若是不加就是创建硬连接,加上就创建软连接。

[root@localhost ~]# mkdir 123
[root@localhost ~]# cd 123
[root@localhost 123]# cp /etc/passwd ./
[root@localhost 123]# ll
总用量 4
-rw-r--r-- 1 root root 1097 5月  10 17:08 passwd
[root@localhost 123]# du -sk
8       .
[root@localhost 123]# ln passwd passwd-hard
[root@localhost 123]# ll
总用量 8
-rw-r--r-- 2 root root 1097 5月  10 17:08 passwd
-rw-r--r-- 2 root root 1097 5月  10 17:08 passwd-hard
[root@localhost 123]# du -sk
8

 

实例浅绿色

若是删除掉源文件,则软连接文件不能读取了,并且使用 ‘ll’ 查看发现颜色也变了。

[root@localhost ~]# ln -s 456 789
[root@localhost ~]# ls -ld 456 789
drwxr-xr-x 2 root root 4096 5月  10 17:22 456
lrwxrwxrwx 1 root root    3 5月  10 17:29 789 -> 456

注意:建立软链接时,大文件放在前面;作软链接尽可能使用绝对路径


五、 硬链接文件(hard link)

Hard Links : 当系统要读取一个文件时,就会先去读inode table,而后再去根据inode中的信息到块区域去将数据取出来。而hard link 是直接再创建一个inode连接到文件放置的块区域。也就是说,进行hard link的时候实际上该文件内容没有任何变化,只是增长了一个指到这个文件的inode, hard link 有两个限制:(1)不能跨文件系统,由于不一样的文件系统有不一样的inode table; (2) 不能连接目录。

 ‘ll’ 命令等同于 ‘ls -l’, 请使用 ‘which’ 命令查看一下。作了硬连接后,虽然两个文件大小都为 ‘1097’, 可是目录的大小并无变化。

[root@localhost 123]# ll
总用量 4
-rw-r--r-- 1 root root 1097 5月  10 17:08 passwd-hard
[root@localhost 123]# rm -f passwd
[root@localhost 123]# du -sk
8       .

删除源文件passwd, 空间依旧不变。这说明硬连接只是复制了一份inode信息。

[root@localhost ~]# ln 123 456
ln: "123": 不容许将硬连接指向目录

硬连接不能用于目录。

[root@localhost ~]# mkdir 456
[root@localhost ~]# cd 456
[root@localhost 456]# cp /etc/passwd ./
[root@localhost 456]# ln -s passwd  passwd-soft
[root@localhost 456]# ll
总用量 4
-rw-r--r-- 1 root root 1097 5月  10 17:18 passwd
lrwxrwxrwx 1 root root    6 5月  10 17:19 passwd-soft -> passwd

[root@localhost 456]# head -n1 passwd-soft
root:x:0:0:root:/root:/bin/bash
[root@localhost 456]# head -n1 passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost 456]# rm -f passwd
[root@localhost 456]# head -n1 passwd-soft
head: 没法打开"passwd-soft" 读取数据: 没有那个文件或目录
[root@localhost 456]# ll
总用量 0
lrwxrwxrwx 1 root root 6 5月  10 17:19 passwd-soft -> passw

注意:两种连接的本质区别关键点在于inode.

 

其余权限

除了读写执行权限外系统还支持强制位(s权限)和粘滞位(t权限)

六、s权限

s权限: 设置使文件在执行阶段具备文件全部者的权限,至关于临时拥有文件全部者的身份. 典型的文件是passwd. 若是通常用户执行该文件, 则在执行过程当中, 该文件能够得到root权限, 从而能够更改用户的密码.

ls -al /usr/bin/passwd
-rwsr-xr-x 1 pythontab pythontab 32988 2018-03-16 14:25 /usr/bin/passwd

咱们能够经过字符模式设置s权限:chmod a+s filename,也可使用绝对模式进行设置:

设置suid:将相应的权限位以前的那一位设置为4;

设置guid:将相应的权限位以前的那一位设置为2;

二者都置位:将相应的权限位以前的那一位设置为4+2=6。

注意:在设置s权限时文件属主、属组必须先设置相应的x权限,不然s权限并不能正真生效(c h m o d命令不进行必要的完整性检查,即便不设置x权限就设置s权限,chmod也不会报错,当咱们ls -l时看到rwS,大写S说明s权限未生效)

 

t权限

t权限:要删除一个文档,您不必定要有这个文档的写权限,但您必定要有这个文档的上级目录的写权限。也就是说,您即便没有一个文档的写权限,但您有这个文档的上级目录的写权限,您 也可以把这个文档给删除,而假如没有一个目录的写权限,也就不能在这个目录下建立文档。

怎样才能使一个目录既可以让任何用户写入文档,又不让用户删除这个目录下他人的文档,t权限就是能起到这个做用。t权限通常只用在目录上,用在文档上起不到什么做用。

在一个目录上设了t权限位后,(如/home,权限为1777)任何的用户都可以在这个目录下建立文档,但只能删除本身建立的文档(root除外),这就对任何用户能写的目录下的用户文档 启到了保护的做用。

能够经过chmod +t filename 来设置t权限

 

资源  :

Linux权限管理:普通文件权限、特殊权限及ACL 荐        : http://blog.51cto.com/11551196/1833974

相关文章
相关标签/搜索