Linux就该这么学-学习笔记(五)
0x01 用户身份与能力
管理员UID为0:系统的管理员用户。
系统用户UID为1~999:Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
普通用户UID从1000开始:是由管理员创建的用于日常工作的用户。
1.useradd命令
用于创建新的用户,格式为“useradd [选项] 用户名”。
该命令创建用户账户,默认的用户家目录会存放在/home目录中,默认的Shell解释器为/bin/bash,而且默认会创建一个与该用户同名的基本用户组。
参数:
-d:指定用户的家目录(默认为/home/username)
-e:账户的到期时间,格式为YYYY-MM-DD
-u:指定该用户的默认UID
-g:指定一个初始的用户基本组(必须已存在)
-G:指定一个或多个扩展用户组
-N:不创建与用户同名的基本用户组
-s:指定该用户的默认Shell解释器
注:如果使用-s参数指定解释器为/sbin/nologin,那么该用户无法登录到系统中。
2.groupadd命令
用于创建用户组,格式为“groupadd [选项] 群组名”
3.usermod命令
用于修改用户的属性,格式为“usermod [选项] 用户名”
参数:
-c:填写用户账户的备注信息
-d -m:参数-d与参数-m连用,可重新指定用户的家目录并自动把旧的数据转移过去
-e:账户的到期时间,格式为YYYY-MM-DD
-g:变更所属用户组
-G:变更扩展用户组
-L:锁定用户禁止其登录系统
-U:解锁用户,允许其登录系统
-s:变更默认终端
-u:修改用户的UID
4.passwd命令
用于修改用户密码、过期时间、认证信息等,格式为“passwd [选项] [用户名]"。
普通用户只能修改自己的命令,而root管理员能够修改自己或他人的密码。
参数:
-l:锁定用户,禁止其登录。
-u:解除锁定,允许用户登录
--stdin:允许通过标准输入修改用户密码,如echo “NewPassWord” | passwd --stdin Username
-d:使该用户可用空密码登录系统
-e:强制用户在下次登录时修改密码
-S:显示用户的密码是否被锁定,以及密码所采用的加密算法名称
5.userdel命令
用于删除用户,格式为“userdel [选项] 用户名”。
参数:
-f:强制删除用户
-r:同时删除用户及用户家目录
0x02 文件权限与归属
常见的字符如下:
-:普通文件
d:目录文件
l:链接文件
b:块设备文件
c:字符设备文件
p:管道文件
0x03 文件的特殊权限
1.SUID
执行之后会让文件的所有者的权限从rwx变为rws,或者从rw-变成rwS。
2.SGID
两种功能:
a.让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置)
b.在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)
设置命令(注意加粗部分):
chmod -Rf g+s 目录名/
执行之后,该目录的所属组的权限从rwx变为rws,或者从rw-变为rwS。
3.SBIT
这个可以理解为保护位,也就是在多人共享目录中,自己创建的文件除了该目录的所有者以外,只有自己才能够删除。
设置命令(注意加粗部分):
chmod -R o+t 目录名/
执行之后,该目录的其他人权限从rwx变为rwt,或者从rw-变为rwT。
chmod命令:
用来设置文件或目录的权限,格式为“chmod [参数] 权限 文件或目录名称”
chown命令:
用于设置文件或目录的所有者和所属组,格式为“chown [参数] 所有者:所属组 文件或目录名称“
注:大写参数-R是用来表示递归操作,即对目录内所有的文件进行整体操作。
0x04 文件的隐藏属性
1.chattr命令
用于设置文件的隐藏权限,格式为“chattr [参数] 文件”。
如果需要将某个隐藏功能添加到文件中,则需要在命令后面添加“+参数”,反之则是“-参数”。
参数:
i:无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件。
a:仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)
S:文件内容在变更后立即同步到硬盘(sync)
s:彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)
A:不再修改这个文件或目录的最后访问时间(atime)
b:不再修改文件或目录的存取时间
D:检查压缩文件中的错误
d:使用dump命令备份时忽略本文件/目录
c:默认将文件或目录进行压缩
u:当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
t:让文件系统支持尾部合并(tail-merging)
X:可以直接访问压缩文件中的内容
2.lsattr命令
用于显示文件的隐藏权限,格式为“lsattr [参数] 文件”
0x05 文件访问控制列表
1.setfacl命令
用于管理文件的ACL规则,格式为“setfacl [参数] 文件名称”
针对目录文件需要使用-R递归参数,针对普通文件需要使用-m参数,如果想要删除某个文件的ACL,则可以使用-b参数。
注:文件权限最后的一个点(.)变为加号(+)的话,就代表该文件已经设置了ACL。
2.getfacl命令
用于显示文件上设置的ACL信息,格式为“getfacl 文件名称”
0x06 su命令与sudo服务
su命令都懂。
sudo命令用于给普通用户提供额外的权限来完成原本root管理员才能完成的任务,格式为“sudo [参数] 命令名称”
参数:
-h:列出帮助信息
-l:列出当前用户可执行的命令
-u 用户名或UID值:以指定的用户身份执行命令
-k:清空密码的有效时间,下次执行sudo时需要再次进行密码验证
-b:在后台执行指定的命令
-p:更改询问密码的提示语
注:可以使用visudo命令来配置用户权限,另外注意一点,只有root管理员才可以使用visudo命令编辑sudo服务的配置文件。
需要了解的问题
1.在RHEL7系统中,root管理员是谁?
答:是UID为0的用户,默认为root管理员。
2.如何使用Linux系统的命令行来添加或删除用户?
答:useradd和userdel
3.若某个文件的所有者具有文件的读/写/执行权限,其余人仅有读权限,那么用数字法表示应该是什么?
答:所有者权限为rwx,所属组和其他人的权限为r--,数字法为744
4.某链接文件的权限用数字法表示为755,那么相应的字符法表示是什么呢?
答:lrwxr-xr-x。
5.如果希望用户执行某命令时临时拥有该命令所有者的权限,应该设置什么特殊权限?
答:特殊权限中的SUID。
6.若对文件设置了隐藏权限+i,则意味着什么?
答:无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件。
7.使用访问控制列表(ACL)来限制linuxprobe用户组,使得该组中的所有成员不得在/tmp目录中写入内容。
答:想要设置用户组的ACL,则需要把u改成g,即setfacl -Rm g:linuxprobe:r-x /tmp
8.当普通用户使用sudo命令时是否需要验证密码?
答:系统在默认情况下需要验证当前登录用户的密码,若不想验证,可添加NOPASSWD参数。
注:NOPASSWD参数的例子:
用户名 ALL=NOPASSWD: 某个命令的绝对路径