目录
1 特殊权限set_uid
set_uid:针对二进制可执行文件,使文件在执行阶段具有文件所有者的权限
系统passwd文件,所有者权限位上,第三位是s
#ls -l /usr/bin/passwd
[root@worker1 ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014
切换到普通用户user:
查看root目录,提示权限不够
[root@worker1 ~]# su - user
Last login: Mon Sep 17 18:10:53 CST 2018 on pts/1
[user@worker1 ~]$ whoami
user
[user@worker1 ~]$ ls /root/
ls: cannot open directory /root/: Permission denied
[user@worker1 ~]$
root用户:
增加普通用户有临时的root权限
#chmod u+s /usr/bin/ls
[root@worker1 ~]# chmod u+s /usr/bin/ls
普通用户user:
#ls /root/
[user@worker1 ~]$ ls /root/
anaconda-ks.cfg
取消普通用拥有root权限
[root@worker1 ~]# chmod u-s /usr/bin/ls
另一种方式赋值权限:
#chmod u=rws /usr/bin/ls
root用户:
[root@worker1 ~]# chmod u=rws /usr/bin/ls
user用户:
[user@worker1 ~]$ ls /root/ //也具有权限查看根目录内容
anaconda-ks.cfg
[user@worker1 ~]$ ls -l /usr/bin/ls //所有者第三位变成了大写s,是因为没有x权限,增加以后就变成小写s了
-rwSr-xr-x. 1 root root 117616 Nov 20 2015 /usr/bin/ls
root用户:
#chmod u+x /usr/bin/ls
[root@worker1 ~]# chmod u+x /usr/bin/ls
user用户:
[user@worker1 ~]$ ls -l /usr/bin/ls //增加x权限后变为小写s了
-rwsr-xr-x. 1 root root 117616 Nov 20 2015 /usr/bin/ls
2 特殊权限set_gid
stick_bit:对二进制可执行文件和目录,在执行阶段具有文件所属组的权限
对根目录操作:
user用户:
[user@worker1 lesson9]$ ls /root/
ls: cannot open directory /root/: Permission denied
root用户:
#chmod g+s /usr/bin/ls
#ls -l /usr/bin/ls //所属组第三位为s
[root@worker1 ~]# chmod g+s /usr/bin/ls
[root@worker1 ~]# ls -l /usr/bin/ls
-rwxr-sr-x. 1 root root 117616 Nov 20 2015 /usr/bin/ls
user用户:
#ls /root/
[user@worker1 lesson9]$ ls /root/ //可以查看root目录的内容
anaconda-ks.cfg
创建dir2目录,并set_gid:
#mkdir dir2
#chmod g+s dir2 //所属组是user
#chown :user dir2/
#mkdir dir2/dir3
#touch dir2/file1.txt
[root@worker1 lesson9]# mkdir dir2
[root@worker1 lesson9]# chmod g+s dir2
[root@worker1 lesson9]# chown :user dir2
[root@worker1 lesson9]# mkdir dir2/dir3
[root@worker1 lesson9]# touch dir2/file1.txt
[root@worker1 lesson9]# ls -l dir2
total 0
drwxr-sr-x 2 root user 6 Sep 17 18:51 dir3
-rw-r--r-- 1 root user 0 Sep 17 18:51 file1.txt
将dir2目录取消set_gid:
#chmod g-s dir2
#mkdir dir2/dir4/
#touch dir2/file2.txt
#ls -l dir2/
[root@worker1 lesson9]# chmod g-s dir2
[root@worker1 lesson9]# mkdir dir2/dir4/
[root@worker1 lesson9]# mkdir dir2/file2.txt
[root@worker1 lesson9]# ls -l dir2/
total 0
drwxr-sr-x 2 root user 6 Sep 17 18:51 dir3
drwxr-xr-x 2 root root 6 Sep 17 18:58 dir4
-rw-r--r-- 1 root user 0 Sep 17 18:51 file1.txt
drwxr-xr-x 2 root root 6 Sep 17 18:58 file2.txt
由上可知dir2下子文件和子目录的所属组用户与父目录set_gid的所属组有关
3 特殊权限stick_bit
$ls -ld /tmp/
[user@worker1 ~]$ ls -ld /tmp/
drwxrwxrwt. 8 root root 4096 Sep 17 17:56 /tmp/
user用户:
$cd /tmp/
$touch file1.txt
$chmod 777 file1.txt
$vi file1.txt //添加内容
[user@worker1 tmp]$ touch file1.txt
[user@worker1 tmp]$ chmod 777 file1.txt
[user@worker1 tmp]$ vi file1.txt
在tmp目录下:
user1用户:
$su - user1
$vi file1.txt //修改内容,随意修改
$rm -f file1.txt 不可以删除,就是防删除
[user1@worker1 tmp]$ vi file1.txt
[user1@worker1 tmp]$ rm -f file1.txt
rm: cannot remove ‘file1.txt’: Operation not permitted
在/tmp/dir1目录下:
user用户:
$mkdir dir1
$chmod 777 dir1/
[user@worker1 tmp]$ mkdir dir1
[user@worker1 tmp]$ chmod 777 dir1/
user1用户:
$cd dir1/
$touch file2.txt
$mkdir dir2/
$rm file2.txt
$rm dir2
[user@worker1 dir1]$ touch file2.txt
[user@worker1 dir1]$ mkdir dir2
[user1@worker1 dir1]$ rm file2.txt
rm: remove write-protected regular empty file ‘file2.txt’? y
[user1@worker1 dir1]$ rm -r dir2/
rm: remove write-protected directory ‘dir2/’? y
[user1@worker1 dir1]$ ls
由上可知:不是文件或目录本身的权限,而是所在目录的权限
4 软链接文件
软链接:是建立一个独立的文件,当读取这个链接文件时,它会把读取的行为转发到改文件所链接的文件上
#ls -l /bin
#/bin/ls //查看
#/usr/bin/ls
[root@worker1 tmp]# ls -l /bin
lrwxrwxrwx. 1 root root 7 Sep 5 22:52 /bin -> usr/bin
[root@worker1 tmp]# /bin/ls
dir1 lesson8 lesson9 yum.log
[root@worker1 tmp]# /usr/bin/ls
dir1 lesson8 lesson9 yum.log
软链接操作:
ln -s /root/dir1/file1.txt /tmp/dir1/file.txt //目录做软链接
不同目录做软链接
来源文件:
#mkdir /root/dir1
#touch /root/dir1/file1.txt
#echo "hello world" > file1.txt
[root@worker1 dir1]# mkdir /root/dir1/
[root@worker1 dir1]# touch /root/dir1/file1.txt
[root@worker1 dir1]# echo "hello world" > file1.txt
目标文件:
#mkdir /tmp/dir/
#ln -s /root/dir1/file1.txt /tmp/dir1/file.txt
[root@worker1 dir1]# mkdir /tmp/dir1/
[root@worker1 dir1]# ln -s /root/dir1/file1.txt /tmp/dir1/file.txt
[root@worker1 dir1]# cat /tmp/dir1/file.txt
hello world
同目录下做软链接:
[root@worker1 tmp]# mkdir /tmp/dir1/
[root@worker1 tmp]# mkdir /tmp/dir2/
[root@worker1 tmp]# touch /tmp/dir1/yumbak.log
[root@worker1 tmp]# echo "hello world" > /tmp/dir1/yumbak.log
[root@worker1 tmp]# cd /dir1/
[root@worker1 dir1]# ln -s yumbak.log log1
[root@worker1 dir1]# ls -l
total 4
lrwxrwxrwx 1 root root 20 Sep 17 19:53 file.txt -> /root/dir1/file1.txt
lrwxrwxrwx 1 root root 10 Sep 17 20:54 log1 -> yumbak.log
-rw-r--r-- 1 root root 12 Sep 17 20:41 yumbak.log
[root@worker1 dir1]# cat log1
hello world
对软链接文件移动到/tmp/dir2/目录下,再查看log1软链接文件,出现找不到源文件
[root@worker1 dir1]# mv log1 /tmp/dir2/ //将log1软链接移动到/tmp/dir2/下
[root@worker1 dir1]# cd /tmp/dir2/
[root@worker1 dir2]# ls -l
total 0
lrwxrwxrwx 1 root root 10 Sep 17 20:54 log1 -> yumbak.log
[root@worker1 dir2]# cat log1 //找不到链接文件
cat: log1: No such file or directory
由上可知,文件软链接尽量使用绝对路径,不要使用相对路径
5 硬连接文件
硬链接:读取一个文件时,会先读inode信息,再根据inode中的信息到信息块区域将数据去出来;而硬链接是直接再建立一个inode链接到文件放置的块区域,即进行硬链接时改文件内容没有任何变化,只是增加一个执行这个文件的inode,并不会格外占用磁盘空间。硬链接有两个限制:不能跨文件系统,因为不同的文件系统有不同的inode table;不能链接目录
#cd /tmp/dir1/
#ln /tmp/yumbak.log /tmp/1_hard.txt //硬链接
#ln -s /tmp/1.txt /tmp/1_soft.txt //软链接
[root@worker1 dir1]# cd /tmp/dir1
[root@worker1 dir1]# ls
file.txt yumbak.log
[root@worker1 dir1]# ln -s /tmp/dir1/yumbak.log /tmp/dir1/soft.log
[root@worker1 dir1]# ln /tmp/dir1/yumbak.log /tmp/dir1/hard.log
[root@worker1 dir1]# ls -il
total 8
68312209 lrwxrwxrwx 1 root root 20 Sep 17 19:53 file.txt -> /root/dir1/file1.txt
101444005 -rw-r--r-- 2 root root 12 Sep 17 20:41 hard.log
68312213 lrwxrwxrwx 1 root root 20 Sep 17 21:12 soft.log -> /tmp/dir1/yumbak.log
101444005 -rw-r--r-- 2 root root 12 Sep 17 20:41 yumbak.log
软链接的inode 与源文件不同,只是一个文件链接,会占比较小空间,删除了不会影响源文件
硬链接的inode 与源文件相同,只是对文件inode增加一个指向,真正存文件就是inode,表示一个文件,不会占空间
硬链接不能跨分区创建:
因为不同分区下,有相同的inode,因为系统分区的时候inode已经分配好了而且都有自己独立体系的inode
[root@worker1 dir1]# ln /tmp/dir1/yumbak.log /boot/test.log
ln: failed to create hard link ‘/boot/test.log’ => ‘/tmp/dir1/yumbak.log’: Invalid cross-device link