当前位置: 代码迷 >> 综合 >> 《That's how linux should learn》——charpter5
  详细解决方案

《That's how linux should learn》——charpter5

热度:78   发布时间:2023-09-05 17:47:38.0

charpter5 用户身份与文件权限

5.1用户身份与能力

Linux系统作为一个多用户多任务的系统,必须具备很好的安全性。
root 管理员是存在于所有类 UNIX 系统中的超级用户。它拥有最高的系统所有权,能 够管理系统的各项功能,如添加/删除用户、启动/关闭服务进程、开启/禁用硬件设备等。虽然 以 root 管理员的身份工作时不会受到系统的限制,但俗语讲“能力越大,责任就越大”,一旦使用这个高能的 root 管理员权限执行了错误的命令可能会直接毁掉整个系统。
注意:Linux 系统的管理员之所以是 root,并不是因为它的名字叫 root,而是因为该用户的身 份号码即 UID(User IDentification)的数值为 0。在 Linux 系统中,UID 就相当于我们的身份 证号码一样具有唯一性,因此可通过用户的 UID 值来判断用户身份。
? 管理员 UID 为 0:系统的管理员用户。
? 系统用户 UID 为 1~999: Linux 系统为了避免因某个服务程序出现漏洞而被黑客提 权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏 范围。
? 普通用户 UID 从 1000 开始:是由管理员创建的用于日常工作的用户。

Linux 系统中引入了用户组的概念。通过使用用 户组号码(GID,Group IDentification),把多个用户加入到同一个组中,从而方 便为组中的用户统一规划权限或指定任务。
另外,在 Linux 系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且 这个基本用户组只有该用户一个人。如果该用户以后被归纳入其他用户组,则这个其他用户 组称之为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组,从而满 足日常的工作需要。

useradd命令

1、useradd 命令用于创建新的用户,格式为“useradd [选项] 用户名”。使用该命令创建用户账户时,默认的用户家目录会 被存放在/home 目录中,默认的 Shell 解释器为/bin/bash,而且默认会创建一个与该用户同名 的基本用户组。
《That's how linux should learn》——charpter5
创建一个普通用户并指定家目录的路径、用户的 UID 以及 Shell 解释器。注意:/sbin/nologin,它是终端解释器中的一员,与 Bash 解释器有着天壤之别。 一旦用户的解释器被设置为 nologin,则代表该用户不能登录到系统中。
useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe (用户名)
id linuxprobe
结果:uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe)

groupadd命令

groupadd :创建用户组,格式为“groupadd [选项] 群组名”。

usermod命令

usermod:修改用户的属性,格式为“usermod [选项] 用户名”。 用户的信息保存在/etc/passwd 文件中,可以直接用文本编辑器来修改其中的用 户参数项目,也可以用 usermod 命令修改已经创建的用户信息,诸如用户的 UID、基本/扩展 用户组、默认终端等。
《That's how linux should learn》——charpter5
《That's how linux should learn》——charpter5
usermod -G root linuxprobe

passwd命令

passwd:修改用户密码、过期时间、认证信息等,格式为“passwd [选项] [用户名]” 。
普通用户只能使用 passwd 命令修改自身的系统密码。
root 管理员则有权限修改其他 所有人的密码。
root 管理员在 Linux 系统中修改自己或他人的密码时不需要验证旧 密码,这一点特别方便。既然 root 管理员可以修改其他用户的密码,就表示完全拥有该用户 的管理权限。
《That's how linux should learn》——charpter5
passwd:修改自己的密码
passwd 用户名:修改其他用户的密码
某位同事请假,可以使用 passwd 命令禁止该用户登录系统,等假期结束回归工作岗位时,再使用该命令允许用户登录系统,而不是将其删除。
[root@linuxprobe ~]# passwd -l linuxprobe
Locking password for user linuxprobe.
passwd: Success
[root@linuxprobe ~]# passwd -S linuxprobe
linuxprobe LK 2017-12-26 0 99999 7 -1 (Password locked.) [root@linuxprobe ~]# passwd -u linuxprobe
Unlocking password for user linuxprobe.
passwd: Success
[root@linuxprobe ~]# passwd -S linuxprobe
linuxprobe PS 2017-12-26 0 99999 7 -1 (Password set, SHA512 crypt.)

userdel命令

userdel 命令用于删除用户,格式为“userdel [选项] 用户名”。
在执行删除操作时,该用户的家目录默认会保留下来,可以使用-r 参数将其删 除。

文件权限与归属

Linux文件的类型;
? -:普通文件。
? d:目录文件。
? l:链接文件。
? b:块设备文件。
? c:字符设备文件。
? p:管道文件。
一般文件权限:“可读”表示能够读取文件的实际内容;“可写”表示能够编 辑、新增、修改、删除文件的实际内容;“可执行”则表示能够运行一个脚本程序。
目录文件的权限设置:“可读”表 示能够读取目录内的文件列表;“可写”表示能够在目录内新增、删除、重命名文件;而“可执行”则表示能够进入该目录。
文件的读、写、执行权限简写为 rwx,亦可用数字 4、2、1 来表示。
若某个文件的权限为 7 则代表可读、可写、可执行(4+2+1);若权限为 6 则代表可读、 可写(4+2)。

一个文件,其所有者拥有可读、可写、可执 行的权限,其文件所属组拥有可读、可写的权限;而且其他人只有可读的权限。那么,这个文 件的权限就是 rwxrw-r–,数字法表示即为 764。

文件的类型、访问权限、所有者(属主)、所属组(属组)、占用的磁 盘大小、修改时间和文件名称
该文件的类型为普通文件,所有者权限 为可读、可写(rw-),所属组权限为可读(r–),除此以外的其他人也只有可读权限(r–),文 件的磁盘占用大小是 34298 字节,最近一次的修改时间为 4 月 2 日的凌晨 23 分,文件的名称 为 install.log。

文件的特殊权限

SUID

SUID 是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限**(仅对拥有执行权限的二进制程序有效)**。
例如,所有用户都可以执行 passwd 命 令来修改自己的用户密码,而用户密码保存在/etc/shadow 文件中。仔细查看这个文件就会发 现它的默认权限是 000,也就是说除了 root 管理员以外,所有用户都没有查看或编辑该文件 的权限。
但是,在使用 passwd 命令时如果加上 SUID 特殊权限位,就可让普通用户临时获得 程序所有者的身份,把变更的密码信息写入到 shadow 文件中。
像在古装剧中见到的 手持尚方宝剑的钦差大臣,他手持的尚方宝剑代表的是皇上的权威,因此可以惩戒贪官,但 这并不意味着他永久成为了皇上。因此这只是一种有条件的、临时的特殊权限授权方法。
查看 passwd 命令属性时发现所有者的权限由 rwx 变成了 rws,其中 x 改变成 s 就意味着 该文件被赋予了 SUID 权限。如果原先权限位上没有 x 执行权限,那么被赋予特殊权限后将变成大写的 S。 (那还有没有效呢?)

SGID

? 让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);
? 在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。
在需要在一个部 门内设置共享目录,让部门内的所有人员都能够读取目录中的内容,那么就可以创建部门共 享目录后,在该目录上设置 SGID 特殊权限位。这样,部门内的任何人员在里面创建的任何文 件都会归属于该目录的所属组,而不再是自己的基本用户组。此时,我们用到的就是 SGID 的 第二个功能,即在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。
chmod 命令是一个非常实用的命令,能够用来设置文件或目录的权限,格式为“chmod [参数] 权限 文件或目录名称”。如果要把一个文件的权限设置成其所有者可读可写可执行、 所属组可读可写、其他人没有任何权限,则相应的字符法表示为 rwxrw----,其对应的数字法 表示为 760。
chown,其格式为“chown [参数] 所有者:所属组 文件或目录名称”,设置文件或目录的所有者和所属组。
chmod和chown,针对目录进行操作时需要加上大写参数-R 来表示递归操作,即对目录内所有的文件 进行整体操作。

SBIT

SBIT(Sticky Bit)特殊权限位,SBIT 特殊权限位可确保用户只能删除自己的文件,而 不能删除其他用户的文件。
当目录被设置 SBIT 特殊权限位后,文 件的其他人权限部分的 x 执行权限就会被替换成 t 或者 T,原本有 x 执行权限则会写成 t,原 本没有 x 执行权限则会被写成 T。
文件能否被删除并不取决于自身的权限,而是看其所在目录是否有写入权限。比如某一文件所在的目录设置了SBIT,即使其他人权限为rwx也无法删除。

文件的隐藏属性

chattr命令

chattr 命令用于设置文件的隐藏权限,格式为“chattr [参数] 文件”。
把某个隐藏 功能添加到文件上,则需要在命令后面追加“+参数”;把某个隐藏功能移出文件, 则需要追加“-参数”。

lsattr显示文件的隐藏权限

格式为“lsattr [参数] 文件”。

文件访问控制列表

如果希望对某个指定的用户进行单独的权限控制,就需要用到文件 的访问控制列表(ACL)了。

setfacl命令

setfacl 命令用于管理文件的 ACL 规则,格式为“setfacl [参数] 文件名称”。
文件的 ACL 提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制,使用 setfacl 命令 可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。针对目录 文件需要使用-R 递归参数;针对普通文件则使用-m 参数;如果想要删除某个文件的 ACL, 则可以使用-b 参数。
看到文件的权限最后一个点(.)变 成了加号(+),这就意味着该文件已经设置了 ACL 了。

getfacl命令

getfacl 命令用于显示文件上设置的 ACL 信息,格式为“getfacl 文件名称”。

su与sudo命令

su 命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切 换到其他用户,比如从 root 管理员切换至普通用户。
su 命令与用户名之间有一个减号(-),这意味着完全切 换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。强 烈建议在切换用户身份时添加这个减号(-)。
切换至root时,可能会暴露root管理员的密码,增大了被黑客获取的几率,所以,使用 sudo 命令把特定命令的执行权限赋予给指定用户, 这样既可保证普通用户能够完成特定的工作,也可以避免泄露 root 管理员密码。
格式为“sudo [参数] 命令名称”。
sudo 命令具有如下功能:
? 限制用户执行指定的命令:
? 记录用户执行的每一条命令;
? 配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;? 验证密码的后 5 分钟内(默认值)无须再让用户再次验证密码。
如果担心直接修改配置文件会出现问题,则可以使用 sudo 命令提供的 visudo 命令 来配置用户权限。这条命令在配置用户权限时将禁止多个用户同时修改 sudoers 配置文件,还 可以对配置文件内的参数进行语法检查,并在发现参数错误时进行报错。
在每次执行 sudo 命令后都会要求验证一下密码。虽然这个密码就是当前登录用户的密码,但是挺麻烦的。这时可以添加 NOPASSWD 参数, 使得用户执行 sudo 命令时不再需要密码验证
visudo
99(行号) linuxprobe(用户名) ALL=NOPASSWD: /usr/sbin/poweroff (命令的路径)
当切换到普通用户后再执行命令时,就不用再频繁地验证密码了。