文章目录
用户和组账户管理
简介
1、概念及配置文件
- Linux 操作系统是一个多用户操作系统,允许同时多个用户登录到系统上并使用资源
- 系统根据账户来区分每个用户的文件、进程、任务、工作环境,使得每个用户工作间不受干扰
- Linux系统将用户分组进行对用户的管理以及控制访问权限,每个用户都属于某个用户组,一个组中可以有多个用户,一个用户也可以属于不同的组
- /etc/group、/etc/passwd、/etc/shadow文件都是有关于系统管理员对用户和用户组管理时相关的文件
- /etc/passwd 存放用户信息、基本属性
- /etc/shadow 保存用户密码(使用哈希加密)
- /etc/group 保存用户组
- /etc/gshadow 保存用户组密码
- /etc/default/useradd 用户默认配置文件
/etc/passwd
/etc/passwd文件中每一行记录都对应着一个用户,每行记录又被冒号分隔为7个字段,其含义如下
#以root为例
root(用户名):x(口令):0(用户标识号UID):0(用户组标识号GID):root(注释性描述):/root(主目录):/bin/bash(登录Shell)
!一些详细说明
- “用户名” 是代表用户账号的字符串,为了兼容,最好不要包含点字符(.),并且不使用连字符(-)和加号(+)开头,也不能使用(😃,因为冒号是分隔符
- “口令”,真正的密文是放在/etc/shadow文件中的,并进行了加密,/etc/passwd中只存放了一个特殊的字符,如“x“或”*“
- ”用户标识号“ 是一个整数,一般情况下与用户名一一对应,如果几个用户名对应于同一个UID,系统内部将把它们视为同一个用户,但他们可以有不同的口令、主目录、登录shell等
- ”组标识号“ 对应于/etc/group文件中的一条记录
- ”注释信息“ 记录用户的一些个人情况,如真实姓名、电话、地址等
- ”主目录” 或者可以称为用户的“家目录”,也就是用户起始工作的目录。在LInux中,各普通用户的主目录都被组织在/home下,主目录的名称就是该用户的登录名
- “登录Shell” Shell是用户与Linux操作系统之间的接口,用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或者其它特定的程序,在这里,就是Shell
/etc/shadow
由于/etc/passwd文件是所有用户都可读的,用户密码容易被破解,所以安全性要求较高的Linux系统将加密后的口令分离出来,单独存放在一个文件/etc/shadow里,只有超级用户才有该文件的读权限
/etc/shadow中记录行与/etc/passwd一一对应,文件格式也类似,由若干个字段组成,字段间用":"隔开
#以bin为例
bin(登录名):*(加密口令):17110(最后一次修改时间):0(最小时间间隔):999999(最大时间间隔):7(警告时间):(不活动时间):(失效时间):(标志)
!详细说明
- “口令” 存放的是加密后的用户口令字,长度为13个字符
- “最后一次修改时间” 从某个时刻起,到用户最后一次修改口令的天数
- “最小时间间隔” 两次修改口令之间所需的最小天数
- “最大时时间间隔” 口令保持有效的最大天数
- “警告时间” 从系统开始警告用户到用户密码正式失效之间的天数
- “不活动时间” 用户没有登录活动但账号仍能保持有效的最大天数
- “失效时间” 字段给出的是一个绝对天数,如果使用了这个字段,那么就给出相应账号的生存期,期满后,该账号就不再是一个合法的账号了,也不能用来登录
/etc/group
当一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的时用户所属的主组,也就时登录时所属的默认组,其它组称为附加组
字段格式
#以root为例
root(组名):x(口令):0(组标识号GID):(组内用户列表)
!详细说明
- “组内用户列表” 属于这个组的所有用户的列表,不同用户之间用逗号分隔,这个用户组可能是用户的主组,也可能是附加组
2、Linux用户分类
-
Linux有三类用户,超级用户(有大部分的权限)普通用户(只有一些普通权限)
-
每个用户会有一个UID,不同种类的用户UID范围不同
-
超级用户(root,UID=0)
-
普通用户(UID:1000-60000)
-
伪用户(UID:1-999)伪用户不能登录系统,而且没有宿主目录
!关于伪用户 -
伪用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空,它们存在主要是方便系统管理,满足相应的系统进程对文件属主的要求
-
常见的伪用户bin sys adm uucp lp nobody
-
bin 拥有可执行的用户命令文件
-
sys 拥有系统文件
-
adm 拥有账户文件
-
uucp UUCP使用
-
lp lp或lpd子系统使用
-
nobody NFS使用
3、 Linux用户命令
添加用户命令:useradd
参数说明
#语法
useradd 选项 用户名
#选项(不要强制去记,常用就好)
-c comment 指定一段注释性描述
-d 指定用户主目录 ,如果此目录不存在,同时使用-m选项,创建主目录
-g 指定用户组
-G 指定用户所属的附加组
-s 指定用户的登录Shell
-u 指定用户号(UID) 如果同时加入了-o选项,则可以重复使用其它用户的UID
#用户名:指定新账号的用户名
eg.
1、创建一个名为sam的用户,家目录为ss,若没有该目录则自动创建
2、新建一个用户,登录Shell是 /bin/sh, 主用户组是group,同时又属于adm和root组
组group不存在,首先新建组
删除用户 userdel
语法及参数
#语法
userdel 选项 用户名
#选项
-r 把用户主目录一起删除
eg.
删除用户sam
修改用户 usermod
语法及参数
#语法
usermod 选项 用户名
#参数
-c -d -m -g -G -s -u -o 与useradd中的一致
-l 修改用户名
-L 锁定用户账号密码
-U 解锁用户账号
eg.
将sam的登录Shell更改为/bin/ksh 主目录改为/home/z 用户组改为developer
用户口令管理 passwd
语法及参数
#语法
passwd 选项 用户名
#参数
-l 锁定口令,即禁用账号
-u 解锁口令
-d 使账号无口令
-f 强迫用户下次登录时修改口令
eg
当前用户是普通用户,修改当前用户的口令
当前用户是超级用户时,修改任何用户的口令(包括root本身)
为用户指定空口令,这样用户sam在下一次登录时,系统就不允许该用户登录
passwd -l sam有同样功效
passwd -u sam 解锁
4、用户组命令
新增用户组 groupadd
语法及参数
#语法
groupadd 选项 用户组
#参数
-g 指定新用户组的组标识号(GID)
-o 一般与-g同时使用,表示新用户组GID可以与已有用户组的GID相同
eg.
添加新用户组group1,未指定GID时,GID是当前已有的最大GID的基础上加1
添加新用户组 group2,GID未1110
删除用户组 groupdel
语法
#语法
groupdel 用户组名
eg.
删除用户组group1
修改用户组属性 groupmod
语法及参数
#语法
groupmod 选项 用户组
#用户组
-g -o 与groupadd含义相同
-n 为用户组更改名字
eg.
修改group2的GID为1111
修改group2的名字为group3
用户组间切换 newgrp
如果一个用户同时属于多个用户组,那么该用户可以在用户组间切换,一遍具有其它用户组的权限
#语法
newgrp 目的用户组
eg.
用户sam同时属于sam,group1,group2,group3,主组为sam,现更改为group1
5、拓展——批量操作
添加批量用户(命令版本)
1、编写一个user.txt
文件内容是按照/etc/passwd密码文件的格式书写
user001::600:100:user:/home/user1:/bin/bash
user002::601:100:user:/home/user2:/bin/bash
user003::602:100:user:/home/user3:/bin/bash
user004::603:100:user:/home/user4:/bin/bash
user005::604:100:user:/home/user5:/bin/bash
2、以root身份执行/usr/sbin/newusers
从刚创建的用户文件user.txt中导入数据,创建用户
3、执行命令/usr/sbin/pwunconv
将/etc/shadow产生的shadow密码解码,然后写回/etc/passwd中,并将/etc/shadow的shadow密码栏删掉,这是为了方便下一步的密码转换工作,即先取消shadow password功能
4、编辑每个用户的密码对照文件passwd.txt
user001:123
user002:123
user003:123
user004:123
user005:123
5、以root身份执行命令/usr/sbin/chpasswd
创建用户密码,chpasswd将会经过/usr/bin/passwd命令编码过的密码写入/etc/passwd的密码栏
6、将密码编码为shadow password
执行命令/usr/sbin/pwconv 将密码编码为shadow password,并将结果写入/etc/shadow中
批量删除(Shell版本)
暂未找到相关的Linux命令批量删除的,所以使用Shell脚本实现
1、编写脚本
userdel -r user001
userdel -r user002
userdel -r user003
userdel -r user004
userdel -r user005
2、运行脚本