二周第四次课
2.18 特殊权限set_uid
2.19 特殊权限set_gid
2.20 特殊权限stick_bit
2.21 软链接文件
2.22 硬连接文件
一、 特殊权限set_uid
set_uid:该权限针对二进制可执行文件,使文件在执行阶段具有文件所有者的权限; 通俗一点讲就是,普通用户想要访问一个没有其他用户可执行权限的目录时,暂时借助二进制文件的所属主权限去访问这个目录,如果没有s权限,就不能访问; 注意:普通用户要有这个二进制文件的可执行权限。如果没有,那也是不能访问的。 我们系统中passwd命令就具有s权限。当普通用户执行passwd命令的时候,可以临时获得root权限,从而可以更改密码;
系统修改密码命令:passwd
[root@linux-151 ~]# which passwd
/usr/bin/passwd
[root@linux-151 ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 3月 29 2018 /usr/bin/passwd
系统密码文件:/etc/shadow
[root@linux-151 ~]# ls -l /etc/shadow
---------- 1 root root 663 3月 29 23:14 /etc/shadow
注意:这里所有者,所属组,其他用户都没有执行权限,但是root是超级用户,它具有至高无上的权限,所以root用户是可以修改密码的;按理说普通用户没有执行权限是没办法去修改密码的,但是我们passwd命令具有s权限,普通用户在使用命令passwd时,可以临时获取到passwd所属主的root权限,所以能修改密码。
例子:使用普通用户查看/root/目录:
[root@linux-151 ~]# ls -ld /root/ //root目录没有其他用户可执行权限;
dr-xr-x---. 3 root root 163 3月 29 23:45 /root/
[root@linux-128 ~]# su - lem //切换用户
上一次登录:一 3月 29 23:56:30 CST 2018pts/0 上
[lem@linux-151 ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够 //没有权限
我们怎样才能让普通用户lem打开/root/目录呢? 解:我们给ls命令加上一个s权限,让用户lem临时拥有ls的所有者权限;例如:
[root@linux-151 ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
[root@linux-151 ~]# chmod u+s /usr/bin/ls
[root@linux-151 ~]# ls -l /usr/bin/ls
-rwsr-xr-x. 1 root root 117656 3月 29 2018 /usr/bin/ls
[root@linux-151 ~]# su - lem
上一次登录:五 3月 29 00:18:52 CST 2018pts/0 上
[lem@linux-151 ~]$ ls /root/
anaconda-ks.cfg
设置s权限:
chmod u+s 二进制文件名
chmod u=rws 二进制文件名
chmod 4755 二进制文件名 这个4是这样得出来的:
suid = 4
sgid = 2
stick_bit = 1
取消s权限:
chmod u-s
chmod u=rws
chmod 755
二、 特殊权限set_gid
set_gid:该权限可以作用在二进制可执行文件上,也可以作用在目录上。当作用在文件上时,其功能和set_uid一样,它会使文件在执行阶段具有该文件所属组的权限。作用在目录上时,任务用户在此目录下创建的文件和目录都具有和该目录所属组相同的组(假设将123目录所属组设置为user,并对123目录赋予set_gid权限,当root用户在该目录下创建子目录或子文件的所属组也均为user)。
设置s权限:
chmod g+s 二进制文件名或目录
chmod g=rws 二进制文件名或目录
chmod 2755 二进制文件名或目录
例:作用在二进制文件上
[root@linux-151 ~]# ls -l /bin/ls
-rwxr-xr-x. 1 root root 112664 3月 29 2018 /bin/ls
[root@linux-151 ~]# chmod g+s /bin/ls \\/bin/ls 加上sgid
[root@linux-151 ~]# !ls
ls -l /bin/ls
-rwxr-sr-x. 1 root root 112664 3月 29 2018 /bin/ls
[root@linux-151 ~]# su - lem
[lem@linux-151 ~]$ ls /root \\lem用户会调用命令ls属组的权限去访问/root目录
111.bak 444 5.txt 777 install.log prem
222 4.txx 6.txt anaconda-ks.cfg install.log.syslog test
例子:作用于目录上
[root@linux-151 tmp]# mkdir 555 \\创建目录555
[root@linux-151 tmp]# chmod 777 555 \\设置权限所有人可读可写可执行
[root@linux-151 tmp]# su - lem \\切换用户 lem下
[lem@linux-151 ~]$ cd /tmp/555
[lem@linux-151 555]$ mkdir dir \\创建目录dir
[lem@linux-151 555]$ touch file \\创建文件file
[lem@linux-151 555]$ logout \\退出用户到root下
[root@linux-151 tmp]# chmod g+s 555 \\将目录555添加sgid权限
[root@linux-151 tmp]# su - lem \\切换用到lem下
[lem@linux-151 tmp]$ cd 555
[lem@linux-151 555]$ mkdir dir1 \\创建目录dir1
[lem@linux-151 555]$ touch file1 \\创建文件file1
[lem@linux-151 555]$ ls -l
总用量 8
drwxrwxr-x. 2 lem lem 4096 3月 29 23:04 dir
drwxrwsr-x. 2 lem root 4096 3月 29 23:06 dir1 \\创建的目录的属组是调用的目录的属组
-rw-rw-r--. 1 lem lem 0 3月 29 23:04 file
-rw-rw-r--. 1 lem root 0 3月 29 23:06 file1 \\创建的文件的属组也是调用的目录的属组
三、特殊权限stick_bit
sticky_bit:防删除位。一个目录下的文件嫩不能被删除,不是取决于文件本身的属组属组还有其他权限, 而是在于这个文件所在目录的权限是否可读可写可执行,如果目录可写,那就意味着我们可以删除目录下的任何文件。当一个目录的权限为其他人可读可写可执行的时候,那么其他用户都可以删除这个目录下的文件,包括root文件,为了防止文件被其他用户删除,我们给这这个目录增加一种特殊权限:sticky,防删除位,要用root用户操作。这样一个用户就不能删除另一个用户创建的文件了。只有root和创建文件本人才能够删除。
设置t权限:
chmod o+t 目录
chmod o=rwt 目录
chmod 1755 目录
例子:
root@linux-151 ~]# cd /tmp
[root@linux-151 tmp]# chmod o+t 666
[root@linux-151 tmp]# ls -ld 666
drwxrwxrwt. 3 root root 4096 3月 30 00:42 666
[root@linux-151 tmp]# su - user1
[user1@linux-151 ~]$ cd /tmp/666
[user1@linux-151 666]$ ls -l
总用量 8
drwxrwxr-x. 2 lem lem 4096 3月 30 00:42 11
-rw-r--r--. 1 root root 337 3月 30 00:22 1.txt
-rw-r--r--. 1 root root 0 3月 30 00:22 1.xt
-rw-rw-r--. 1 lem lem 0 10月 27 15:42 2.txt
[user1@linux-151 666]$ rm -r 111
rm: 无法删除"111": 没有那个文件或目录
[user1@linux-151 666]$ rm -r 11
rm:是否删除有写保护的目录 "11"?y
rm: 无法删除"11": 不允许的操作
[user1@linux-151 666]$ rm -r 1.txt
rm:是否删除有写保护的普通文件 "1.txt"?y
rm: 无法删除"1.txt": 不允许的操作
[user1@linux-151 666]$ rm -rf 2.txt
rm: 无法删除"2.txt": 不允许的操作
[user1@linux-151 666]$ logout
[root@linux-151 tmp]# ls
1 22.txt 3 555 6.txt file1 test1
1.txt 2.txt 3.txt 666 dir1 test yum.log
[root@linux-151 tmp]# cd 666
[root@linux-151 666]# ls
11 1.txt 1.xt 2.txt
[root@linux-151 666]# rm -rf 11
[root@linux-151 666]# ls
1.txt 1.xt 2.txt
[root@linux-151 666]# su - lem
[lem@linux-151 ~]$ cd /tmp/666
[lem@linux-151 666]$ ls -l
总用量 4
-rw-r--r--. 1 root root 337 3月 30 00:22 1.txt
-rw-r--r--. 1 root root 0 3月 30 00:22 1.xt
-rw-rw-r--. 1 lem lem 0 10月 27 15:42 2.txt
[lem@linux-151 666]$ rm 2.txt \\用户lem才能删除2.txt文件
[lem@linux-151 666]$ ls -l
总用量 4
-rw-r--r--. 1 root root 337 3月 30 00:22 1.txt
-rw-r--r--. 1 root root 0 3月 30 00:22 1.xt
四、 软链接文件
软链接:是建立一个独立的文件,当读取这个链接文件时,它会把读取的行为转发到该文件所链接的文件上。
软链接 相当于一个快捷方式
软链接的大小取决于软链接源文件的路径长短
软链接支持文件和目录
软链接的源文件不能被删除,如果删除源文件,软链接文件会失效;软链接删除,源文件不受影响。 创建软链接格式:
尽量使用绝对路径来做软链接 ln -s 源文件 目标文件(链接文件)
[root@linux-151 tmp]# ln -s /tmp/111/ /root/12
[root@linux-151 tmp]# ls -l /root
总用量 4
lrwxrwxrwx 1 root root 9 3月 30 01:12 12 -> /tmp/111/
-rw-------. 1 root root 1422 3月 30 01:51 anaconda-ks.cfg
比较源文件和软链接的大小,软连接的大小与源文件的长度有关
[root@linux-151 tmp]# du -sh /tmp/111/ /root/12
4.0K /tmp/111/
0 /root/12
du -sh 文件 \查看文件大小
df -h \查看磁盘情况
Tips:当目标文件所属磁盘剩余空间不足且需继续向该文件写入数据时,可采用软链接的方式,现将目标文件拷贝至新磁盘中,再将原磁盘中该文件删除,并在原磁盘的相同路径下做软链接文件,链接至拷贝到新磁盘中的该文件即可。
五、硬连接文件
硬链接:当系统要读取一个文件时,会先读取inode信息,然后再根据inode的信息到块区域将数据取出来。而硬链接就是直接在建立一个inode链接到文件放置的块区域,即进行硬链接时,该文件的内容没有任何变化,只是增加了一个指向这个文件的inode,并不会额外占用磁盘空间。
硬链接不能夸文件系统,不同的文件系统有不同的inode table;
硬链接不能链接目录; 格式: ln 来源文件 目标文件
[root@linux-151 tmp]# ln /tmp/123.txt /root/321.txt
[root@linux-151 tmp]# ls -lih /tmp/123.txt
8389029 -rw-r--r-- 2 root root 17K 3月 30 01:31 /tmp/123.txt
[root@linux-151 tmp]# ls -lih /root/321.txt
8389029 -rw-r--r-- 2 root root 17K 3月 30 01:31 /root/321.txt
注意:我们创建的硬链接和源文件的inode一样,大小一样。
删除源文件,硬链接不受影响
[root@linux-151 tmp]# rm /tmp/123.txt
rm:是否删除普通文件 "/tmp/123.txt"?y
[root@linux-151 tmp]# ls -l /root/321.txt
-rw-r--r-- 1 root root 16816 3月 30 01:31 /root/321.txt
硬链接不能链接目录
[root@linux-151 tmp]# ln /tmp/222/ /root/23
ln: "/tmp/222/": 不允许将硬链接指向目录