近期整理了一下Linux系统关于账户管理相关的文件(用户、组、口令策略相关)参数说明
账户管理
账户管理概述
Linux操作系统是多用户的操作系统,它允许多个用户同时登录到系统上,使用系统资源。账户实质上就是一个用户在系统上的标识,系统依据账户ID来区分每个用户的文件、进程、任务,给每个用户提供特定的工作环境,使每个用户的工作都能独立不受干扰的进行。
用户和组
Linux的账户包括用户账户和组账户两种。
- 用户账户:分为普通用户账户和超级用户账户。普通用户账户在系统上的任务是进行日常工作,超级用户账户在系统上的任务是对普通用户和整个系统进行管理。
- 组账户:是用户的集合,有两种类型私有组和标准组。当创建一个新用户时,如果没有指定其所属的用户组,系统就会建立和该用户同名的私有组,此私有组仅包含这个用户自己,标准组可以包含多个用户,诺使用标准组,在创建一个新用户时就应指定其所属的组。
从另一方面将,同一个用户可以属于多个组,当一个用户属于多个组时,其登录后所属的组称为主组,其他的组称为附加组。
Linux环境下的账户系统文件
Linux系统下的账户文件主要有/etc/passwd,/etc/shadow,/etc/group和/etc/gshadow4个。
- /etc/passwd
文件中每行定义一个用户账号,一行中又划分为多个字段定义用户账号的不同属性,各字段间用“:”分隔。文件对任何用户均可读,为增加安全性考虑,centos默认使用shadow passwords保护。
[root@localhost ~]# more /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
字段 | 说明 |
---|---|
用户名 | 用户登录系统时使用的用户名,在系统中是唯一的。 |
口令 | 此字段存放加密过的口令。这里是X,表示用户口令是被/etc/shadow文件保护的,所有加密的口令以及和口令有关的设置都保存在/etc/shadow中。 |
用户标识号 | 是一个整数,在系统内部标识用户,每个用户的UID都是唯一的,root账户UID是0,从1~499是系统的标准账户。普通用户UID从500开始。 |
组标识号 | 是一个整数,在系统内部标识用户所属的组。每个用户账户在建立好后都会有一个主组。主组相同的账户GID相同。默认情况下,每一个账户建立好后都会建立一个和账户名相同的组,作为该账户的主组,这个组只有用户本人这一个成员,即私有组。 |
GECOS | 存放用户全名、地理位置等信息。 |
宿主目录 | 用户登录后进入的目录。 |
命令解释器 | 指示该用户使用的shell,默认为bash。 |
- /etc/shadow
文件储存用户加密后的口令,只对root用户可读且提供了一些口令时效字段。
[root@localhost ~]# more /etc/shadow
root:$6$OhoQzq0exU6byeqp$Fk6gtckmK.X8IJxevwTUxkTcvUuL4TojEO8KQY/uqKlUkytqVpO9J4zDafOYBkb33OnHiPtQxAaP0RPYM8y4a0::0:99999:7:::
bin:*:16659:0:99999:7:::
daemon:*:16659:0:99999:7:::
栏位 | 说明 |
---|---|
用户名 |
用户的账户名。 |
口令 | 用户的口令,SHA512加密过的。 |
最后一次修改时间 | 从1970年1月1日起,到用户最后一次修改口令的天数。 |
最小时间间隔 | 从1970年1月1日起,到用户可更改口令的天数。 |
最大时间间隔 | 从1970年1月1日起,到用户必须修改口令的天数。 |
警告时间 | 在用户口令过期之前多少天提醒用户更新。 |
不活动时间 | 在用户口令过期之后到禁用账户的天数。 |
失效时间 | 从1970年1月1日起,到账户被禁用的天数。 |
标志 | 保留位。 |
- /etc/group
将用户分组是Linux中对用户进行管理及控制访问权限的一种手段。每个用户都属于某一个组,一个组可以有多个用户,一个用户也可以有多个组。当一个用户是多个组的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的主组,而其他组属于附加组。用户要访问附加组文件时,必须首先使用newgrp命令使自己成为所要访问的组的成员。组的所有属性都放在/etc/group文件中。/etc/group文件对任何用户可读。
[root@localhost ~]# more /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
栏位 | 说明 |
---|---|
组名 | 该组的组名。 |
组口令 | 组口令,由于安全性原因,已不使用该字段保存口令,用X占位。 |
GID | 组的识别号,和UID相似,每个组都有自己独有的识别号,不同组的GID不同。 |
组成员 | 属于这个组的成员,多个成员间用“,”分隔。 |
- /etc/gshadow
文件用于定义用户组口令、组管理员等信息,该文件只有root用户可读
[root@localhost ~]# more /etc/gshadow
root:::
bin:::
daemon:::
sys:::
adm:::
tty:::
disk:::
lp:::
栏位 | 说明 |
---|---|
组名 | 组名称,该字段与group文件中的组名称对应。 |
组口令 | 组口令,该字段用于保存已加密的口令。 |
组的管理员账号 | 组的管理员账号,管理员有权限对该组添加、删除账号。 |
组成员 | 属于改组的用户成员列表,列表中多个用户间用“,”分隔。 |
管理账户的命令行工具
命令 | 说明 |
---|---|
useradd [选项]<用户名> | 添加新用户 |
usermod [选项]<用户名> | 修改已经存在的指定用户 |
userdel [r] <用户名> | 删除已经存在的指定用户,-r参数用于删除用户自家目录 |
groupadd [选项]<组名> | 添加新的组 |
groupmod [选项]<组名> | 修改已经存在的指定组 |
groupdel <组名> | 删除已经存在的指定组 |
useradd gjn #创建一个新用户gjn
groupadd GJN #创建一个新组GJN
useradd -G GJN tom #创建一个新用户tom并添加到GJN组
mkdir /www;useradd -d /www -M A #创建一个新用户A,指定登录目录/www,不创建用户宿主目录(-M)
usermod -G GJN A #将用户A添加到附加组GJN中
usermod -l jerry -d /home/jerry -m tom #将tom用户改为jerry,宿主目录改为/home/jerry
groupmod -n jerry tom #tom组改成Jerry
userdel A #删除用户A
userdel -r jerry #删除用户jerry并删除自家目录
groupdel GJN #删除组GJN
使用passwd命令进行口令管理
创建用户之后,要给新用户设置口令,此时需要使用passwd命令,其格式是:
passwd <选项> <登录用户名>
选项 | 说明 |
---|---|
-S | 列出口令的状态信息 |
-l | 锁定用户账户 |
-u | 解锁已锁定账户 |
-d | 删除口令 |
-k | 保持口令不变,直到口令过期失效后方能更改 |
--stdin | 从标准输入读取口令(非交互模式) |
只有管理员账户(root)可以更改其他用户口令,普通用户只能更改自己的口令,在更改口令之前,系统会要求用户输入旧的口令。
chage命令
在Linux系统上,修改口令时效分为:
- 对于未来创建的所有用户的口令时效,需要修改/etc/login.defs文件。
- 对已经存在的用户修改口令时效通过chage命令管理
- 设置新添加用户的口令时效:
参数 | 说明 |
---|---|
PASS_MAX_DAYS | 设定多少天后要求用户修改口令,默认99999,即关闭了口令时效。 |
PASS_MIN_DAYS | 本次口令修改后,至少需要多久才允许更改口令。 |
PASS_WARN_AGE | 设置口令失效前多少天开始通知用户修改口令。 |
- 设置已存在用户的口令时效:
- chage命令只适用于本地系统账户,对LDAP账户和数据库账户不起作用
- chage命令实质上是修改影子口令文件/etc/shadow中的与口令时效相关的字段值
chage命令的格式是:
chage <选项> <登录用户名>
选项 | 描述 |
---|---|
-m days | 指定用户变更口令所间隔的最小天数。如果值为0,口令就不会过期(PASS_MIN_DAYS) |
-M days | 指定用户口令有效的最多天数(PASS_MAX_DAYS) |
-d days | 指定从1970年1月1日起,口令被改变的天数 |
-I days | 指定口令过期后,账号被锁定前不活跃的天数,如果值为0,账号在过期后就不会被锁定 |
-E date | 指定账号被锁定的日期,日期格式为YYYY-MM-DD。若不用日期,也可以使用自1970年1月1日后经过的天数 |
-W days | 指定口令过期前多久要告警用户的天数 |
-I | 列出指定用户的当前时效信息,以确定账号何时过期 |
用户和组状态命令
命令 | 功能 |
---|---|
whoami | 用于显示当前用户的名称 |
id | 用于显示用户的身份 |
groups | 用于显示指定用户所属的组 |
newgrp | 用于将用户从当前组转换到指定的附加组,用户必需属于改组才可以使用 |
[root@localhost ~]# whoami
root
[root@localhost ~]# id
uid=0(root) gid=0(root) 组=0(root)
[root@localhost ~]# groups
root