第六章 用户和组管理
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.实验题
(略)