第六章 用户和组管理

1.填空题

**(1)** Linux是多用户系统,对系统中的所有文件和资源的管理都需要按照 用户的角色 来划分。

每个用户都有属于自己的权限,可以相对保持自己的独立性和私密性,另又有相同或相似权限的用户可以划分在一个用户组中,借此在保护用户文件及资源的同时,又实现了资源的相对共享

**(2)** 每个用户都有唯一的用户名和唯一的用户id,用户id缩写为 uid

系统内核使用uid来记录拥有进程或文件的用户,而非用户名

/etc/passwd配置文件中存放着用户名与uid的对应关系

**(3)** 超级用户的gid为0,主目录为 /root

超级用户又称root用户或系统管理员,其uid也为0

**(4)** Linux系统的用户信息保存在配置文件 /etc/passwd 中。

Windows的用户和组都保存在SAM文件中,在开机状态下是没有办法查看SAM文件的;

而Linux中的/etc/passwd文件系统中的大多数用户可以读取,管理员可以修改。

**(5)** useradd命令如果不加任何参数,建立的是“三无”用户:一无: 主目录 ,二无: 密码 ,三无: 系统Shell

虽然在查看/etc/passwd文件时,可以看到新建用户的目录显示是/home/user,但当/home$cd user时提示没有那个文件或目录,然后查看/home目录下的子目录时(如,ls),并未发现user的显示,/home/user虽显示在/etc/passwd文件,但实际并不可用。

若想在建立新用户的同时也创建可用的主目录可以加参数-m,如useradd -m user1。

又或者使用另一个新建用户的命令,即adduser,该命令建立新用户时会显示建立用户的详细过程,有一个简单的人机交互过程,按照提示依次进行即可,例如,adduser user3。(该方法可以在新建用户的过程中一并建立用户组、将用户加入组、创建主目录、设置密码等)

**(6)** 管理员可以使用passwd命令锁定某个用户账户,该命令需要 root 权限。

锁定用户:#passwd -l user

查看/etc/shadow文件:对应用户第二个字段的加密密码字符串前有一个!

锁定的账户再使用$su user尝试登录时,是无法登录的,提示(su:Authentication failure)

解锁:使用参数-u即可

**(7)** 使用usermod命令修改用户基本组的时候需要添加参数 -g

修改用户次要组(附加组)时使用参数-G

一个用户只能有一个基本组,但可以有多个附加组

一般基本格式:

sudo usermod -g [组名] [用户名]

sudo usermod -G [组名] [用户名]

注:修改前后可配合使用id [用户名] 命令对比查看验证修改情况,可以通过查看/etc/passwd等相关文件中的详细信息进行具体分析

**(8)** userdel命令删除用户时,如果要同时删除用户的主目录,需要添加参数 -r

若不加-r参数,则只能删除用户,主目录仍会保留

**(9)** 使用groupdel删除组时,如果该组中仍包含某些用户,则必须 先删除这些用户后 才能删除组。

先删除用户:#userdel user(若要一并删除用户主目录,加参数-r)

再删除组:#groupdel group

**(10)** 使用 sudo usermod -G sudo user (即,将用户user添加进sudo组,以使其获得sudo权 命令暂时提升普通用户的权限。

赋予普通用户sudo权限在本篇文章简答题第(5)小题中已有详细说明,此处不再赘述

另,若想使普通用户有权限添加新用户到组,可以进行如下操作:

$sudo passwd -A user group(其中user是用户名且系统中已存在,group是组名且系统中已存在。此操作是将user用户指定为group组的管理员)

$su user(经过上面的操作后,再切换到user用户,尝试为组group添加一个别的用户user2)

 $gpasswd -a user1 group(在用户user下为组group添加添加用户user1)

2.简答题

**(1)** Ubuntu中的用户分为哪几种类型?各自的特点是什么?

普通用户

uid:1000~65535

登录路径:/bin/bash

用户主目录:/home/用户名

普通用户中有一个特殊的用户,即安装系统时创建的第1个用户,该用户相对其他普通用户,可以完成更多的管理任务,如创建用户等

超级用户(系统管理员)

uid:0

gid:0

主目录:/root

系统用户

uid:1~999

不代表人,代表系统的组成部分,如apache用户,运行Apache网络服务器的进程常作为用户apache来运行

没有登录Shell(因为不是真正的用户)

主目录很少在/home中,而在属于相关应用的系统目录中,如,Apache的目录在/var/www

**(2)** passwd文件都保存了用户的哪些信息?以图6.46为例进行说明。(图见教材)

注:在此只对passwd文件的各字段结构进行详细说明,考虑到结合相关例图进行简单分析并不难,故此处就不做过多说明了

username:password:uid:gid:userinfo(普通用户通常省略):home:shell

username给一个用户可读的用户名称
password加密的用户密码
uid用户ID,Linux内核用这个整数来识别用户
gid用户组ID,Linux内核用这个整数来识别用户组
userinfo用来保存帮助识别用户的简单文本
home当用户登录时,分配给用户的主目录
shell登录Shell是用户登录时的默认Shell,通常是/bin/bash

**(3)** group文件都保存了用户组的哪些信息?以图6.47为例进行说明。(图见教材)

注:在此只对group文件的各字段结构进行详细说明,考虑到结合相关例图进行简单分析并不难,故此处就不做过多说明了

group_name:group_password:group_id:group_members

group_name用户组名
group_password加密后的用户组密码
roup_id用户组ID
group_members逗号分隔开的组成员

**(4)** Ubuntu系统为了保护用户和组的密码安全采用了什么手段?相关文件是什么?

用户密码安全用户加密密码保存在/etc/passwd文件的第二个字段中,该文件大多数用户都可读取,虽该字段用x显示,但常用的加密算法MD5越来越容易被暴力破解,为安全,故采用一种更新的“影子密码”技术来保存密码,密码单独保存在专门的/etc/shadow文件中,只有超级管理员的root权限可以查看。

保障用户密码安全的相关文件:/etc/shadow

username:password:lastchg:min:max:warn:inactive:expire:flag

username用户的登录名
password加密的用户密码
lastchg自1970.1.1起到上次修改口令所经过的天数
min两次修改口令之间至少经过的天数
max口令还会有效的最大天数。99999,即永不过期
warn口令失效前多少天内向用户发出警告
inactive禁止登录前用户还有效的天数,可不定义
expire用户被禁止登录的时间,可不定义
flag保留,可不使用

组密码安全和用户账户文件/etc/passwd一样,为保护用户组的加密密码,防止被暴力破解,用户组文件也采用将组口令与组的其他信息分离的安全机制,即使用/etc/gshadow文件存储各个用户组的加密密码。

保障用户组密码安全的相关文件:/etc/gshadow

group_name:group_password:group_id:group_members

group_name用户组名
group_password加密后的用户组密码
roup_id用户组ID(可以为空)
group_members逗号分隔开的组成员(可以为空)

**(5)** 使用sudo命令时出现如图6.48所示的错误信息,为什么?应如何处理?(图见教材)

注:报错提示(*** is not in the sudoers file.This incident will be reported.)

出现上述错误的原因:由于Linux的超级用户权限是由sudo动态赋予的,一般安装系统时创建的第一个用户,系统会自动赋予,而之后新增的用户默认不会赋予sudo权,因此若需要某用户有sudo的权限,需要根据一定的规则进行手动赋予。

解决方法有三:

注:以下方法是基于当前的登录用户有sudo权限而言的,有sudo权的用户和超级用户root均可

其一:

sudo chomd u+w /etc/sudoers //赋予sudoers文件写权限

sudo vi/gedit /etc/sudoers //编辑sudoers文件,给对应的用户添加sudo权限

在sudoers文件中找到 root    ALL=(ALL:ALL) ALL

在其下添加如下一行 user    ALL=(ALL:ALL) ALL

注:user是指将要赋予sudo权限的用户的用户名

sudo chmod u-w /etc/sudoers 
//考虑到安全,需及时撤销对sudoers文件的写权限,若不撤销,有时可能会出现一些异常

扩展说明:针对上面提到的user    ALL=(ALL:ALL) ALL进行如下一些说明,该条可根据实际需要由以下任意一
         条进行替换
user     ALL=(ALL:ALL) ALL //允许用户user执行sudo命令,需输入密码
%user    ALL=(ALL:ALL) ALL //允许用户组user里面的用户执行sudo命令,需输入密码
user     ALL=(ALL:ALL) NOPASSWD:ALL //允许用户user执行sudo命令,不需要输密码
%user    ALL=(ALL:ALL) NOPASSWD:ALL //允许用户组user里面的用户执行sudo命令,不需要输密码

其二:

使用命令添加用户到sudo组,获得sudo的权限

例如:

$sudo usermod -G sudo user(user是指将要赋予sudo权限的用户的用户名)

其三:

若不出意外,当打开/etc/sudoers文件时可以看到首行有一注释提示(#This file MUST be edited with the 'visudo' command as root.)

可见,这算是官方推荐的一种标准的操作方式:--sudo visudo

3.实验题

(略)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐