用户身份与文件权限
一、用户身份与能力
➢ 管理员UID为0:系统的管理员用户 例如 root。
[root@linuxprobe ~]# id root
uid=0(root) gid=0(root) groups=0(root)
➢系统用户UID为1-999 :Linux 系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会由独立的系统用户负责运行,进而有效控制被破坏范围。
➢普通用户UID从1000开始 :是由管理员创建的用于日常工作的用户。
在 Linux 系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户以后被归纳到其他用户组,则这个其他用户组称之为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组,从而满足日常的工作需要。
[root@linuxprobe ~]# id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe)
id命令
查看用户的基本信息,例如用户 ID、基本组与扩展组 GID,以便于我们判别某个用户是否已经存在,以及查看相关信息。
passwd 命令
passwd 命令用于修改用户的密码、过期时间等信息,英文全称为“password”,语法格式为“passwd [参数] 用户名”。
普通用户只能使用 passwd 命令修改自己的系统密码,而 root 管理员则有权限修改其他所有人的密码。更酷的是,root 管理员在 Linux 系统中修改自己或他人的密码时不需要验证旧密码,这一点特别方便。既然 root 管理员能够修改其他用户的密码,就表示其完全拥有该用户的管理权限。passwd 命令中的参数以及作用如下表所示。
要修改自己的密码,只需要输入命令后敲击回车键即可:
[root@linuxprobe~]# passwd
Changing password for user root.
New password:此处输入密码值
Retype new password:再次输入进行确认
passwd: all authentication tokens updated successfully.
要修改其他人的密码,则需要先检查当前是否为 root 管理员权限,然后在命令后指定要修改密码的那位用户的名称:
[root@linuxprobe~]# passwd linuxprobe
Changing password for user linuxprobe.
New password:此处输入密码值
Retype new password:再次输入进行确认
passwd: all authentication tokens updated successfully.
假设您有位同事正在度假,而且假期很长,那么可以使用 passwd 命令禁止该用户登录系统,等假期结束回归工作岗位时,再使用该命令允许用户登录系统,而不是将其删除。这样用户身份与文件权限既保证了这段时间内系统的安全,也避免了频繁添加、删除用户带来的麻烦。
[root@linuxprobe ~]# id wq
uid=1001(wq) gid=1001(wq) groups=1001(wq)
[root@linuxprobe ~]# passwd -l wq
Locking password for user wq.
passwd: Success
[root@linuxprobe ~]# passwd -S wq
wq LK 2023-03-20 0 99999 7 -1 (Password locked.)
[root@linuxprobe ~]#
在解锁时,记得也要使用管理员的身份;否则,如果普通用户也有锁定权限,系统肯定会乱成一锅粥
[root@linuxprobe ~]# passwd -u wq
Unlocking password for user wq.
passwd: Success
[root@linuxprobe ~]# passwd -S wq
wq PS 2023-03-20 0 99999 7 -1 (Password set, SHA512 crypt.)
[root@linuxprobe ~]#
二、文件权限与归属
在 Linux 系统中,每个文件都有归属的所有者和所属组,并且规定了文件的所有者、所属组以及其他人对文件所拥有的可读(r)、可写(w)、可执行(x)等权限。
对于一般文件来说,权限比较容易理解:“可读”表示能够读取文件的实际内容;“可写”表示能够编辑、新
增、修改、删除文件的实际内容;“可执行”则表示能够运行一个脚本程序。但是,对于目录文件来说,理解其权限设置就不那么容易了。很多资深 Linux 用户其实也没有真正搞明白。
对于目录文件来说,“可读”表示能够读取目录内的文件列表;“可写”表示能够在目录内新增、删除、重命名文件;而“可执行”则表示能够进入该目录。可读、可写、可执行权限对应的命令在文件和目录上是有区别的,具体可参考下表。
文件的可读、可写、可执行权限的英文全称分别是 read、write、execute,可以简写为 r、w、x,亦可分别用数字 4、2、1 来表示,文件所有者、文件所属组及其他用户权限之间无关联,如下表所示。
文件权限的数字表示法基于字符(rwx)的权限计算而来,其目的是简化权限的表示方式。
例如,若某个文件的权限为 7,则代表可读、可写、可执行(4+2+1);若权限为 6,则代表可读、可写(4+2)。
我们来看一个例子。现在有这样一个文件,其所有者拥有可读、可写、可执行的权限,其文件所属组拥有可读、可写的权限;其他人只有可读的权限。那么,这个文件的权限就是 rwxrw-r--。
这里以 rw-r-x-w-权限为例来介绍如何将字符表示的权限转换为数字表示的权限。首先,要将各个位上的字符替换为数字,减号是占位符,代表这里没有权限,在数字表示法中用 0 表示。也就是说,rw-转换后是420,r-x 转换后是 401,-w-转换后是 020。然后,将这 3 组数字之间的每组数字进行相加,得出 652,这便是转换后的数字表示权限。
将数字表示权限转换回字母表示权限的难度相对来说就大一些了,这里以 652 权限为例,写成 rw-r-x-w-。
下图,包含了文件的类型、访问权限、所有者(属主)、所属组(属组)、占用的磁盘大小、最后修改时间和文件名称等信息。
通过分析,该文件的类型为普通文件,所有者权限为可读、可写(rw-),所属组权限为可读(r--),除此以外的其他人也只有可读权限(r--),文件的磁盘占用大小是 34298 字节,最近一次的修改时间为 4 月 2 日的 0:23,文件的名称为 install.log。
排在权限前面的减号(-)是文件类型(减号表示普通文件),常见的文件类型包括普通文件(-)、目录文件(d)、链接文件(l)、管道文件(p)、块设备文件(b)以及字符设备文件(c)。
普通文件的范围特别广泛,比如纯文本信息、服务配置信息、日志信息以及 Shell 脚本等,都属于普通文件。几乎在每个目录下都能看到普通文件(-)和目录文件(d)的身影。块设备文件(b)和字符设备文件(c)一般是指硬件设备,比如鼠标、键盘、光驱、硬盘等,在/dev/目录中最为常见。
三、文件的特殊权限
在复杂多变的生产环境中,单纯设置文件的 rwx 权限无法满足我们对安全和灵活性的需求,因此便有了 SUID、SGID 与 SBIT 的特殊权限位。这是一种对文件权限进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。
下面具体解释这 3 个特殊权限位的功能以及用法。
2
2
2
2
2
2
2
2