第七章 用户和用户组管理
文章目录
用户配置文件
用户信息文件/etc/passwd
- 用户管理简介
越是对安全性要求高的服务器, 越需要建立合理的用户权限等级制度和服务器操作规范.
在linux中主要是通过用户配置文件来查看和修改用户信息.
- /etc/passwd
name:password:UID:GID:GECOS:directory:shell
root:x:0:0:root:/root:/bin/bash
每行一个用户, 共七个字段, 用
:
分隔
vi /etc/passwd
{
root : 用户名
x : 密码标志
0 : UID
0 : GID
root : 用户说明
/root : 家目录
/bin/bash : 登录之后的shell
}
1. 用户名 : 要规范.
2. 密码标志 : 文件passwd的权限是所有用户都可读, 所以密码以加密方式存放在文件shadow中, 虽然加密, 但是可以破解, 这个文件的权限是只有root可读. x表示用户是有密码的.
3. UID : 用户id
0 : 超级用户
1~999 : 系统用户( 伪用户 )
1000~65535 : 普通用户
每个用户都有个id号, 而用户名是为了方便查看.
如果将用户的uid改为另一个用户的uid, 系统则认为两个用户为一个用户.
伪用户是为了给系统启动服务, 命令调用的, 如果删除了这些用户, 相对应的服务或命令就无法使用了, 这些用户也不能登录.
4. GID : 用户的初始组id.
5. 用户说明 : 备注信息, 可省略.
6. 家目录 : 用户登录的初始位置.
7. 登录之后的shell : shell是linux的命令解释器( 用户输入命令, shell会给内核, 内核读取后返回给shell, 并解释返回结果 ), 标准shell是/bin/bash, 伪用户的shell为/sbin/nologin.
- 初始组和附加组
初始组 : 组名和用户名相同, 用户建立后立刻拥有这个用户组的相关权限( 用户建立后就拥有组 ), 每个用户必须有且只有一个初始组, 初始组可以改, 但是不推荐改.
附加组 : 指用户可以加入多个其他的用户组, 并拥有这些组的权限.
影子文件/etc/shadow
该文件是passwd的影子文件( 和passwd内容相似, 但是权限不同 ).
- 文件
vi /etcshadow
{
第一字段 : 用户名.
第二字段 : 加密密码, 加密算法为SHA512算法.
如果密码为`!!`或`*`代表没有密码, 不能登录.
第三字段 : 密码最后一次修改日期.
标准时间为1970年1月1日, 每过一天时间戳加1.
第四字段 : 两次密码的修改时间间隔( 和第三字段相比, 间隔几天才能修改 ).
第五字段 : 密码有效期( 和第三字段相比 ).
第六字段 : 密码修改到期前的警告天数( 和第五字段相比 ).
第七字段 : 密码过期后的宽限天数( 和第五字段相比 ).
第八字段 : 账号失效时间, 要用时间戳表示.
第九字段 : 保留.
}
- 时间戳换算
日期 -> 时间戳 :
echo $(($(date --date='2023-01-07' +%s)/86400+1))
时间戳 -> 日期 :
date -d '1970-01-01 19364 days'
组信息文件/etc/group和组密码文件/etc/gshadow
- /etc/group
group_name:password:GID:user_list
root:x:0:
vi /etc/group
{
root : 组名
x : 组密码标志
0 : GID
user_list : 组中附加用户
}
- /etc/gshadow
vi /etc/gshadow
{
组名
组密码, 不推荐设置
组管理员用户名
祖中附加用户
}
用户管理相关文件
- 用户的家目录
- 普通用户
所有者和所属组都是此用户, 权限是700, 添加一个用户会在
/home
目录下自动生成一个跟用户名相同的
目录- 超级用户
所有者和所属组是root, 权限是550.
- 用户的邮箱
每个用户的邮箱在
/var/spool/mail/用户名/
目录下, 默认添加用户后就会生成该目录.
- 用户模板目录
在用户的家目录下, 默认会有一些隐藏文件, 这是在添加用户后自动创建的.
在
/etc/skel/
用户模板目录下的文件都会在添加用户时自动创建到用户的家目录中.
用户管理命令
添加用户useradd
- 命令格式
useradd [参数] 用户名
- 参数 :
参数 | 功能 |
---|---|
-u | 指定UID. GID会和UID相同, 不推荐 |
-g | 指定初始组,不推荐 |
-G | 指定附加组, 前提是组已存在, 添加多个可用逗号分隔 |
-c | 指定说明( passwd文件中的第五个字段 ) |
-d | 指定家目录, 不推荐 |
-s | 指定shell, 默认为/bin/bash |
- 用户默认值文件
/etc/default/useradd
/etc/login.defs
这两个配置文件中设置了用户添加时生成的默认值, 在创建用户时系统会调用这两个文件.
在配置文件中可以看到默认值, 也可修改.
vi /etc/default/useradd
{
HOME=/home : 创建用户时默认的家目录
INACTIVE=-1 : 密码过期宽限天数
EXPIRE= : 密码失效时间
SHELL=/bin/bash : 默认shell
SKEL=/etc/skel : 模板目录
CREATE_MAIL_SPOOL=yes : 是否建立邮箱
}
vi /etc/login.defs
{
PASS_MAX_DAYS 99999 : 密码有效期
PASS_MIN_DAYS 0 : 密码修改间隔
PASS_MIN_LEN 5 : 密码最小5位, 现在是PAM( 8位 )
PASS_WARN_AGE 7 : 密码到期警告
UID_MIN 1000
UID_MAX 60000 : UID范围
GID_MIN 1000
GID_MAX 60000 : GID范围
ENCRYPT_METHOD SHA512 : 加密模式
}
用户密码passwd
- 命令格式
passwd [参数] [用户名]
- 参数 :
参数 | 功能 |
---|---|
-S | 查询用户的密码状态, 仅root可用 |
-l | 暂时锁定用户, 仅root可用 |
-u | 解锁用户, 仅root可用 |
- - stdin | 使用字符串作为用户的密码, 多在shell编程中为用户设置初始密码 |
- 密码状态
[root@localhost etc]# passwd -S centos
centos PS 2023-01-06 0 99999 7 -1 (Password set, SHA512 crypt.)
[root@localhost etc]# grep centos /etc/shadow
centos:$6$Yj.s/7Bl$YDF7uIF2oTLpgi0:19363:0:99999:7:::
密码状态数值与shadow文件中的值相对应.
- 锁定用户
passwd -l centos
锁定之后, shadow文件中密码位前会多出
!!
, 使其密码失效, 这样用户就不能登录了.
- 使用字符串作为用户的密码
echo '123' | passwd --stdin centos
修改用户信息usermod和用户密码状态chage
- usermod
-
命令格式
usermod [参数] 用户名
- 参数 :
useradd的参数在usermod中都适用, 另外还有其他参数.
-L
: 锁定用户
-U
: 解锁用户 -
功能
usermod是针对已经存在的用户, 而uesradd是针对未添加的用户.
-
- chage
- 命令格式
chage [参数] 用户名
- 参数 :
-l
: 列出用户的详细密码状态
-d
: 修改密码最后一次更改日期( shadow第三字段 )
chage -d 0 centos
: 将密码修改日期归零, 用户一登录就要修改密码
- 参数 :
- 命令格式
删除用户userdel和用户切换su
- userdel
-
命令格式
userdel [参数] 用户名
- 参数 :
-r
: 删除用户的同时, 删除用户的家目录
- 参数 :
-
手工删除
删除
passwd, shadow, group, gshadow文件中的用户信息, 邮件目录和家目录
即可, 添加用户同样如此.
-
- id
id 用户名
查看用户的uid, gid, 组信息
- su
su [参数] 用户名
- 功能 :
切换用户, root切换成其他用户时不需要输入密码, 其他用户切换成任何用户都需要输入密码. - 参数 :
-
: 连带用户的环境变量一起切换,env
可以查看环境变量
su - root -c "useradd centos"
: 不切换成root, 但是执行useradd命令添加用户centos
- 功能 :
用户组管理命令
- 添加用户组
groupadd [参数] 组名
groupadd -g 1000 组名
: 指定GID - 修改用户组
groupmod [参数] 组名
参数 :
-g : 修改GID
-n : 修改组名
groupmod -n [新组名] [旧组名]
该命令不推荐使用.
- 删除用户组
groupdel 组名
删除组的前提, 可以有附加用户, 组中不能有初始用户.
- 把用户添加到组中或删除
gpasswd 参数 组名
参数 :
-a 用户名 : 添加
-d 用户名 : 删除