文章目录
目标
- 用户及用户组存在的意义
- 用户在系统中的存储方式
- 深入分析用户涉及到的配置文件及内容
- 用户信息的查看(id命令)
- 用户身份的切换方式以及shell的特性
- 用户及用户组的建立及删除
- 用户及用户组的信息管理
- 用户认证文件的内容分析
- 用户认证管理
- 用户权力的下放
1. 用户及用户组存在的意义
用户是操作者在系统中的身份标识,组是逻辑概念,是用户的集合。用户的存在是为了限制权限,组的存在是为了归类用户,便于管理。Linux中用户大致分为两种,超级用户(可以管理系统中所有的资源)和普通用户(只能管理自己所拥有的资源)
2.用户在系统中的存储方式
用户在系统中就是文件中的字符串,每个字符串映射了该用户所用到的系统资源
3. 深入分析用户涉及到的配置文件及内容
1、/etc/passwd
#用户信息库,记录用户和用户id的对应关系,如图一,在命令框输入 vim /etc/passwd即可编辑和查看,可以看到图中一共有七列,依次分别表示:
用户名 密码 id 初始组id 用户说明 用户家目录 用户使用的shell
- 用户名:用户的名字
- 用户密码:显示的是x,因为为了安全,这一位的功能被转移到其他的文件中(/etc/shadow),普通用户是不能查看的,只有超级用户才可以查看
- 用户id:范围0~65535,超级用户的id为0
- 初始组id:初始组,也叫主组,一个用户在建立的时候会默认建立它的主组,是保持不变的,超级用户组的id为0
- 用户说明:登陆时的名字处显示的就是用户的说明
- 用户的家目录:用户登陆系统以后默认所在系统的位置,可用pwd命令查看
- 用户使用的shell:用户登陆系统以后和系统交互所使用的一个软件
图一
2、/etc/group
#组信息库,记录组的名称和组的id的对应关系,可用vim /etc/group查看
3、/home/用户同名目录
#默认用户家目录
4、/etc/skel/.*
#用户的配置文件模板,在建立用户时会将该文件复制到自己的配置目录里
5、/etc/shadow
#用户认证信息,可用vim /etc/shadow查看,也可以用man 5 shadow查看帮助
6、/etc/gshadow
#组认证信息,可用vim /etc/gshadow查看
7、/etc/shells
#用户可用shell的名称
4. 用户信息的查看
id 用户名
#查看指定用户的id信息
输入该命令,屏幕会显示:
uid 用户的id,即主id
gid 组id
groups 所有id
id命令的常用参数
id -u student #查看student用户的uid
id -g student #查看student用户的组id
id -G student #查看student用户所在的所有组的id
id -Gn student #将student用户的id组解释然后显示,只显示名字而不是id数字
whoami #查看用户时是谁
getent passwd 用户名 #查看该用户的相关信息
执行过程如图二:
5. 用户身份的切换方式及环境变量
注销用户
1、在图形中用鼠标注销
2、gnome-session-quit #注销当前用户,有提示
gnome-session-quit --force #强制注销当前用户,无提示
切换用户
su和su -
su #只切换当前用户身份,不切换用户环境,所以在切换用户时,“-”不能少
su - #切换用户身份及用户环境,前提是用户必须存在,使用完及时退出,不然有些命令执行时会有错
exit #退出当前用户
例:su - student #切换用户身份为student用户
图三
注意:此处可以用whoami命令查看是哪个用户,每次su以及su -切换到其他用户操作之后必须退出,然后再次切换到其他用户执行时,高级用户切换到低级用户不需要输入密码,低级用户切换到高级用户或平级用户需要输入密码
图四
6. 用户及用户组的建立及删除
这个实验之前,先重新打开一个shell用来监控建立的过程,在这个shell中输入命令
watch -n 1 'tail -n 3 /etc/passwd /etc/group;ls -l /home/'
#watch表示监控,n表示频率,1表示一秒,watch -n 1 表示每秒执行一次该命令,一次输入两条命令用“;”隔开,监控页面如图五所示
图五
实验过程如下:
1、groupadd westos #建立一个用户组
图六
2、groupdel westos #删除这个用户组
3、groupadd -g 6666 westos #建立一个用户组,并且设置组id为6666
图七
4、groupdel westos #删除这个用户组
useradd的常用参数:
-u 指定用户的 uid
-g 指定用户的 gid
-G 指定用户的附加组
-c 指定用户的说明
-d 指定用户的家目录 , 默认为 /home/username
-s 指定用户的默认shell
-M 在建立用户的时候不建立用户的家目录
5、useradd westos #添加一个用户westos
图八
6、useradd -u 8888 westos #添加一个用户westos,并指定它的uid为8888
#如果想指定用户的uid,需要在建立的时候就指定,如果用户已经建立好了,再指定用户的uid,系统会告诉你用户已经建立,如果在建立用户信息时指定了用户的uid,则系统会默认指定用户的组id和uid一样
7、userdel -r westos #删除用户
#删除用户时一定要加 -r ,这表示删除用户的信息以及用户的环境配置,如果不加 -r 只能删除用户的信息,还需要用命令 rm -fr /home/westos/ 删除
8、 useradd -g 1008 westos #建立用户并指定它的初始组id为1008
#注意:在指定用户的初始组id或附加组id时,这个组的身份必须存在,不然会指定失败,可以在指定之前用命令 groupadd -g 1008 westos 先建立组,然后再指定用户的组id
9、useradd -c “westos user” westos #指定用户说明为westos user
10、useradd -d /mnt/westos westos #指定用户的家目录为/mnt/westos
11、useradd -s /sbin/nologin #指定用户的shell为/sbin/nologin,这样的shell的用户是不能登陆的,也不能用su - 命令切换的
图九
7. 用户及用户组的信息管理
useradd是在建立用户时修改用户的信息,该方式显然不合适,那有没有什么命令能直接修改已经建立好的用户的信息呢???sure,那就是usermod命令啦
usermod常用参数:
-l 修改用户名称
-u 修改用户的 uid
-g 修改用户的 gid
-G 更改用户的附加组,会把原始的附加组清掉
-aG 只是添加用户的附加组,不会把用户原始的附加组清掉
-c 修改用户的说明
-d 只修改用户家目录的指向,而真正的家目录的目录不会变
-md 修改用户家目录的指向和真正的家目录 , 默认为 /home/username
-s 修改用户的 shell 类型
注意:groupmod -g 更改组的id
图十:部分代码
8. 用户认证文件的内容分析
/etc/shadow 用户认证信息文件,通俗一点理解,用户认证信息文件就是用户要向系统证明我是这个账号的持有者,用 vim /etc/shadow 查看文件,内容如图十一:
从图中可以看到,每一行都有九列,最后一列为空,每一列分别代表以下意思:
1.用户名称
2.用户密码
3.密码已经使用时间,从1970年至最后一次被修改的天数
4.密码最短有效期,假设为3,则用户三天内不能修改密码
5.密码最长有效期,在这个时间内必须要改一次密码
6.密码到期前警告,若为7,则在密码到期前7天会警告
7.密码非活跃天数,即密码到期后在一个活动周期内依然可以改密码
8.密码到期日
##若记不住这些命令,则可以用命令 man 5 shadow去查看
9. 用户认证信息的管理
passwd chage
-n 最短有效期 -m 天数
-x 最长有效期 -M 天数
-w 密码到期前警告 -W
-i 密码非活跃天数 -I
-S 查看密码状态
-l 锁定用户
-u 解锁
-f 强制退出
-e 将使用时间清零
-E 设置密码到期时间
注意:对于密码到期时间passwd命令没有权限,只有使用chage
10. 用户权利的下放
sudo 能把某些超级权限针对性的下放 , 并且不需要普通用户知道 root 密码 , 所以 sudo 相对于权限无限制性的 su 来说 , 还是比较安全的,sudo 执行命令的流程是当前用户切换到 root,然后以 root 身份执行命令 , 执行完成后 , 直接退回到当前用户 ; 而这些的前提是要通过sudo 的配置文件 /etc/sudoers 来进行授权。
使用命令 vim /etc/sudoers 直接对文件进行编辑,但是该编辑方法有一个缺点就是不提供语法检测,所以我们一般用 visudo 命令直接对文件进行编辑,该方法如果编辑时有语法错误会提示,过程如下:
1、打开一个监视窗口
watch -n 1 "tail -n 5 /etc/passwd /etc/group;ls -l /home/"
2、以root用户身份用命令 sudo 对文件进行编辑
visudo #用来编辑/etc/sudoers文件的一个命令,与vim无关,该命令提供语法的检测
3、一般在文件中大概100行处编辑,命令为:
用户名 主机名=(新用户身份)命令
例1、:student workstation.lab.example.com=(root) /usr/sbin/useradd
#student用户可以在workstation.lab.example.com主机上以root身份去添加用户,但第一次执行时需要输入密码
例2、student workstation.lab.example.com=(root) NOPASSWD: /usr/sbin/useradd
#student用户可以在workstation.lab.example.com主机上以root身份去添加用户,并且不需要输入密码
例3、student workstation.lab.example.com=(root) NOPASSWD: /usr/sbin/useradd,/user/sbin/userdel
#student用户可以在workstation.lab.example.com主机上以root身份去添加和删除用户,并且不需要输入密码
4、编辑完该文件后,使用命令 su - student 切换到student用户,然后执行命令 sudo useradd test1即可添加用户test1