内容纲要
- 用户、组
- 用户、组的配置文件
- 用户和组管理命令
一、用户、组
用户
- 系统在用户登录时为用户分配一个令牌便于权限管理,在linux系统中令牌即为UID
- UID编码规则:
- root用户的UID为0,普通用户的UID为1-60000,其中系统用户与登录用户的分配如下:
- 系统用户:1-499(CentOS 6),1-999(CentOS 7)
- 登录用户:500+(CentOS 6),1000+(CentOS 7)
- root用户的UID为0,普通用户的UID为1-60000,其中系统用户与登录用户的分配如下:
- 系统用户主要为系统运行的程序准备。
组
- 系统为了方便管理,设立组的概念,组内用户的权限继承自组权限
- 组同样设置GID,其编码规则同UID
- 建立新用户时系统默认同时建立同名组,其UID和GID号相同
安全上下文
- 进程所能够访问资源的权限取决于进程的运行者的身份
组的类别
- 用户的主要组:一个用户有且只属于一个主组,默认其名称与用户名相同
- 用户的辅助组:一个用户可以属于零个或多个辅助组
二、用户、组的配置文件
- linux用户、组的配置文件主要如下四个:
/etc/passwd 用户账号相关属性配置文件
/etc/shadow 用户密码相关属性配置文件
/etc/gpasswd 组账号相关属性配置文件
/etc/gshadow 组密码相关属性配置文件
-
passwd文件格式:
name:passwd:UID:GID:GECOS:directory:shell
- name: 用户登录名
- passwd: 用户密码,现在密码已经移至
/etc/shadow
文件,被占位符x
代替 - UID: 用户ID号
- GID: 用户所属的主组ID号
- GECO: 用户信息注释
- directory: 用户家目录路径
- shell: 用户默认shell
-
shadow文件格式:
login name:encrypted password:date of last password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field
- login name:用户登录名
- encrypted password: 加密的密码
- 加密密码如图
$6
代表加密方式为SHA512,加密方式很多,例如$1
代表MD5加密$AArU9fX$
中两个$符号间是一段随机字符,称作盐(salt),用于确保即使是相同密码加密的结果也不同,进一步加强密码安全性- 后面的字符是加密密文正文,不同加密方式长度不同,但是只要加密方式相同,密码位数不同加密后的密文位数是相同的
- 更改密码加密方式:
authconfig --passalgo=sha256 --update
-
date of last password change: 上次修改密码时间,从1970-1-1起算的天数
-
minimum password age: 最短密码时间,普通用户更换密码的最短间隔天数,0表示随时可以变更
-
maximum password age: 最长密码时间,用户使用一个密码最长时间,99999表示永不过期
-
password warning period: 密码达到最长时间前提前报警提示的天数,默认7天
-
password inactivity period: 密码达到最长时间后允许修改密码的宽限期,超出后用户被锁定
-
account expiration date: 用户账户有效期,从1970-1-1起算的天数
-
group文件格式:
group name:passwd:GID:user list
- group name: 组名称
- passwd: 组密码,用占位符
x
代替,加密密码移至/etc/gpasswd
文件 - GID: 组ID号
- user list: 以当前组为辅助组的用户,多用户用
,
分隔
-
gshadow文件格式:
group name:encrypted password:administrators:members
- group name: 组名称
- encrypted password: 加密的密码,与
/etc/shadow
文件中的密码加密方式相同 - administrators: 组管理员,可以修改组密码,多名管理员用
,
分隔 - members: 以当前组为辅助组的用户,内容必须与
/etc/group
文件中的user list相同
-
注意:修改账号相关设置(e.g. /etc/passwd /etc/shadow /etc/group /etc/gpasswd)时,必须重新登录才能够生效
三、用户和组管理命令
(一)用户管理命令
(1)useradd 用户创建
- 语法:
useradd [options] LOGIN
- 用法:
-u UID <!--指定UID,[UID_MIN, UID_MAX]定义在/etc/login.defs-->
-o <!--配合-u 选项,不检查UID的唯一性-->
-g GID <!--指明用户所属基本组,可为组名,也可以GID-->
-c "COMMENT" <!--用户的注释信息-->
-d HOME_DIR <!--以指定的路径(不存在)为家目录-->
-s SHELL <!--指明用户的默认shell程序,可用列表在/etc/shells文件中-->
-G GROUP1[,GROUP2,...] <!--为用户指明附加组,组须事先存在-->
-N <!--不创建私用组做主组,使用users组做主组-->
-r <!--创建系统用户,默认不创建家目录,shell为/sbin/nologin-->
- 实验:创建一个用户billy,指明UID=1010,属于附加组hellopeiyang和natasha,家目录为/app/billy,使用的shell为csh。
-
命令:
useradd -u 1010 -G hellopeiyang,natasha -d /app/billy -s /bin/csh billy
-
用
getent
命令检查hellopeiyang,natasha,billy三个组的/etc/group文件,确认用户列表存放的是以此组作为辅助组的用户
-
- 用户创建默认配置文件
/etc/default/useradd
- 使用
useradd -D
命令修改用户创建默认配置文件
useradd -D -b /app <!--当不指定家目录时,自动在/app下新建用户家目录-->
useradd -D -g group <!--当使用useradd -N选项时,使用设置的组作为主组,默认为users组-->
useradd -D -s shell <!--当不指定默认shell时,自动使用设置的shell-->
- 用户家目录默认配置文件
/etc/skel
使用useradd
建立用户家目录时,将/etc/skel
下的所有文件复制到家目录中,相当于执行命令cp -a /etc/skel/.[^.]* /home/user
-
newusers passwd格式文件
批量创建用户 -
cat 格式文件 | chpasswd
批量修改用户密码,格式文件格式user name:password
(2)usermod 用户属性修改
- 语法:
usermod [OPTION] login
- 用法:
-u UID <!--新UID,必须唯一不重复,除非使用-o 选项-->
-g GID <!--新主组-->
-G GROUP1[,GROUP2,...[,GROUPN]]
<!--新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项-->
-s SHELL <!--新的默认SHELL-->
-c 'COMMENT' <!--新的注释信息-->
-d HOME <!--新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项-->
-l login_name <!--新的名字-->
-L <!--lock指定用户,在/etc/shadow 密码栏首增加!-->
-U <!--unlock指定用户,删除/etc/shadow 密码栏首的"!" -->
-e YYYY-MM-DD <!--指明用户账号过期日期-->
-f INACTIVE <!--设定非活动期限-->
- 实验:将billy用户的主组改为harry,附加组增加sarah,家目录迁移到/home/billy下,账号于2018年8月31日过期,最后将billy账户锁定
- 命令:
getent group harry
usermod -g 1004 -aG sarah -md /home/billy -e 2018-08-31 billy <!--注意a在G前,m在d前-->
usermod -L billy
(3)userdel 删除用户
userdel login <!--删除login用户-->
userdel -r login <!--删除login用户同时删除家目录-->
(4)id 查看用户相关ID信息
语法:id [OPTION]... [USER]
用法:
-u <!--显示UID-->
-g <!--显示GID-->
-G <!--显示用户所属组的ID-->
-n <!--显示名称,需配合ugG使用-->
(5)切换用户 su
su user <!--切换至user用户,但是不切换至user目录、不读取user用户配置文件-->
su - user <!--切换至user用户,同时切换至user目录并读取user用户配置文件-->
su/ su - <!--不写用户名默认切换至root用户-->
exit <!--退出切换的用户,注意不要在切换的用户下再切换用户,会导致系统异常-->
su - root -c 'command' <!--只使用root身份执行一次command命令即切换回原用户-->
- root用户切换至普通用户不需要密码,普通用户切换至root用户需要root密码
(6)设置密码 passwd
- 语法:
passwd [OPTIONS] UserName
- 用法:
-l <!--锁定指定用户-->
-u <!--解锁指定用户-->
-e <!--强制用户下次登录修改密码-->
-n mindays <!--指定最短使用期限-->
-x maxdays <!--最长使用期限-->
-w warndays <!--提前多少天开始警告-->
-i inactivedays <!--非活动期限-->
--stdin <!--从标准输入接收用户密码-->
- 实验:将harry的密码改为"hello",同时密码最短使用期限3天,最长使用期限42天,密码到期前7天提示修改,过期后5天将账户锁定
- 命令:
echo "hello" | passwd -n 3 -x 42 -w 7 -i 5 --stdin harry
(7) 修改用户密码策略 chage
语法:chage [OPTION]... LOGIN
用法:
-d <!--LAST_DAY,修改密码上次修改时间-->
-E --expiredate <!--EXPIRE_DATE,设置账户失效时间-->
-I --inactive <!--INACTIVE,设置密码修改宽限期-->
-m --mindays <!--MIN_DAYS,设置密码修改最短间隔时间-->
-M --maxdays <!--MAX_DAYS,设置密码使用最长期限-->
-W --warndays <!--WARN_DAYS,设置密码过期前的提前警告时间-->
–l <!--显示密码策略信息-->
(8)其他用户管理命令
- chsh -s shell 修改shell
- chfn 修改用户注释信息
- finger 查看用户详细信息
(二)组管理命令
(1)创建组 groupadd
- 语法:
groupadd [OPTION]... group_name
- 用法:
-g GID <!--指明GID号;[GID_MIN, GID_MAX]定义在/etc/login.defs-->
-o <!--配合-g属性,不检查GID的唯一性-->
-r <!--创建系统组-->
(2)修改组属性 groupmod
- 语法:
groupmod [OPTION]... group
- 用法:
-n group_name <!--设置新名字-->
-g GID <!--设置新的GID-->
-o <!--配合-g属性,不检查GID的唯一性-->
(3)删除组 groupdel
- 语法
groupdel group_name
(4)更改组密码 gpasswd
- 语法:gpasswd [OPTION] GROUP
- 用法:
-a user <!--将user添加至指定组中-->
-d user <!--从指定组中移除用户user-->
-A user1,user2,... <!--设置有管理权限的用户列表-->
- 实验:创建组david,将用户hellopeiyang,natasha,sarah加入到组中,将natasha从组中移除
- 命令:
groupadd david
gpasswd -a hellopeiyang,natasha,sarah david
gpasswd -d natasha
-
结果如下图
-
第1步,建立组david;
-
第2步,为组david添加用户hellopeiyang,natasha,sarah;
-
第3步,将natasha从组david中删除。
-
-
newgrp命令:临时切换主组,如果用户本不属于此组,则需要组密码
语法:newgrp group_name
(5)更改和查看组成员 groupmems
- 语法:
groupmems [options] [actions]
- 用法:
options:
-g, --group group_name <!--更改为指定组,只有root可以执行,普通用户只能修改所在组-->
actions:
-a, --add username <!--指定用户加入组-->
-d, --delete username <!--从组中删除用户-->
-p, --purge <!--从组中清除所有成员-->
-l, --list <!--显示组成员列表-->
- groups 显示用户所属于的组
groups user_name
网友评论