与 Windows 操作系统一样,Linux 操作系统的每一个用户账号也都有唯一的用户名与密码。用户在登录时输入正确的用户名和密码,就能够进入操作系统和自己的主目录。本小节将介绍 Linux 操作系统中用户账号和组账号的相关概念。
在 Linux 操作系统中,根据系统管理的需要将用户账号分为不同的类型,主要包括超级用户、普通用户和程序用户,各类型拥有的权限、担任的角色也各不相同。
超级用户:root 用户是 Linux 操作系统中默认的超级用户账号,对本主机拥有至高无上的权限,类似于 Windows 操作系统中的 Administrator 用户。只有当进行系统管理、维护任务时,才建议使用 root 用户登录系统,日常事务处理建议只使用普通用户账号。
普通用户:普通用户账号需要由 root 用户或其他管理员用户创建,拥有的权限受到一定限制,一般只在用户自己的宿主目录中拥有完整权限。
程序用户:在安装 Linux 操作系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,而仅用于维持系统或某个程序的正常运行,如 bin、daemon、ftp、mail 等。
基于某种特定联系(如都需要访问 FTP 服务)将多个用户集合在一起,即构成一个用户组,表示该组内所有用户的账号称为组账号。每一个用户账号至少属于一个组,这个组称为该用户的基本组(或私有组);若该用户同时还包含在其他的组中,则这些组称为该用户的附加组(或公共组)。 对组账号设置的权限将适用于组内的每一个用户账号。
Linux系统中的每一个用户账号和组账号都有一个数字形式的身份标记,称为UID(User IDentity,用户标识号)和GID(Group IDentify,组标识号)。对于系统核心来说,UID是作为区分用户的基本依据,原则上每个用户的UID号应该是唯一的。
用户UID号普通用户000–6万root用户固定值UID=0程序用户1—999Linux 操作系统中的用户账号、密码等信息均保存在相应的配置文件中,直接修改这些文件或者使用用户管理命令都可以对用户账号进行管理。
与用户账号相关的配置文件主要有两个,分别是/etc/passwd 和/etc/shadow。前者用于保存用户名称、宿主目录、登录 Shell 等基本信息,后者用于保存用户的密码、账号有效期等信息。在这两个配置文件中,每一行对应一个用户账号,不同的配置项之间使用“:”(冒号) 进行分隔。
(1)passwd 文件中的配置行格式 操作系统中所有用户的账号基本信息都保存在/etc/passwd 文件中,该文件是文本文件, 任何用户都可以读取文件中的内容。
[root@localhost ~]# head -2 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin [root@localhost ~]# tail -1 /etc/passwd mysql:x:1002:1002::/home/mysql:/sbin/nologinpasswd文件的每一行内容中,包含了七个用冒号“:”分隔的配置字段,我们需要了解其含义。
(2)shadow 文件中的配置行格式 shadow 文件又被称为“影子文件”,其中保存有各用户账号的密码信息,因此对 shadow 文件的访问应该进行严格限制。默认只有 root 用户能够读取 shadow 文件中的内容,且不允许直接编辑该文件中的内容。
[root@localhost ~]# head -2 /etc/shadow root:$6$8mg11myV2rM8BEEo$9kaxW3VOCRf5/Gy43P.D/Cpu00MmsOwSgxfxW1ACH89dI2EZUi2kGNgLFzOoMcDqLXCu04U5LBCeG67KgSY.T/::0:99999:7::: bin:*:17834:0:99999:7::: [root@localhost ~]# tail -1 /etc/shadow mysql:!!:18518:0:99999:7:::shadow 文件的每一行内容中包含了九个用“:”(冒号)分隔的配置字段,从左到右各配置字段的含义分别如下所述。
第1字段:用户账号名称。
第2字段:使用 SHA-512(哈希算法中的一种)加密的密码字串信息,当为“*”或“!!”时表示此用户不能登录到系统。若该字段内容为空,则该用户无须密码即可登录系统。
第3字段:上次修改密码的时间,表示从 1970 年 01 月 01 日算起到最近一次修改密码时间隔的天数。
第4字段:密码的最短有效天数,自本次修改密码后,必须至少经过该天数才能再次修改密码。默认值为 0,表示不进行限制。
第5字段:密码的最长有效天数,自本次修改密码后,经过该天数以后必须再次修改密码。默认值99999,表示不进行限制。
第 6字段:提前多少天警告用户密码将过期,默认值为 7。
第7字段:在密码过期之后多少天内禁用此用户。
第8字段:账号失效时间,此字段指定了用户作废的天数(从 1970 年 01 月 01日起计算),默认值为空,表示账号永久可用。
第9字段:保留字段,目前没有特定用途。
(1)useradd 命令——添加用户账号
基本命令格式如下 useradd [选项] 用户名 常用选项有: -u 指定用户的UID号,要求UID号码未被其他用户使用 -d 指定用户的宿主目录位置(当与 -M 一起使用时,不生效) -e 指定用户的账户失效时间,可以使用YYYY-MM-DD的日期格式 -g 指示基本组 -G 指示附加组 -M 不建立宿主目录,即使/etc/login.defs系统配置中已设置要建立宿主目录 -s 指定用户的登录shell例如:创建一个名为55的FTP账号(禁止终端登录),该账号将于2020.10.31失效。
[root@localhost ~]# useradd -e 2020-10-31 -s /sbin/nologin 55 /sbin/nologin后用户无法直接登录和被切换登录(2)passwd 命令——为用户账号设置密码 通过 useradd 命令新增用户账号以后,还需要为其设置一个密码才可以正常使用。使用 passwd 命令可以设置或修改密码,root 用户有权管理其他账号的密码(指定账号名称作为参数即可)。 用户账号具有可用的登录密码以后,就可以从字符终端进行登录了。虽然 root 用户可以指定用户名作为参数,对指定账号的密码进行管理,但是普通用户却只能执行单独的“passwd”命令修改自己的密码。 对于普通用户自行设置的密码,要求具有一定的复杂性(如不要直接使用英文单词,长度保持在六位以上),否则系统可能拒绝进行设置。普通用户设置自身的登录密码时,需要先输入旧的密码进行验证。
使用命令基本格式 passwd [选项] 用户名 常用选项 -d 清空指定用户的密码,仅使用用户名即可登录系统 -l 锁定用户账户 -S(大S) 查看用户账户是否被锁定 -u 解锁用户账户(3)usermod 命令——修改用户账号属性
usermod 【选项】... 用户名 常用选项 u:修改用户UID d:修改用户的宿主目录位置 e:修改用户账户失效时间 ##格式:YYYY-MM-DD日期## g:修改用户的基本组名 G:修改用户的附加组名 s:指定用户登录的shell l:更改用户登录的名称 L:锁定账户 U:解锁用户账户(4)userdel 命令——删除用户账号
命令使用基本格式 userdel [-r] 用户名 添加-r选项时,表示连用户的宿主目录删除添加一个新的用户账号后,useradd 命令会在该用户的宿主目录中建立一些初始配置文件。这些文件来自于账号模板目录/etc/skel/,基本上都是隐藏文件,较常用的初始配置文件包括“.bash_logout”、“.bash_profile”和“.bashrc”。其中,“.bash_profile”文件中的命令将在该用户每次登录时被执行;“.bashrc”文件中的命令会在每次加载“/bin/Bash”程序(当然也包括登 录系统)时执行;而“.bash_logout”文件中的命令将在用户每次退出登录时执行。理解这些文件的作用,可以方便我们安排一些自动运行的后台管理任务。
与组账号相关的配置文件也有两个,分别是/etc/group 和/etc/gshadow。前者用于保存组账号名称、GID 号、组成员等基本信息,后者用于保存组账号的加密密码字串等信息(但是很少使用到)。某一个组账号包含哪些用户成员,将会在 group 文件内最后一个字段中体现出来(基本组对应的用户账号默认可能不会列出),多个组成员之间使用“,”(逗号)分隔。
(1)groupadd 命令——添加组账号
命令执行基本格式 groupadd [-g GID] 组账号名 [root@localhost ~]# groupadd -g 1000 jack(2)gpasswd 命令——添加、设置、删除组成员 gpasswd 命令本来是用于设置组账号的密码,但是该功能极少使用,实际上该命令更多地用来管理组账号的用户成员。
命令使用基本格式 gpasswd [选项] 组账号名 常用选项 -a 向组内添加一个用户 -d 从组中删除一个用户成员 -M 定义组成员列表,以逗号分隔(3)groupdel 命令——删除组账号
使用命令基本格式 groupdel 组账号名 例如 [root@localhost ~]# groupdel jack使用 groups 命令可以查看指定的用户账号属于哪些组。
groups命令使用格式 groups [用户名] 查询用户所属的组使用 id 命令可以快速查看指定用户账号的 UID、GID 等标识信息。
id命令基本格式 id [用户名] 查询用户身份标识使用 finger 命令可以查询指定的用户账号的登录属性等详细信息,包括登录名称、完整名称、宿主目录、登录 Shell 等。
finger命令使用格式 finger [用户名] 查询用户账号的详细信息使用 w 命令可以查询当前主机中的用户登录情况,列出登录账号名称、所在终端、登录时间、来源地点等信息
[root@localhost ~]# w 05:25:16 up 14:05, 1 user, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 20.0.0.1 04:58 4.00s 0.03s 0.00s w在 Linux 文件系统的安全模型中,系统中的文件(或目录)具有两个属性:访问权限和文件所有者,简称权限和归属。其中,访问权限包括读取、写入、可执行三种基本类型,归属包括属主(拥有该文件的用户账号)、属组(拥有该文件的组账号)。Linux 操作系统根据文件或目录的访问权限、归属来对用户访问数据的过程进行控制。
使用带“-l”选项的 ls 命令时,将以长格式显示文件或目录的详细信息,其中包括该文件的权限和归属等参数
[root@localhost ~]# ls -ld /etc /etc/passwd drwxr-xr-x. 144 root root 8192 Oct 20 04:58 /etc -rw-r--r-- 1 root root 2388 Sep 12 22:17 /etc/passwd在上述输出信息中,第 3、4 字段的数据分别表示该文件(或目录)的属主、属组,上例中/etc 目录和/etc/passwd 文件都属于 root 用户、root 组;而第 1 字段的数据表示该文件( 或目录) 的访问权限, 如“drwxr-xr-x”和“-rw-r–r--”。权限字段由四部分组成, 各自的含义如下所述。 第 1 个字符:表示该文件的类型,可以是 d(目录)、b(块设备文件)、c(字符设备文件)、“-”(普通文件)、字母“l”(链接文件)等。
第 2~4 个字符:表示该文件的属主用户(User)对该文件的访问权限。
第 5~7 个字符:表示该文件的属组内各成员用户(Group)对该文件的访问权限。
第 8~10 个字符:表示其他任何用户(Other)对该文件的访问权限。
第 11 个字符:这里的“.”与 SELinux 有关,目前不必关注。
在表示属主、属组内用户或其他用户对该文件的访问权限时,主要使用了三种不同的权限字符:r、w、x,分别表示可读、可写、可执行。若需要去除对应的权限,则用“-”表示。例如,root 用户对/etc 目录具有可读、可写、可执行的完全权限(rwx),其他任何用户对/etc目录只具有可读可执行的权限(r-x);root 用户对/etc/passwd 文件具有可读、可写权限(rw-), root 组内的各用户对/etc/passwd 文件只具有可读权限(r–)。 权限字符 r、w、x 用于文件表示可读、可写、可执行,但是对于目录来说,它们的具体含义是存在一些差别的,
类型解释可执行x允许运行程序,切换目录读取r允许查看文件内容,显示目录列表写入w允许修改文件内容,允许在目录中新建,移动,删除文件或子目录chmod命令–设置文件和目录权限
chmod命令使用基本格式 chmod [ugoa] [+-=] [rwx] 文件或目录 (不常用) (u,g,o,a分别表示属主,属组,其他用户,所有用户)(+-=分别表示增加,去除,设置权限) 或 chmod nnn 文件或目录 (最常用) (nnn表示三位八进制数字,如刚刚提到的 777,755,644等) 常用选项 -R 递归修改指定目录下所有子项的权限chown命令–设置文件和目录的归属
chown命令使用基本格式 chown 属主 文件或目录 chown:属组 文件或目录 chown 属主:属组 文件或目录 常用选项 -R 递归修改指定目录下所有文件,子目录的归属umask 就是默认指定目前用户在新建文件或目录时的权限默认值。执行“umask 022” 即可以设置当前用户的默认权限。直接执行“umask”命令就是查看当前系统的默认权限。需要注意的是,umask 的分数指的是“该默认值需要减掉的权限”。因此 r、w、x 分别是 4、2、1
umask设置命令格式 umask 000(000指数字) umask查看 umask