《Linux就该这么学》课堂学习笔记_07

Linux值得学习的原因绝不仅仅是因为开源,而是因为Linux系统是一款非常优秀的产品

文件的特殊权限

在复杂多变的生产环境中,单纯设置文件的rwx权限无法满足我们对安全和灵活性的需求,因此便有了SUID、SGID与SBIT的特殊权限位。

1.  SUID

SUID可以让执行者临时获得所有人的权限

[root@linuxprobe ~]# ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jan 29 2017 /bin/passwd

命令:chmod -R u+s 目录               参数:-R 表示对目录使用

[root@localhost ~]# ls -ld /home/linuxprobe/    查看/home/linuxprobe目录的权限
drwx------. 5 linuxprobe linuxprobe 4096 Feb 28 21:20 /home/linuxprobe/
[root@localhost ~]# chmod -R u+s /home/linuxprobe/    为该目录设置SUID权限
[root@localhost ~]# ls -ld /home/linuxprobe/    再次查看该目录权限
drws------. 5 linuxprobe linuxprobe 4096 Feb 28 21:20 /home/linuxprobe/

查看/home/linuxprobe目录属性时发现所有者的权限由rwx变成了rws,其中x改变成s就意味着该文件被赋予了SUID权限。另外有读者会好奇,那么如果原本的权限是rw-呢?如果原先权限位上没有x执行权限,那么被赋予特殊权限后将变成大写的S。

扫描二维码关注公众号,回复: 9484943 查看本文章

2.  SGID

SGID主要实现如下两种功能:

1)可以让执行者临时获得所有组的权限

2)可以对目录使用SGID,使目录内创建的文件全部继承所有组的属性(用于共享目录)

命令:chmod -R g+s 目录

[root@localhost ~]# ls -ld /home/linuxprobe/    查看/home/linuxprobe目录的属性
drws------. 5 linuxprobe linuxprobe 4096 Feb 28 21:20 /home/linuxprobe/
[root@localhost ~]# chmod -R g+s /home/linuxprobe    为该目录设置SGID权限
[root@localhost ~]# ls -ld /home/linuxprobe/
drws--S---. 5 linuxprobe linuxprobe 4096 Feb 28 21:20 /home/linuxprobe/
[root@localhost ~]# 

查看/home/linuxprobe目录属性时发现所有者的权限由---变成了--S,其中-改变成S就意味着该文件被赋予了SGID权限。另外有读者会好奇,那么如果原本的权限是--x呢?如果原先权限位已经存在x执行权限,那么被赋予特殊权限后将变成小写的s。

[root@localhost ~]# useradd zhangsan    创建用户张三
[root@localhost ~]# 
[root@localhost ~]# chmod -R 777 /home/linuxprobe    给/home/linuxprobe赋予一般权限777
[root@localhost ~]# 
[root@localhost ~]# ls -ld /home/linuxprobe/    查看/home/linuxprobe目录   发现所有者所有组都是linuxprobe
drwsrwsrwx. 5 linuxprobe linuxprobe 4096 Feb 28 21:20 /home/linuxprobe/
[root@localhost ~]# 
[root@localhost ~]# id zhangsan    查看张三的基本组和扩展组名称
uid=1001(zhangsan) gid=1001(zhangsan) groups=1001(zhangsan)
[root@localhost ~]# 
[root@localhost ~]# su - zhangsan    切换为张三用户
[zhangsan@localhost ~]$ 
[zhangsan@localhost ~]$ touch /home/linuxprobe/zhangsan    在/home/linuxprobe目录下创建文件zhangsan
[zhangsan@localhost ~]$ ls -l /home/linuxprobe/zhangsan    查看zhangsan文件的属性
-rw-rw-r--. 1 zhangsan linuxprobe 0 Feb 29 10:40 /home/linuxprobe/zhangsan    发现所有者为zhangsan,所有组为Linuxprobe(继承了目录所有组的属性)

3.SBIT

粘滞位:为了方便记忆我们暂且称之为保护位,主要是为了防止有人会误删你创建的文件

设置了SBIT之后,只有文件的所有者才能删除该文件

命令:chmod -R o+t 目录

[linuxprobe@localhost ~]$ cd /tmp    进入/tmp目录
[linuxprobe@localhost tmp]$ ls -ld /tmp    查看/tmp目录的属性
drwxrwxrwt. 13 root root 4096 Feb 29 11:07 /tmp
[linuxprobe@localhost tmp]$ echo "hello world" > readme.txt    创建一个文件,随便写入一些内容
[linuxprobe@localhost tmp]$ ls -ld /tmp/readme.txt    查看该文件属性 
-rw-rw-r--. 1 linuxprobe linuxprobe 12 Feb 29 11:07 /tmp/readme.txt
[linuxprobe@localhost tmp]$ su - zhangsan    切换至zhangsan用户
Password: 
Last login: Sat Feb 29 11:04:42 CST 2020 on pts/0
[zhangsan@localhost ~]$ rm -f /tmp/readme.txt     试图删除readme.txt文件
rm: cannot remove ‘/tmp/readme.txt’: Operation not permitted
[zhangsan@localhost ~]$ rm -rf /tmp/readme.txt    删除无效
rm: cannot remove ‘/tmp/readme.txt’: Operation not permitted

与前面所讲的SUID和SGID权限显示方法不同,当目录被设置SBIT特殊权限位后,文件的其他人权限部分的x执行权限就会被替换成t或者T,原本有x执行权限则会写成t,原本没有x执行权限则会被写成T

 文件的隐藏属性

Linux系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限

使用传统的ls -al是无法查看到的,只能使用lsattr才可以查看到

命令:chattr 负责添加或者删除隐藏属性

           lsattr  负责查看隐藏属性

[root@localhost ~]# echo "welcome to linuxprobe" > readme.txt    创建一个文件并随便写一些内容
[root@localhost ~]# ls -ld readme.txt 查看readme.txt的属性,并无任何异常 -rw-r--r--. 1 root root 22 Feb 29 11:19 readme.txt [root@localhost ~]# chattr +a readme.txt 使用chattr为该文件赋予隐藏属性 a:表示只能追加内容,不可以清空内容 +a:表示添加该属性 -a:表示移除该属性 [root@localhost ~]# lsattr readme.txt 使用lsattr发现了该文件的隐藏属性 -----a---------- readme.txt [root@localhost ~]# echo "111" >> readme.txt 此时发现可以追加内容 [root@localhost ~]# echo "111" > readme.txt 然而并不能清空内容 -bash: readme.txt: Operation not permitted

 文件访问控制列表

前文讲解的一般权限、特殊权限、隐藏权限其实有一个共性—权限是针对某一类用户设置的。如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)了

只有root用户才能访问/root,其他用户是没有这个权限的,通过设置setfacl 可以实现Linuxprobe用户访问/root目录的操作

命令:setfacl  用于设置ACL

           getfacl  用于查看ACL属性

[root@localhost ~]# setfacl -Rm u:linuxprobe:rwx /root    设置setfacl,  -R:表示对目录  -m:表示对普通文件  u:表示针对用户
[root@localhost ~]# ls -ld /root    查看/root目录的属性,发现末尾的.变成了+  代表设置了setfacl
dr-xrwx---+ 14 root root 4096 Feb 29 11:19 /root
[root@localhost ~]# su - linuxprobe    切换至linuxprobe用户
Last login: Sat Feb 29 11:30:15 CST 2020 on pts/0
[linuxprobe@localhost ~]$ ls /root    查看/root目录内容
anaconda-ks.cfg  Downloads             Pictures    Templates
Desktop          initial-setup-ks.cfg  Public      Videos
Documents        Music                 readme.txt
[linuxprobe@localhost ~]$ cd /root    进入/root目录
[linuxprobe@localhost root]$ 

红色标注操作在未使用setfacl时是无法操作的。

接下来通过getfacl来查看/root目录下的使用权限,发现user:一栏中 Linuxprobe用户拥有读写执行权限

linuxprobe@localhost root]$ getfacl /root
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::r-x
user:linuxprobe:rwx
group::r-x
mask::rwx
other::---
[linuxprobe@localhost root]$ 

su命令与sudo服务

su

su命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户,比如从root管理员切换至普通用户

[linuxprobe@localhost ~]$ su linuxprobe
Password: 
[linuxprobe@localhost ~]$ 
[linuxprobe@localhost ~]$ su root
Password: 
[root@localhost linuxprobe]# 
[root@localhost linuxprobe]# su - linuxprobe
Last login: Sat Feb 29 12:43:38 CST 2020 on pts/0
[linuxprobe@localhost ~]$ 

su   命令可以切换用户

su - 命令同样可以切换用户,并且将环境变量完全切换过来

sudo

sudo命令用于给普通用户提供额外的权限来完成原本root管理员才能完成的任务(适当放权),格式为“sudo [参数] 命令名称”

[linuxprobe@localhost ~] visudo

使用visudo命令进入编辑器

set nu 命令显示行号

使用ESC键后输入:set nu,在99行左右的位置输入如下内容

99 linuxprobe ALL=(root) /usr/sbin/reboot

谁可以使用  允许使用的主机=(以谁的身份)  可执行命令的列表

linuxprobe表示对谁进行放权

ALL表示主机地址来源为任意地址

(root)表示可以使用谁的权限,可以使用root或者ALL

最后/user/sbin/reboot为reboot命令的绝对路径,可以通过whereis reboot查看

这里注意必须要使用绝对路径

[root@localhost ~]# su - linuxprobe    切换为linuxprobe用户
Last login: Sat Feb 29 12:57:47 CST 2020 on :0
[linuxprobe@localhost ~]$ 
[linuxprobe@localhost ~]$ 
[linuxprobe@localhost ~]$ reboot    尝试重启,但是失败了
User root is logged in on seat0.
Please retry operation after closing inhibitors and logging out other users.
Alternatively, ignore inhibitors and users with 'systemctl reboot -i'.
[linuxprobe@localhost ~]$ 
[linuxprobe@localhost ~]$ sudo reboot    使用sudo命令进行重启
[sudo] password for linuxprobe:     输入Linuxprobe用户的密码后即可重启

猜你喜欢

转载自www.cnblogs.com/tjzxx/p/12382503.html
今日推荐