隐藏权限(chattr,lsattr);特殊权限(suid,sgid,stid);软连接和硬连接;

隐藏权限lsattr、chattr

当你是该文件的拥有者、全部组、权限也有读写权限,可是没法编辑它,那么就要考虑它是否有隐藏权限;node

lsattr命令

检查文件隐藏权限
-R:连同子目录的数据一同列出
-a:相似于ls的-a选项,即连同隐藏文件一同列出

lsattr 文件名bash

[root@jinkai01 ~]# lsattr /etc/passwd
---------------- /etc/passwdide

chattr命令

  • A:增长该属性后,表示文件或目录的atime将不可修改。
  • s:增长该属性后,会将数据同步写入磁盘中。
  • a:增长该属性后,表示只能追加不能删除,非root用户不能设定该属性。
  • c:增长该属性后,表示自动压缩该文件,读取时会自动解压。
  • i:增长该属性后,表示文件不能删除、重命名、设定连接、写入以及新增数据。

修改异常权限
chattr +i 文件名
不允许操做(没法保存
ui

[root@jinkai01 ~]# lsattr a.txt
---------------- a.txt
[root@jinkai01 ~]# chattr +i a.txt
[root@jinkai01 ~]# lsattr a.txt
----i----------- a.txt
[root@jinkai01 ~]# rm -f a.txt
rm: 没法删除"a.txt": 不容许的操做
[root@jinkai01 ~]# mv a.txt b.txt
mv: 没法将"a.txt" 移动至"b.txt": 不容许的操做对象

chattr -i 文件名 取消i 属性字符串

[root@jinkai01 ~]# chattr -i a.txt
[root@jinkai01 ~]# lsattr a.txt
---------------- a.txt
[root@jinkai01 ~]# rm -f a.txt 删除成功同步

chattr +a 文件名
只能在文件尾追加文字,不能修改,不能删除,不能更名字
it

[root@jinkai01 ~]# chattr +a a.txt
[root@jinkai01 ~]# lsattr a.txt
-----a---------- a.txt
[root@jinkai01 ~]# rm a.txt
rm:是否删除普通空文件 "a.txt"?y
rm: 没法删除"a.txt": 不容许的操做
[root@jinkai01 ~]# echo fdsafdsfsda > a.txt
-bash: a.txt: 不容许的操做
[root@jinkai01 ~]# echo fdsafdsfsda >> a.txt
[root@jinkai01 ~]# cat a.txt
fdsafdsfsdatable

特殊权限

set_uid

该权限针对二进制可执行文件,使文件在执行阶段具备文件全部者的权限。 好比:passwd这个命令就具备该权限。当普通用户执行passwd命令时,能够临时得到root权限,从而能够更改密码。
当咱们查询/usr/bin/passwd的权限的时候会发现,出现了一个s权限,这个s权限就是咱们所讲述的;
class

[root@jinkai01 ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd

因为每一个用户都须要使用passwd命令来修改密码,那么就须要全部用户都拥有这个文件的权限,也就是(全部者);
而这个文件的全部者倒是ROOT帐号与root组;此时咱们就会使用一个特殊权限来赋予它,也就是s权限;
set_uid命令:可使普通用户临时赋予root权限,可是对象必须是可执行的二进制文件;

[root@jinkai01 ~]# su - user1
上一次登陆:一 8月 3 14:38:14 CST 2020pts/0 上
[user1@jinkai01 ~]$ whoami
user1
[user1@jinkai01 ~]$ ls /root/
ls: 没法打开目录/root/: 权限不够
[user1@jinkai01 ~]$ ls -ld /root/
dr-xr-x---. 4 root root 221 8月 3 15:54 /root/

此时咱们会发现/root/目录的权限全部者为root,其余用户user1根本没法操做;
那么咱们就须要使用root帐号给ls命令赋予s权限:
chmod u+s [路径]

root@jinkai01 ~]# chmod u+s /usr/bin/ls
[root@jinkai01 ~]# ls -l /usr/bin/ls
-rwsr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls

再在user1帐号下ls下/root/目录,咱们会发现能够查看/root/目录了;

[user1@jinkai01 ~]$ ls /root/
1 2 abc anaconda-ks.cfg a.txt

取消s权限:
格式:
chmod u-s [路径]

[root@jinkai01 ~]# chmod u-s /usr/bin/ls
[root@jinkai01 ~]# ls -l /usr/bin/ls
-rwxr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls

set_gid

该权限能够做用在文件上(二进制可执行文件),也能够做用在目录上。看成用在 文件上时,其功能和set uid同样,它会使文件在执行阶段具备文件所属组的权限。目录被设 置这个权限后,任何用户在此目录下建立的文件都具备和该目录所属的组相同的组,使其临时具有全部组的权限
首先查看权限,普通用户没法ls /root/目录下的文件;

[root@jinkai01 ~]# ls -l /usr/bin/ls
-rwxr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls
[root@jinkai01 ~]# su - user1
上一次登陆:一 8月 3 16:00:35 CST 2020pts/0 上
[user1@jinkai01 ~]$ ls /root/
ls: 没法打开目录/root/: 权限不够

咱们经过root帐号赋予ls命令拥有所属组来查看
chmod g+s [路径]

[root@jinkai01 ~]# chmod g+s /usr/bin/ls
[root@jinkai01 ~]# ls -ld /usr/bin/ls
-rwxr-sr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls

再切换到普通用户user01来ls /root/看看

[root@jinkai01 ~]# su - user1
上一次登陆:一 8月 3 16:05:30 CST 2020pts/0 上
[user1@jinkai01 ~]$ ls /root/
1 2 abc anaconda-ks.cfg a.txt

取消权限(在root下取消)
chmod g-s [路径]

[root@jinkai01 ~]# chmod g-s /usr/bin/ls
[root@jinkai01 ~]# ls -ld /usr/bin/ls
-rwxr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls

切换到普通用户下查看:

[root@jinkai01 ~]# su - user1
上一次登陆:一 8月 3 16:06:49 CST 2020pts/0 上
[user1@jinkai01 ~]$ ls /root/
ls: 没法打开目录/root/: 权限不够

stick_bit

能够理解为防删除位。文件是否能够被某用户删除,主要取决于该文件所在的目录是否对该用户具备写权限。若是没有写权限,则这个目录下的全部文件都不能删除,同时也不能添加新的文件。若是但愿用户可以添加文件但不能删除该目录下其余用户的文件, 则能够对父目录增长该权限。设置该权限后,就算用户对目录具备写权限,也不能删除其余用户的文件。
防止其余用户删除文件;/tmp/ 下可被其余用户编辑,没法删除其余用户的文件;
使用普通用户user1在/tmp/下建立一个文件,给文件777权限;

[user1@jinkai01 tmp]$ touch 1.txt
[user1@jinkai01 tmp]$ chmod 777 1.txt
[user1@jinkai01 tmp]$ ls -l 1.txt
-rwxrwxrwx 1 user1 user1 0 8月 3 16:14 1.txt

切换到普通用户user2,此时咱们发现能够user2能够编辑1.txt文件,可是没法删除1.txt;

[user1@jinkai01 tmp]$ su - user2
密码:
上一次登陆:一 8月 3 14:33:30 CST 2020pts/0 上
[user2@jinkai01 ~]$ echo 1221121 > /tmp/1.txt
[user2@jinkai01 ~]$ echo 1221121 >> /tmp/1.txt
[user2@jinkai01 ~]$ cd /tmp/
[user2@jinkai01 tmp]$ rm 1.txt
rm: 没法删除"1.txt": 不容许的操做

设置权限:chmod o+t /tmp
取消权限:chmod o-t /tmp

软连接

软连接:与硬连接不一样,软连接是创建一个独立的文件,当读取这个连接文件时,它会把读取的行为转发到该文件所连接的文件上。例如,如今有一个文件a,咱们作了一个软连接文件 b(只是一个连接文件,很是小),b指向了a。当读取b时,b就会把读取的动做转发到a上,这样就读取了文件a。当咱们删除文件a时,连接文件b不会被删除;但若是再次读取b时,会提示没法打开文件。然而,当咱们删除b时,a是不会有任何影响的。
至关于Windows中的快捷方式;

例如/bin 实际是/usr/bin 
/bin -> usr/bin 这一行表明的是软连接(快捷方式)

[root@jinkai01 ~]# ls -l /bin
lrwxrwxrwx. 1 root root 7 3月 24 17:32 /bin -> usr/bin

建立软连接
格式:
ln -s [源文件目录] [软连接文件目录(快捷方式)]

例如:ln -s /usr/bin /bin
在当前目录建立一个软连接(快捷方式),源文件在/root/abc/1.txt

[root@jinkai01 ~]# ln -s /root/abc/1.txt ./1.txt
[root@jinkai01 ~]# ls -l
总用量 12
lrwxrwxrwx 1 root root 15 8月 3 16:20 1.txt -> /root/abc/1.txt

删除源 软连接就会error

[root@jinkai01 abc]# rm -f 1.txt
[root@jinkai01 abc]# cd ..
[root@jinkai01 ~]# ls -l
总用量 12
lrwxrwxrwx 1 root root 15 8月 3 16:20 1.txt -> /root/abc/1.txt

  • 注意:建立软连接时尽可能使用绝对路径

硬连接

硬连接:当系统要读取一个文件时,会先读inode信息,而后再根据inode中的信息到块区域将数据取出来。而硬连接是直接再创建一个inode连接到文件放置的块区域,即进行硬连接时该文件内容没有任何变化,只是增长了一个指向这个文件的inode,并不会额外占用磁盘空间。硬连接有两个限制: (1)不能跨文件系统,由于不一样的文件系统有不一样的inode table; (2) 不能连接目录。
复制文件,两个文件相互为硬连接,无论源与目的;删除源不受影响
不容许将硬连接指向目录
不能跨分区作硬连接;好比/boot下 没法作到/下

建立硬连接

格式:
ln [源文件路径][硬连接文件]

[root@jinkai01 ~]# ln a.txt aa.txt
[root@jinkai01 ~]# ls -l
-rw-r--r-- 2 root root 12 8月 3 15:55 aa.txt
-rw-r--r-- 2 root root 12 8月 3 15:55 a.txt

实验:咱们编辑a.txt文件,而后查看aa.txt文件会发现,a.txt的内容会同步到aa.txt文件里面
实验前:

[root@jinkai01 ~]# cat a.txt
11111111
22222222222222
333333333333333333
[root@jinkai01 ~]# cat aa.txt
11111111
22222222222222
333333333333333333

追加字符串4444444444到a.txt中

[root@jinkai01 ~]# echo 444444444 >> a.txt

查询a.txt文件与aa.txt文件内容

[root@jinkai01 ~]# cat a.txt
11111111
22222222222222
333333333333333333
444444444
[root@jinkai01 ~]# cat aa.txt
11111111
22222222222222
333333333333333333
444444444

  • 硬连接的主要是存储在ilod号上;
    ls -i 
    查询ilod号发现:a.txt的ilod号与aa.txt的ilod号都是一个1683236 ;

    [root@jinkai01 ~]# ls -i16832369 1.txt 16832368 aa.txt 16797762 anaconda-ks.cfg16831353 2 21175 abc 16832368 a.txt

相关文章
相关标签/搜索