1.0隐藏权限lsattr_chattr
chattr隐藏权限
man chattr 查看用法
语法:chattr[+-=][Asaci][文件或者目录]
[root@linux1 ~]# chattr --help
Usage: chattr [-RVf] [-+=aAcCdDeijsStTu] [-v version] files...
-R 递归处理,将指定目录下的所有文件及子目录一并处理。
-v<版本编号> 设置文件或目录版本。
-V 显示指令执行过程。
+<属性> 开启文件或目录的该项属性。
-<属性> 关闭文件或目录的该项属性。
=<属性> 指定文件或目录的该项属性。
- 演示
[root@linux1 ~]# chattr +i 1.txt
[root@linux1 ~]# vi 1.txt
- 提示文件权限不够
[root@linux1 ~]# head -n2 /etc/passwd > 1.txt
-bash: 1.txt: 权限不够
- 查看权限是777怎么没权限呢?
[root@linux1 ~]# ls -l 1.txt
-rwxrwxrwx. 1 centos centos 0 8月 29 11:26 1.txt
- 这时候考虑有没有隐藏权限
lsattr查看隐藏权限
[root@linux1 ~]# lsattr 1.txt
----i----------- 1.txt
注:正常情况下新建一个文件是没有隐藏权限的,加了i权限之后不能mv(重命名,移动)rm(删除)vi(编辑)touch(更改时间)>(覆盖)
去掉 i权限
[root@linux1 ~]# chattr -i 1.txt
chattr +a 1.txt只能追加 不允许其他操作
[root@linux1 ~]# chattr +a 1.txt
[root@linux1 ~]# mv 1.txt 2.txt
mv: 无法将"1.txt" 移动至"2.txt": 不允许的操作
[root@linux1 ~]# rm 1.txt
rm:是否删除普通空文件 "1.txt"?y
rm: 无法删除"1.txt": 不允许的操作
[root@linux1 ~]# head -n2 /etc/passwd > 1.txt
-bash: 1.txt: 不允许的操作
[root@linux1 ~]# head -n2 /etc/passwd >> 1.txt
[root@linux1 ~]# cat 1.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
可以看的出赋予1.txt a隐藏权限。允许追加,类似日志,还允许touch(更改时间)不允许其他操作
如何全掉a权限?
[root@linux1 ~]# chattr -a 1.txt
2.特殊权限set_uid
概述:
1.set_uid 只能作用于二进制可执行文件,对普通文本文件无效
2.普通用户执行拥有该权限的二进制文件时,可以使普通用户临时拥有root权限(例如:更改密码的命令 /usr/bin/passwd 对除 root 以外的用户不可读、不可写和不可执行,但是普通用户同样可以使用该命令更改自己的密码)
- s 就是set_uid的权限
- 代表普通用户临时拥有root权限
- 是二进制文件,是一个可执行的文件
- 当普通用户执行这种类型的文件,临时拥有所属者的权限
如何给文件赋予set_uid权限
[root@linux1 ~]# ls -l /usr/bin/ls
-rwxr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls
[root@linux1 ~]# chmod u+s /usr/bin/ls
[root@linux1 ~]# ls -l /usr/bin/ls
-rwsr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls
赋予set_uid权限是让普通用户拥有所有者身份(临时拥有root权限)
测试用普通用户登录系统
[root@linux1 ~]# su - centos
[centos@linux1 ~]$ ls -l
总用量 0
[centos@linux1 ~]$ ls -l /root/
总用量 24
drwxrwxrwx. 2 centos centos 32 8月 29 11:44 123
-rwxrwxrwx. 1 centos centos 65 8月 30 12:26 1.txt
-rw-rw-r--. 1 root root 0 8月 29 12:07 3.txt
-rw-------. 1 root root 1177 8月 27 00:40 anaconda-ks.cfg
如何给文件全掉set_uid权限
[root@linux1 ~]# chmod u-s /usr/bin/ls
[root@linux1 ~]# ls -l /usr/bin/ls
-rwxr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls
再用普通用户执行命令
[centos@linux1 ~]$ ls -l /root/
ls: 无法打开目录/root/: 权限不够
另外一种方法赋予set_uid权限
[root@linux1 ~]# chmod u=rws /usr/bin/ls
[root@linux1 ~]# ls -l /usr/bin/ls
-rwSr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls
这时候看到权限是rwS,是因为没有x可执行权限。但是不影响,普通用户还是可以执行,可以赋予x可执行权限就会S变s
[root@linux1 ~]# chmod u+x /usr/bin/ls
[root@linux1 ~]# ls -l /usr/bin/ls
-rwsr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls
没有x权限也可以直接执行?
s也有执行权限,所以可以直接执行、ls命令普通用户权限本来就可以执行
目录也可以加s权限,但是没有意义
3.特殊权限set_gid
概况:
可以应用在文件上同样可以作用在目录。设置文件上和set_uid类似,前提两个文件是可以执行的二进制文件,设置set_gid,执行文件的用户临时以该文件所属组的身份执行。要是目录被设置这个权限,在此目录下创建文件或者目录与子目录和该目录的所属组相同。
set_gid作用在组权限位上
s权限意味着,除了这个文件的所属组之外。其他用户在执行命令一瞬间拥有所属组的权限
[root@linux1 ~]# ls -ld /root/
dr-xr-x---. 4 root root 227 8月 30 12:25 /root/
root所属组权限位r-x,可读可执行,所以普通用户拥有set_gid权限,所以可以使用root所属组权限可以查看root目录文件
[root@linux1 ~]# su - centos
[centos@linux1 ~]$ ls -l /root/
总用量 24
drwxrwxrwx. 2 centos centos 32 8月 29 11:44 123
-rwxrwxrwx. 1 centos centos 65 8月 30 12:26 1.txt
-rw-rw-r--. 1 root root 0 8月 29 12:07 3.txt
-rw-------. 1 root root 1177 8月 27 00:40 anaconda-ks.cfg
没有所属组权限没有set_gid权限,会提示权限不够
[root@linux1 ~]# chmod g-s /usr/bin/ls //root用户先减set_gid权限
[centos@linux1 ~]$ ls -l /root/ //普通用户执行
ls: 无法打开目录/root/: 权限不够
set_gid权限可以作用在目录上。给123目录赋予s权限
[root@linux1 ~]# chmod g+s 123/
查看权限
[root@linux1 ~]# ls -ld 123
drwxrwsrwx. 2 centos centos 32 8月 29 11:44 123
更改用户组
[root@linux1 ~]# chown root:centos 123
[root@linux1 ~]# ls -ld 123
drwxrwsrwx. 2 root centos 32 8月 29 11:44 123
在123目录下创建一个文件
[root@linux1 ~]# touch 123/3.txt
[root@linux1 ~]# ls -ld 123/3.txt
-rw-r--r--. 1 root centos 0 8月 30 13:15 123/3.txt
新建文件所属组也是centos
注:当给目录set_gid权限时,它下面创建子目录和文件都会跟着父级目录。
4.0特殊权限stick_bit
系统中的/tmp/目录是拥有stick_bit权限的
[root@linux1 ~]# ls -ld /tmp/
drwxrwxrwt. 21 root root 4096 8月 29 19:04 /tmp/
- 注:它的权限位在其他用户上,防删除位,防止别人删除自己的文件,root用户除外
普通用户(centos这是用户)在tmp创建一个文件
[centos@linux1 tmp]$ touch 1.txt
用centos1用户去删除centos用户的文件
[centos1@linux1 tmp]$ rm 1.txt
rm:是否删除有写保护的普通空文件 "1.txt"?y
rm: 无法删除"1.txt": 不允许的操作
增加stick_bit放删除位
chmod o+t 目录
总结:
1.这drwxrwxrwt.里面的t(t里面包含x权限),就是stick_bit权限,stick_bit(t):又叫做防删除位。
2.只对目录有效,对文件无效。
3.在/tmp/下有很多类似的文件,拥有777权限,说明任何一个用户都可对这个目录可写,并创建自己的文件
5.0软连接
软连接
命令: ln -s 原文件 目标文件
特征:
1.相当于windows的快捷方式
2.只是一个符号连接,所以软连接文件大小都很小
3.当运行软连接的时候,会根据连接指向找到真正的文件,然后执行
4.所有软连接文件的权限是777,而真正的权限是由指向的那个文件决定的
5.原文件丢失,软连接无法访问,会报找不到的错误
6.ls -al以后,软连接后面箭头指向的是原文件
/bin相当于/usr/bin的快捷方式
[root@linux1 ~]# ls -l /bin
lrwxrwxrwx. 1 root root 7 8月 27 00:34 /bin -> usr/bin
链接文件的大小和路径有关,路径越长,文件越大。
如何创建软连接
ls -s 源文件 创建软连接文件
[root@linux1 ~]# tree 123
123
├── 1.txt
├── 234
│ └── 1.txt
├── 2.txt
└── 3.txt
创建软连接
[root@linux1 ~]# ln -s /root/123/2.txt /root/123/234/2.txt
[root@linux1 ~]# tree 123
123
├── 1.txt
├── 234
│ ├── 1.txt
│ └── 2.txt -> /root/123/2.txt
├── 2.txt
└── 3.txt
1 directory, 5 files
软连接也可以链接目录
[root@linux1 ~]# ln -s /root/123/234/ /root/123/345/
[root@linux1 ~]# tree 123
123
├── 1.txt
├── 234
│ ├── 1.txt
│ └── 2.txt -> /root/123/2.txt
├── 2.txt
├── 345
│ └── 234 -> /root/123/234/
└── 3.txt
3 directories, 5 files
- 注:删除软连接目录时,后面不要加/
相对路径软连接有弊端,之前我们用到的是绝对路径,在同一个路径创建软连接就是相对路径
[root@linux1 tmp]# touch 1.txt
[root@linux1 tmp]# ln -s 1.txt 2.txt 注:2.txt前提没有创建
[root@linux1 tmp]# ll
总用量 64
-rw-r--r--. 1 root root 0 8月 30 21:15 1.txt
lrwxrwxrwx. 1 root root 5 8月 30 21:15 2.txt -> 1.txt
如果复制到另外一台机器上或者目录改动,那么软连接就会失效,尽量使用绝对路径。将22.txt移动到/root/123目录下,查看
[root@linux1 tmp]# mv 1.txt /root/123/
[root@linux1 tmp]# ll
总用量 64
lrwxrwxrwx. 1 root root 5 8月 30 21:15 2.txt -> 1.txt 这时候1.txt在闪烁
但是新建一个改文件,恢复正常
[root@linux1 tmp]# touch 1.txt
软连接的使用场景演示:
假设现在有一个服务器server,会生成一个日志文件run.log,路径在/boot/run.log,但是boot目录空间要满了,这时候可以把run.log复制到/目录下
# cp -i /boot/run.log /root/run.log
马上删除/boot下的run.log
rm /boot/run.log
做个软连接
ln -s /root/run.log /boot/run.log
这时候server服务继续使用的是/boot/run.log这个日志文件,是实上是个软连接,真正的位置是在/root目录,有效解决/boot空间内存不足问题。
6.0硬链接
硬连接
命令: ln 原文件 目标文件
特征:
1.原文件和连接文件的属性完全一样
2.连接文件和原文件的关系类似于:复制+同步更新
3.当原文件丢失,硬连接文件还可以访问
4.不能跨分区,不能针对目录使用
5.原理:
原文和硬链接文件的i节点号是相同的(ls -i),1个文件名对应一个i节点,1个i节点可以通过多个文件名访问,所以,他们的属性完全相同,并且修改了其中一个的内容另一个也会跟着修改件
语法:ln 源文件 硬链接文件
[root@linux1 ~]# touch 1.log
[root@linux1 ~]# ln 1.log 2.log 注:2.log存在
1.log和2.log inode相同
运行上面这条命令以后,源文件与目标文件inode号码相同,都是指向同一个inode,inode信息中的一项叫做硬链接,记录指向该inode的文件总数,这时就会增加1.
反过来说,删除一个文件名,就会使得inode节点“连接数”减1。当值为0时,表示没有文件名指向这个inode,系统就会回收这个inode号码和对应的block区域