章节简述:
Linux是一个多用户、多任务的操作系统,具有很好的稳定性与安全性,在幕后保障Linux系统安全的则是一系列复杂的配置工作。
本章将详细讲解文件的所有者、所属组以及其他人可对文件进行的读(r)、写(w)、执行(x)等操作,
以及如何在Linux系统中添加、删除、修改用户账户信息。
我们还可以使用SUID、SGID与SBIT特殊权限更加灵活地设置系统权限,来弥补对文件设置一般操作权限时所带来的不足。
隐藏权限能够给系统增加一层隐形的防护层,让黑客最多只能查看关键日志信息,而不能篡改或删除。
而文件访问控制列表(Access Control List,ACL)可以进一步让单一用户、用户组对单一文件或目录进行特殊的权限设置,
让文件具有能满足工作需求的最小权限。
最后还会讲解如何使用su命令与sudo服务让普通用户具备管理员的权限,不仅能够满足日常工作需求,还可以确保系统的安全性。
■用户身份与能力
管理员UID为0:系统的管理员用户。
系统用户UID为1~999: Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,
默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
普通用户UID从1000开始:是由管理员创建的用于日常工作的用户。
1. id命令
id命令用于显示用户详细信息,语法格式为:“id 用户名”。
它能够简单轻便的查看到用户的基本信息,例如用户ID、基本组与扩展组GID,便于我们判别某个用户是否已经存在,
以及查看到相关信息。
2. useradd命令
useradd命令用于创建新的用户账户,语法格式为:“useradd [参数] 用户名”。
可以使用useradd命令创建用户账户。使用该命令创建用户账户时,默认的用户家目录会被存放在/home目录中,默认的Shell解释器为/bin/bash,而且默认会创建一个与该用户同名的基本用户组。这些默认设置可以根据表5-1中的useradd命令参数自行修改。
3. groupadd命令
groupadd命令用于创建新的用户组,语法格式为:“groupadd [参数] 群组名”。
※在Linux系统中,一切皆为文件,配置一项服务其实就是在修改配置文件!!
用户一览命令👇👉[root@linuxprobe ~]# cat /etc/group
把用户从扩展组中删除命令👇
4. usermod命令
usermod命令用于修改用户的属性,英文全称为:“user modify”,语法格式为:“ usermod [参数] 用户名”。
5. passwd命令
passwd命令用于修改用户的密码、过期时间等信息,英文全称为:“password”,语法格式为:“ passwd [参数] 用户名”。
6. userdel命令
userdel命令用于删除已有的用户账户,英文全称为:“user delete”,语法格式为:“ userdel [参数] 用户名”。
■文件权限与归属
在Linux系统中,每个文件都有归属的所有者和所有组,并且规定了文件的所有者、所有组以及其他人对文件所拥有的读(r)、写(w)、执行(x)等权限。
对一般文件来说:
“可读”表示能够读取文件的实际内容
“可写”表示能够编辑、新增、修改、删除文件的实际内容
“可执行”则表示能够运行一个脚本程序。
对目录文件来说:
“可读”表示能够读取目录内的文件列表
“可写”表示能够在目录内新增、删除、重命名文件
“可执行”则表示能够进入该目录。
可以参考表格5-5,帮助同学们理解当文件和目录被设置rwx权限后,能够被执行的命令的区别:
文件权限的数字法表示基于字符(rwx)的权限计算而来,其目的是简化权限的表示方式。
例如,若某个文件的权限为7则代表可读、可写、可执行(4+2+1);若权限为6则代表可读、可写(4+2)。
在图5-3中,包含了文件的类型、访问权限、所有者(属主)、所属组(属组)、占用的磁盘大小、最后修改时间和文件名称等信息。
通过分析可知,该文件的类型为普通文件,所有者权限为可读、可写(rw-),所属组权限为可读(r--),除此以外的其他人也只有
可读权限(r--),文件的磁盘占用大小是34298字节,最近一次的修改时间为4月2日的凌晨23分,文件的名称为install.log。
其中排在权限前面的减号(-)是文件类型,新手经常会把它跟无权限混淆。
尽管在Linux系统中一切都是文件,但是不同的文件由于作用不同,因此类型也不尽相同,有一点点像Windows系统的后缀名。
常见的文件类型包括有:普通文件(-)、目录文件(d)、链接文件(l)、管道文件(p)、块设备文件(b)以及字符设备文件(c)。
普通文件的范围特别广泛,比如纯文本信息、服务配置信息、日志信息以及Shell脚本等等都包含在内,所以几乎在每个目录下都能看到普通
文件(-)和目录文件(d)的身影。块设备文件(b)和字符设备文件(c)一般是指硬件设备,比如鼠标、键盘、光驱、硬盘等等都是设备
文件,主要集中在/dev/目录中最为常见,不过其实很少会对鼠标键盘进行硬件级别的管理吧~
修改文件权限命令👆👉chmod 权限(数字) 文件名 递归操作需要加-R
修改文件所有者所属组命令👇👉chown 所有者:所属组 文件名 递归操作需要加-R
■文件的特殊权限
SUID、SGID与SBIT的特殊权是一种对文件权限进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。
1. SUID
SUID是一种对二进制程序进行设置的特殊权限,能够让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。
例如,所有用户都可以执行passwd命令来修改自己的用户密码,而用户密码保存在/etc/shadow文件中。仔细查看这个文件就会发现它的
默认权限是000,也就是说除了root管理员以外,所有用户都没有查看或编辑该文件的权限。但是,在使用passwd命令时如果加上SUID
特殊权限位,就可让普通用户临时获得程序所有者的身份,把变更的密码信息写入到shadow文件中。这很像在古装剧中见到的手持尚方宝剑
的钦差大臣,他手持的尚方宝剑代表的是皇上的权威,因此可以惩戒贪官,但这并不意味着他永久成为了皇上。因此这只是一种有条件的、
临时的特殊权限授权方法。
2. SGID
SGID特殊权限有两种应用场景,当对二进制程序进行设置时,能够让执行者临时获取到文件所有组的权限;而对目录进行设置时,则是让目录内新创建的文件自动继承该目录原有用户组的名称。
SUID、SGID、SBIT特殊权限的设置参数
参数 | 作用 |
u+s | 设置SUID权限 |
u-s | 取消SUID权限 |
g+s | 设置SGID权限 |
g-s | 取消SGID权限 |
o+t | 设置SBIT权限 |
o-t | 取消SBIT权限 |
3. SBIT(粘滞位 OR 保护位)
SBIT(Sticky Bit)特殊权限位(也可以称之为特殊权限位之粘滞位)。SBIT特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件。换句话说,当对某个目录设置了SBIT粘滞位权限后,那么该目录中的文件就只能被其所有者执行删除操作了。
RHEL 8系统中的/tmp作为一个共享文件的目录,默认已经设置了SBIT特殊权限位,因此除非是该目录的所有者,否则无法删除这里面的文件。
工作中对特殊权限善加使用,能够实现很多巧妙的功能,chmod命令设置特殊权限时的参数如表👇所示。
【红帽必考题·文件的隐藏属性&文件访问控制列表】
■文件的隐藏属性
Linux系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,即被隐藏起来的权限,默认情况下不能直接被用户发觉。
既然叫隐藏权限了,那肯定不能用常规的ls命令就让我们看到它的真面目,专用的设置命令是chattr,专用的查看命令是lsattr。
1. chattr命令
如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”
chattr + 权限 + 文件(隐藏功能添加到文件)
chattr - 权限 + 文件(隐藏功能移出文件)
2. lsattr命令
lsattr命令用于查看文件的隐藏权限,英文全称为:“list attributes”,语法格式为:“lsattr [参数] 文件名称”。
★在Linux系统中,文件分别保存在block块儿和inode中!
block块儿保存的是文件内容本身,而inode则保存的是文件的属性信息。
普通的rm命令其实只是删除了文件的inode,而负责文件内容存储的block块儿并没有被删除。
所以为了保险起见,可以在删除文件的时候使用“chattr +s 文件名”命令进行彻底删除!(该命令的使用方法正在确认中)
■文件访问控制列表
一般权限、特殊权限、隐藏权限其实有一个共性——权限是针对某一类用户设置的,能够对很多人同时生效。如果希望对某个指定的用户进行
单独的权限控制,就需要用到文件的访问控制列表(FACL,File Access Control Lists)了。
通俗来讲,基于普通文件或目录设置ACL访问控制其实就是针对指定的用户或用户组设置文件或目录的操作权限,更加精准的派发权限。
另外,如果针对某个目录设置了ACL,则目录中的文件会继承其权限;若针对文件设置了ACL,则文件不再继承其所在目录的权限。
1. setfacl命令(设置)
setfacl命令用于管理文件的ACL权限规则,英文全称为:“set files ACL”,语法格式为:“ setfacl [参数] 文件名称”。
ACL权限提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制,使用setfacl命令可以针对单一用户或用户组、
单一文件或目录来进行读/写/执行权限的控制。其中,针对目录文件需要使用-R递归参数;针对普通文件则使用-m参数;
如果想要删除某个文件的ACL,则可以使用-b参数。setfacl命令的常用参数如表5-9所示:
2. getfacl命令(查看)
getfacl命令用于查看文件的ACL权限规则,英文全称为:“get files ACL”,语法格式为:“ getfacl [参数] 文件名称”。
getfacl命令用于显示文件上设置的ACL信息,格式为“getfacl 文件名称”。Linux系统中的命令就是这么又可爱又好记。想要设置ACL,
用的是setfacl命令;要想查看ACL,则用的是getfacl命令。下面使用getfacl命令显示在root管理员家目录上设置的所有ACL信息。
★备份ACL权限的注意事项(👆书上有误)
getfacl命令在备份目录权限时不能使用绝对路径的形式,因此我们需要进入目标目录或目标文件的所在目录,然后再进行备份操作。
通过备份文件恢复ACL权限时同理👆
命令格式👉getfacl -R 目录名称(例如:happy) > backup.acl(备份文件名称)
★Linux下“/”和“~”的区别
”/“是根目录,”~“是家目录。Linux存储是以挂载的方式,相当于是树状的,源头就是”/“,也就是根目录。
而每个用户都有”家“目录,也就是用户的个人目录,比如root用户的”家“目录就是/root,普通用户a的家目录就是/home/a.
★linux的绝对路径跟相对路径分别是什么意思?
1、绝对路径
从根目录开始,依次将各级子目录的名字组合起来,形成的路径就称为某个文件的绝对路径。例如,根目录(/)下有目录usr,usr目录下有子目录bin,bin目录下有文件chsh,则chsh文件的绝对路径就是:/usr/bin/chsh
2、相对路径
相对当前所在路径的位置,例如当前所在的位置为/usr,也就是在根目录的usr子目录下,则chsh文件相对当前位置的路径为:bin/chsh
在路径中一些特殊符号的说明:
。 表示用户所处的当前目录;
…… 表示上级目录;
~ 表示当前用户自己的家目录;
~USER 表示用户名为USER的家目录,这里的USER是在/etc/passwd中存在的用户名。
■su命令与sudo服务
su命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户,比如从root管理员切换至普通用户:
sudo命令用于给普通用户提供额外的权限,语法格式为:“ sudo [参数] 用户名”。
★visudo=vim /etc/sudoers 推荐使用visudo命令 注意点:写参数时建议在中下部编写,因为命令是由上而下执行的!
visudo命令还可以对配置文件内的参数进行语法检查,在发现参数错误时进行报错提醒,比用户直接修改文件更友好、安全、方便。
visudo命令执行后,输入“:set nu”可以显示行号!
★同学们请细心留意上面的用户身份变换,visudo命令只有root管理员才可以执行,普通用户使用会提示权限不足。