第3章用户和组 本章学习目标: 了解多用户系统的概念 掌握用户和组的概念 掌握管理用户和组的方法 了解用户登录过程和环境变量的设置 Linux操作系统是多用户、多任务系统,即允许多个用户同时登录Linux系统并启动多个任务(有的用户远程登录)。用户账号和用户组是进行身份鉴别和权限控制的基础,身份鉴别的目的是规定哪些人可以进入系统,而权限控制的目的则是规定进入系统的用户能做哪些操作。 3.1多用户系统 一个安装好的但是没有启动的Linux系统是静态的系统,静态的Linux系统一般由根分区上的文件、目录和交换分区组成,内容不会发生改变; 而启动的Linux系统称为动态的系统,动态的Linux系统一般由根分区上的文件、目录和虚拟内存(含交换区和物理内存)中的进程组成,动态系统里的内容会时时发生变化。 如果Linux系统被引导到多用户目标(默认引导目标是graphical.target,它就是多用户的,这方面的内容请参考第9章),那么就允许已经注册的用户登录,例如图3.1所示的动态系统中有一个已注册用户 图3.1多用户系统 的账号表,同时已经登录了两个用户lium和xiao,另外两个人正在使用账号wlm和mao1登录,由于账号wlm不在系统的账号表中,所以这个用户登录一定失败,用户持账号mao1登录时必须输入正确的密码,否则系统拒绝用户登录。 所谓的多用户系统就是指一台计算机启动后,允许多个用户同时登录并使用计算机,最常见的例子是很多用户通过网络远程登录到一台运行Linux的计算机。远程登录的内容请参见5.6节。 3.2用户和组的概念 3.2.1用户的概念 有的人喜欢说“用户”,另一些人喜欢用“账号”,在Linux系统里,用户和账号是指同一个概念: 使用Linux系统的人,他的信息必须事先在Linux系统里登记,登记之后才允许登录。创建(即登记)一个用户时需要提供如下信息。 (1) 用户名: 也叫账号,正规的账号由A~Z,a~z,0~9,,_组成,账号长度介于1~32,如alice123、zsan等,尽管允许使用中文,但建议不要用,因为字符登录界面往往无法输入中文。如果实在要在账号中加入其他字符,如空格、星号等,在创建用户时带上badname参数即可。在Linux系统中用户名是唯一的,用户名主要用于身份鉴别。 (2) 口令: 或称密码,主要用于身份鉴别。一个好的口令最好同时包含大小写字母、数字和其他符号,长度建议大于6。取口令的一种好的方法是对应古诗词中的一句话,例如Y4yhL9t对应“疑似银河落九天”,10LctwyyC对应“十里长亭望眼欲穿”,这样的密码自己好记,别人难猜。 注意: 密码中字母的大小写是有区分的。 (3) 用户ID号: 简称为UID,犹如人的身份证号码,但允许不唯一,也就是说允许多个不同的用户拥有相同的UID,有点类似一个人拥有多个称呼,例如学名、绰号、小名等。UID主要用于权限控制,由此可知,具有相同UID的用户具有相同的权限。 (4) 属组: 每一个用户只能归属于一个主要组群,但是可以同时归属于多个附加组群。给用户分组主要是便于管理同一类用户的权限,例如赋予一个组某种权限,那么隶属于这个组的所有用户自动拥有该权限。主要组群和附加组群类似学校的班级和社团,一个学生只能属于一个班级,但可以加入若干社团。 (5) 家目录: 用户登录后默认进入的目录。如果不特别指定,用户的家目录就是/home/<账号>,例如创建用户zsan,那么默认的家目录就是/home/zsan。root用户的家目录有点特别,默认是/root。 (6) 登录Shell: 用户登录Linux的过程中,会自动执行一系列的程序,其中最后执行的那个程序称为Shell程序。Shell意为“壳”,可想象为包裹在Linux系统外面的“壳”,用户登录后一直在这个“壳”中——与这个壳进行交互,用户输入的任何命令都由这个“壳”代为执行。目前常用的Shell程序有Bash、tcsh、dash等,其中Bash是默认的Shell程序,是最流行的“壳”。另外还有一些特殊的Shell程序,如nologin、false,这两个Shell程序其实除了立即退出系统之外什么也不做,即当一个用户的登录Shell是这二者之一时,这个用户是不能登录的,因为一登录就马上退出来了。自己编写的应用程序也可以作为登录Shell,例如编写一个简单的关机、重启、修改系统时间、终止进程的程序,把这个程序设置成一个普通管理员的登录Shell,登录后通过选择菜单可以完成这几个简单的任务。 (7) 备注: 对用户的描述,这个可以省略。 登记的用户信息主要保存在文件/etc/passwd和/etc/group中,加密后的密码保存在文件/etc/shadow中。/etc/passwd每一行对应一个用户,一行的格式如下。 用户名:密码:UID:GID:备注:家目录:登录Shell 各个参数之间用“:”分开,其中的“密码”都用x代替(真正的密码保存在/etc/shadow文件中),GID是该用户的主要组群的组号。例如/etc/passwd文件中有如下一行: alice123:x:1000:500:Alice的账号:/home/alice123:/bin/bash 从上面这一行可以获得如下信息: 用户名是alice123,密码的位置出现x只是占位符,没有任何意义,用户的ID是1000,隶属于主要组群500,用户的家目录是/home/alice123,登录Shell是/bin/bash,备注信息是“Alice的账号”。 同样/etc/shadow也是一行对应一个用户,格式如下: 账号:密码:最后一次更改密码的日期:密码有效期最少天数:密码有效期最多天数:密码警告时间段:密码禁用期:账户过期日期:保留字段 (1) 密码: 经过加密后的密文。这种加密算法是不可逆的,也就是说不能从密文反推算出原始密码。在用户登录校验密码时,Linux系统采用相同的加密方法对用户输入的密码进行加密得到密文,然后通过比较两份密文是否相同来判断密码输入是否正确。 (2) 最后一次更改密码的日期: 具体表示为从1970年1月1日以来的天数。例如在2019年8月10日修改过密码,那么这里就是18117。如果是0,那么下次用户登录时必须修改密码。 (3) 密码有效期最少天数: 即自上次修改密码之后要过多少天后才允许再次修改密码。如果为0或者空表示没有限制,即可随时修改密码。 (4) 密码有效期最多天数: 即多少天前必须修改密码。如果过了有效期最多天数还没有修改密码,那么当下一次用户登录时提示用户必须修改密码; 为空表示没有限制,同时也没有密码警告时间段,没有密码禁用期; 如果密码有效期最多天数小于密码有效期最少天数,那么用户不能修改密码。 (5) 密码警告时间段: 即开始不断地通知用户要修改密码,如果为0或者空则不通知。 (6) 密码禁用期: 过了密码有效期最多天数如果仍然没有修改密码,则进入密码禁用期。在禁用期内,用户登录时强制要求修改密码。过了禁用期,账号就完全冻结了,冻结的账户经过解冻之后可以继续使用。 (7) 账户过期日期: 表示为从1970年1月1日以来的天数,为空则没有限制。账户过期后不能再用了。例如打算让账号在2024年10月1日失效,那么这里的值就是19997。 这些参数之间的关系可以用图3.2来表示。 图3.2密码的老化过程 例如/etc/shadow文件中有如下一行: wochi:$6$87wjcyRC$J2rPOb.SQw:15142:10:20:3:5:19997: 可以用图3.3来表示此密码的老化过程。 图3.3密码的老化过程举例 Linux系统的用户分为三类,分别是超级用户root、系统用户和普通用户。在安装系统时默认创建超级用户root,root用户的权力没有限制,它的UID和GID都是0。超级用户的作用是管理系统,例如创建用户、给硬盘分区、配置网络等。系统用户主要用来启动服务或者用作一些特殊权限控制,系统用户的权限受到限制,系统用户也是在安装Linux或者应用软件时自动创建的,它们的UID小于1000,系统用户不能登录。普通用户是由超级用户创建的并分配给Linux系统的使用者,权限受到限制,使用者用普通用户登录以完成他们的日常工作,普通用户的UID一般大于或等于1000。下面的内容摘自/etc/passwd文件: root:x:0:0:root:/root:/bin/bash mail:x:8:8:mail:/var/mail:/usr/sbin/nologin wwwdata:x:33:33:wwwdata:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin moodisk:x:1000:1000:Teacher Wang:/home/moodisk:/bin/bash 其中,mail、wwwdata和backup是系统用户,都是在安装软件时自动创建的,它们的登录Shell都是/usr/sbin/nologin,执行这个程序就是拒绝登录。 3.2.2组的概念 登记一个组群需要提供三个信息: 组群名、组群ID和该组群的成员用户,这些信息主要保存在文件/etc/group中,每一行对应一个组群,组群名必须唯一。文件/etc/group中的一行格式如下: 组群名:密码:组号:该组的用户成员 密码是一个x,加密后的密码存放在/etc/gshadow文件中,对于组群的密码,没有多大意义。组号为0表示超级用户组群,组号1~999表示系统组群,1000及以后的数字表示普通组群。组号允许不唯一,也即多个组群名允许拥有相同的组号。 例如/etc/group文件中有一行: admin:x:121:john,zsan,alice 表示组名为admin,组号为121,组中的成员包括用户john、zsan、alice。如果组x是用户y的主要组群,那么y不会列在x的成员列表中, 图3.4用户和组群的关系 也即组的成员列表只是以此组为附加组群的用户,如上面的例子,admin是john、zsan和alice三个用户的附加组群。 用户和组群的关系可以用图3.4表示。 从图3.4可以看出,一个用户必须且只能属于一个主要组群,但是可以属于0个或者多个附加组群,一个组群可以包含0个或者多个用户。类似在校大学生,一个学生只能属于一个班级(类似主要组群),但是他可以同时加入很多社团(类似附加组群)。 3.3用户和组管理 用户和组的管理包括创建、删除、修改属性、修改密码等。具体操作可以采用可视化的图形界面方式,也可以采用命令方式,这里重点介绍后者。Linux下的命令语法大致如下: <命令> <选项> <目标> “命令”是用来操纵“目标”的,到底怎么操纵呢?这是由“选项”规定的。由于可能存在多个选项,因此选项采用“<一个字母或数字>[参数]”或者“<多个字母或数字> [参数]”的形式,例如下面创建用户alice的命令: useradd -u 1001 -d /home/zbc --shell /bin/bash alice 其中,命令是useradd,目标是alice,选项是“u 1001 d /home/zbc shell /bin/bash”。命令一般都是某个程序对应的文件名。命令、选项、目标以及各个参数之间用空格符分开,但允许出现多个空格。例如下面两个命令是等价的: useradd -u 1002 john useradd-u1002john 文件/etc/login.defs和/etc/default/useradd定义了组群和用户的默认属性,在创建用户和组的时候,如果没有给出相应的参数,那么就取默认值。其中一些主要参数如表3.1所示。 表3.1文件/etc/login.defs定义的参数 序号参数默认值说明 1PASS_MAX_DAYS99999密码有效期最多天数 2PASS_MIN_DAYS0密码有效期最少天数 3PASS_WARN_AGE7密码警告时间段,密码到期前7天开始发警告 4UID_MIN1000普通用户UID的最小值 5UID_MAX60000普通用户UID的最大值 6GID_MIN1000普通组GID的最小值 7GID_MAX60000普通组GID的最大值 8CREATE_HOMEyes(红帽),no(Debian)是否创建家目录 而/etc/default/useradd文件,不同的Linux发行版本会有所不同,主要定义默认的登录Shell、家目录的父目录以及用户的模板目录(即skel),模板目录中包含一些用户登录/登出的配置文件。主流Linux发行版的模板目录都是/etc/skel,创建用户时,会把模板目录复制成家目录。 在图形桌面上可以采用文本编辑器浏览此文件内容,启动文本编辑器的方法是: 单击左上角的“活动”,再单击图标(即“显示应用程序”),然后找到并单击“文本编辑器”启动它,最后打开需要浏览的文件。 注意: 下面的操作除特别声明外,都需要超级用户权限,在具体实验时最好用root用户登录,或者切换到root用户。需要注意的是这些例子只是案例教学,并不代表在实际的操作过程中一定要这样做,例如创建组的第一条命令groupadd class1用于创建一个新组class1,也可以创建其他的组,例如sales、itx86组等。 参考图2.9打开一个命令窗口,然后在命令窗口中输入su 可切换到超级用户,以后执行组和用户的命令都在超级用户的命令窗口中输入即可,参考图3.5。命令sudo s也可以切换到超级用户状态。 图3.5切换到超级用户命令窗口 3.3.1组管理 1. 创建组 创建组的命令是groupadd,使用语法是: 在语法中,出现在中括号内的内容表示可以省略,单字符参数g和多字符参数gid是等价的,使用任何一个都行,o和nonunique也是等价的,以后的命令语法都是一样的理解。 (1) 创建组群class1(参考图3.6)。 图3.6创建组群 为了节约篇幅,以后只列出命令。 (2) 创建组群grade2且指定GID为555: groupadd -g 555 grade2 (3) 创建已存在组群root的别名组群administrators: groupadd -g 0 -o administrators 新建的组信息保存在/etc/group中,可以采用more或者cat命令查看,例如: cat /etc/group 2. 删除组群 删除组群class1: groupdel class1 注意: 只能删除已经存在的空组群,空组群也就是组里没有用户成员。 3. 修改组群属性 修改组的命令是groupmod,使用语法是: (1) 修改组群sales的组号(GID)为1650: groupmod -g 1650 sales (2) 修改组群sales的组群名为sales1: groupmod -n sales1 sales (3) 用一条命令完成上面两个任务: groupmod -g 1650 -n sales1 sales 注意: 只能修改已经存在的组群属性。 4. 查看组群信息 查看文件/etc/group的内容即可,可以采用cat、more、tail等命令查看。 (1) 查看文件/etc/group的末尾10行: tail /etc/group (2) 翻页显示/etc/group信息: more /etc/group 按Space键查看下一页,直到结束,如果想中途退出more命令,按Q键即可。 3.3.2用户管理 1. 创建用户 创建用户的命令是useradd,它的语法如下: 关于一些不太常用的参数,可以查看在线文档,即执行命令man useradd可获得useradd的在线文档。下面举例说明。 (1) 创建用户alice: useradd alice 没有选项,全部采用默认值: UID取最小的可用的普通用户号,家目录为/home/alice,登录Shell为/bin/bash(红帽)或者/bin/sh(Debian),归属主要组群alice(组群alice会自动创建)。但是在Debian 11,不会创建家目录,而在红帽系统中,会创建家目录。 (2) 创建用户john,用户ID为1688,m参数表明要创建家目录: useradd -u 1688 -m john (3) 指明用户id、家目录、主要组群和登录Shell程序: useradd -u 1005 -d /home/lisihome -g sales -s /bin/bash lisi 众多参数之间的前后次序没有关系,但是参数和值必须毗连,例如参数u后面的1005就不能放到其他地方。因此上面的命令与下面的命令等价: useradd --home-dir /home/lisihome -s /bin/bash -g sales -u 1005 lisi 由useradd的语法可知,单字符参数d与多字符参数homedir是等价的。 (4) 创建用户limusheng,加入两个附加组群mail和class2: useradd -c "这是李木生的账号" -G mail,class2 limusheng 注意: mail、class2是参数G的值,里面不能出现空格,而备注里面允许出现空格,但必须用单引号或双引号括起来。例如useradd c "helloMr.Li"lisi。 (5) 创建超级用户root的别名,以后用Administrator登录,权限与root一样: useradd -u 0 -o Administrator (6) 创建非标用户Mr.Wang&: useradd --badname -d /home/mrwang -m "Mr.Wang&" 用户名中出现了.、空格和&字符。非标用户唯一的好处是别人不容易猜出用户名,从而提高了安全性。 2. 删除用户 删除用户采用userdel命令,其语法如下: 如果省略参数,那么只删除用户。下面举例说明。 (1) 删除alice,其家目录、邮件目录等都保留: userdel alice (2) 彻底删除john,即使他已经登录: userdel -f john 上述命令不会删除他保存在其他目录中的文件。已经登录的用户不会马上被踢出。 (3) 删除非标用户Mr.Wang&,如果此用户目前已经登录,就不删: userdel --remove "Mr.Wang&" 3. 修改用户 采用usermod命令修改用户,其语法为: 其他一些不常用的参数请参考在线文档。 注意: 使用a参数时,必须同时使用G参数指定额外的附加组群,类似的,使用m参数时必须同时使用d参数。下面举例说明。 (1) 把alice的id号改为1234: usermod -u 1234 alice (2) 修改john的家目录和登录Shell程序,同时旧家目录中的文件被移到新家目录中: usermod -d /opt/zsan -s /bin/sh -m john (3) 主要组群改为grade1,同时额外加入class2附加组群,之前的附加组群继续保留: usermod -a -g grade1 -G class2 lisi (4) alice改名为非标用户Hello World: usermod --badname -login "Hello World" alice 4. 修改用户密码 采用passwd命令修改用户的密码,它的语法如下: 超级用户root能修改任何用户的密码,而普通用户只能修改自己的密码。下面举例说明。 (1) 修改自己的密码: passwd 如果是root用户,不用输入旧密码,普通用户必须先输入旧的密码。 注意: 输入密码时,屏幕上没有任何显示。 (2) 修改alice的密码,只有root用户才能修改其他用户的密码: passwd alice (3) 锁住john的密码: passwd --lock john 锁住密码,并不代表锁住用户,此用户还可以使用其他方式登录,例如采用SSH的公钥远程登录。 (4) 查看用户moodisk的密码状态: passwd -S moodisk 显示的状态格式类: moodisk P 01/12/2022 0 99999 7 -1 上述用空格分开的七部分分别表示: 用户名为moodisk,密码状态为P(P表示密码有效,L表示密码被锁,NP表示无密码),最近修改密码的日期为01/12/2022,密码有效期最少天数为0,密码有效期最多天数为99999,密码警告时间段为7,密码禁用期为-1。关于密码老化过程请参考图3.2。 (5) 修改用户zsan1的密码老化时间: passwd -n 10 -x 20 -w 3 -i 5 zsan1 上述表明密码有效期最少天数为10天,最大天数为20天,过期前3天会发警告通知,密码禁用期为5天。 3.4登录过程和环境变量 这里着重讲解字符界面的用户登录过程。 3.4.1用户登录过程 图3.7完整地描述了用户登录过程,图中的FN和ttyN中的N为2~6的一个数字,表示从第N个虚拟屏幕登录系统,例如同时按下Ctrl、Alt和F3三个键切换到第三个虚屏,另外图中的<user>代表输入的用户名,“~”表示用户的家目录。 图3.7用户登录过程 从图3.7中可以发现用户成功登录后,最后自动执行登录Shell程序(例如/bin/bash),此后Bash进程显示命令行提示符#或$(超级用户的命令提示符是#,普通用户是$),并等待用户输入命令。一旦用户输完命令并按Enter键后,Bash读取输入信息并执行用户输入的命令,命令执行完毕后又显示命令行提示符,等待用户输入下一个命令,直到用户输入命令exit退出系统为止。 如果要让所有用户登录时都执行一些代码,就把这些代码写入一个以sh为扩展名的文件中,并放在/etc/profile.d目录下。相反如果只让某个用户登录时执行,那么就直接加在此用户家目录中的.bash_profile文件中(即~/.bash_profile)。 3.4.2用户环境变量 用户登录Linux系统时,操作系统会自动为他配置好工作环境——语言、家目录、邮箱目录、命令搜索路径、终端类型、用户名、命令提示符等。用户的工作环境由一系列的环境变量定义,环境变量的格式如下: 环境变量名=值 “环境变量名”由大小写字母、_、数字组成,以字母开头,但是建议一般用大写字母,如LOGNAME、HOME等,“值”可以由任意字符组成,如果包含空格,则要用引号括起来。表3.2所示是一些常见的用户环境变量。 表3.2常见的用户环境变量 序号环 境 变 量说明 1LANG=zh_CN.UTF8语言定义为中文UTF8 2HOME=/home/zsan用户家目录是/home/zsan 3LOGNAME=zsan用户名为zsan 4PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin定义命令搜索路径,即Bash在这些路径中查找用户输入的外部命令所对应的程序,然后执行这个程序(关于内外部命令请参考第5章) 5SHELL=/bin/bash用户登录Shell为/bin/bash 6PWD=/home/zsan动态跟踪用户的当前目录,如果用户改变目录,那么这个变量的值也发生相应的改变 显示用户环境变量采用命令env或者echo $环境变量名,前者显示全部的用户环境变量,后者显示一个特定的环境变量的值,如echo $HOME; 设置用户环境变量采用命令export: export变量名=值 (1) 定义语言为英语: export LANG=C (2) 定义新变量HELLO: export HELLO="Hello World!" (3) 重新定义变量PATH: export PATH=$PATH:/opt/chrome/bin 本例中变量的值又引用了其他一个变量,即采用$XXX的形式引用变量XXX的值。删除用户环境变量采用命令unset,如: unset HELLO 与用户环境变量类似的概念是Shell变量,每个登录Shell都拥有一套默认的Shell变量集,而用户环境变量是采用export命令导出的Shell变量,是Shell变量的子集。Shell变量直接采用赋值的形式(如xyz=123)或在前面加上set(如set xyz=123),使用命令unset删除。一些常见的Shell变量如表3.3所示。 表3.3常见的Shell变量 序号Shell变量说明 1PS1,PS2,PS3,PS4这4个Shell变量定义了命令行提示符号格式 2HISTFILE=/root/.bash_history定义记录历史命令的文件 3HISTFILESIZE=1000记录最近输入的1000条历史命令,这些命令保存在由HISTFILE定义的文件中。如果为0则表示不记录历史命令,为-1则表示记录全部的历史命名 4HISTTIMEFORMAT='%F %T '同时记录历史命名执行的时间 5HOSTTYPE=x86_64定义了CPU架构 6IFS=$' \t\n'定义分隔符为空格和Tab键 7LINES=30,COLUMNS=114定义了字符屏幕敞口的大小(行列数) 8MACHTYPE=x86_64redhatlinuxgnu定义了机器类型 9HOSTNAME=Debian11定义了主机名 10EUID=1000有效用户ID号,EUID有别于UID,EUID用于权限控制 直接运行命令set显示所有的Shell变量。例如下面的命令修改HISTFILESIZE变量的值为5000,表明要记录最近输入的5000个历史命令: set HISTFILESIZE=5000 再如定义pi的命令: pi=3.14159 删除ABC变量的命令: unset ABC 注意: 使用export和set命令定义的变量是临时性的,在用户注销或者重启计算机后就没有了。如果希望定义的变量永久生效,那么就要把定义变量的命令加到用户登录时自动执行的脚本程序中(参见图3.7),通常选择加在~/.bash_profile文件的末尾(对特定用户起作用),如果要对全部的用户起作用,就在/etc/profile.d/目录中增加一个扩展名为sh的文件。例如用文本编辑器编辑新文件/etc/profile.d/alls.sh,文件内容为: export HISTFILESIZE=5000 这样每一个用户登录时都会执行/etc/profile.d/alls.sh,所以此后登录的用户都具有用户环境变量HISTFILESIZE,值是5000。采用下面的命令可以查看此用户环境变量的值。 echo $HISTFILESIZE 另一个类似的变量是HISTSIZE,它定义运行history命令显示的历史命令条数,例如HISTSIZE=20,那么运行下面的命令就把记录历史命令的文件的末尾20行显示出来。 history 如果使生产环境,最好设置HISTTIMEFORMAT='%F %T ',以便同时记录每条命令执行的日期和时间,这样出问题时可以追溯责任。 3.4.3用户切换 用户登录后可以切换到另一个用户,普通用户需要知道被切换用户的密码,而超级用户不要密码就可以切换到任何用户。切换用户的命令有sudo、su。 1. sudo命令 以另一个用户身份执行命令,默认是root,假设目前以普通用户登录系统,普通用户没有权限删除其他用户,所以需要以root身份执行删除用户的命令,如下所示: sudo userdel alice 会提示输入当前普通用户的密码。 以moodisk用户身份执行命令: sudo -u moodisk ls /home/moodisk 切换到root用户(此后可采用exit命令退出root用户): sudo -s 为了系统安全,平时一般以普通用户登录系统完成日常工作,当需要超级用户权限执行某个命令时,采用sudo命令临时获取root权限,这是个好习惯。 注意: 用户只有属于sudo组群(Debian操作系统)或wheel组群(红帽操作系统)时,才能使用sudo命令。例如下面的命令把alice加入sudo组群: usermod -a -G sudo alice 2. su命令 su命令类似与上面的sudo s命令,但是su有两种切换方式: 一是做彻底切换,把全部环境变量改为切换后的用户的环境变量; 二是修改少量环境变量。现举例如下。 彻底切换到root用户: su - root 上面的命令与su 等价。下面的命令不彻底切换到moodisk用户: su moodisk 需要注意的是su切换用户时需要输入被切换用户的密码,而sudo需要输入当前用户的密码,如图3.8所示。 图3.8切换到root用户 课堂实操 创建组lessen。新建用户jack,要求主要组群是lessen,附加组群为sudo(如果是Debian)或者wheel(如果是红帽),同时创建家目录。给jack用户设置密码A1b2C3。在第4个虚屏上登录jack用户。查看环境变量有哪些,各有什么值。切换到root用户。从root用户退出。 3.5知识拓展和作业 3.5.1知识拓展 (1) 了解身份鉴别机制: PAM。 (2) 掌握实际用户号UID和有效用户号EUID的区别。 (3) 了解sudo插件。 3.5.2作业 (1) 创建用户wang,该用户具有如下属性: 家目录为/var/home/wang,登录Shell是/bin/sh,归属主要组群为mail,同时属于附加组群users和fuse的成员,初始密码为123456,并在用户首次登录时提示修改密码,要求该用户每隔90天修改一次密码。请写出命令序列。 (2) 假设用户zsan已经存在,家目录是/home/zsan,登录shell是/bin/bash,请帮助该用户设置永久有效的用户环境变量(其他用户不受影响): HELLO="I am fine" NAME="Zhan san" (3) 文件/etc/passwd中的一行信息如下: jack:x:501:1001:The superman:/home/jackhome:/bin/bash 请解释各个字段的含义。 (4) 文件/etc/shadow中有如下一行: woman:$6$87wjcyRCGHJ2rPOb.SQw:15142:10:20:3:5:16253: 请解释各个字段的含义。