Linux系统作为多用户多任务的操作系统,可以在同一时间内允许多个用户登录、操作及配置计算机,随着需求的增加,用户的增加,我们也就需要对用户进行管理,以至于更有效地开展项目,改善工作,更有效得满足场景需要,提高效果、效率、效益。
下面我们就来了解一下Linux中如何对用户进行管理操作。
通过系统中的命令对用户进行相应的操作。在讲解命令之前,我们需要了解,在linux操作系统中,以下的几个概念:
通过 useradd
命令来创建新的用户。
语法格式: useradd [参数] <用户名>
常用参数:
参数 | 作用 |
---|---|
-u | 指定用户UID |
-d | 指定用户家目录位置 |
-c | 添加用户说明/备注 |
-g | 指定用户初始所属的用户组 |
-G | 指定用户所属附加组 |
-s | 指定用户登录的shell解释器 |
操作演示:
添加新用户 xiaobei
[root@localhost ~]# useradd xiaobei
添加新用户 test01 并且指定其家目录为 /test/test01
[root@localhost ~]# useradd -d /test/test01 test01
添加新用户 test01 并且指定ID为6666
[root@localhost ~]# useradd -u 6666 test01
添加新用户 test01 并且指定其所属组为root,并设置其登录shell为nologin
[root@localhost ~]# useradd -g root -s /sbin/nologin test01
通过passwd
命令来设置当前登录用户(自身)或者其他用户的密码。该命令如果不加用户名,即代表对当前登录的用户进行操作。不加参数,代表设置密码。
语法格式: passwd [参数] [用户名]
常用参数:
参数 | 作用 |
---|---|
-d | 删除密码 |
-S | 查询用户密码的状态 |
-l | 锁定用户密码 |
-u | 解锁用户密码 |
操作演示:
设置当前登录用户的密码:
[root@localhost ~]# passwd
设置用户xiaobei的密码
[root@localhost ~]# passwd xiaobei
清除用户 xiaobei 的密码
[root@localhost ~]# passwd -d xiaobei
使用命令who
与 w
命令可以查询当前系统上已登录用户的相关信息。
语法格式: who [参数]
常用参数:
参数 | 作用 |
---|---|
-a | 打印全面信息 |
-b | 打印系统最近引导时间 |
-H | 带有列名打印信息 |
-u | 打印已登录用户列表 |
操作演示:
输出当前已登录的用户信息(带列名打印)
[root@localhost ~]# who -H
名称 线路 时间 备注
root pts/0 2020-12-30 16:16 (192.168.3.8)
注释:线路列表中的 pts/0 ,pts代表远程终端登录,如果输出了 tty1,则tty代表本地终端登录。
语法格式: w [参数]
常用参数:
参数 | 作用 |
---|---|
-h | 不带列名输出 |
-s | 使用短格式输出 |
操作演示:
输出当前已登录用户信息(带列名输出)
[root@localhost ~]# w
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.3.8 16:16 0.00s 0.46s 0.01s w
注释:LOGIN@ 代表登录时间,IDLE表示空闲时间,JCPU是与该终端连接的进程占用的时间,PCPU 是用户当前进程所占用的时间。
使用usermod
命令,可以修改用户相关属性和信息。
语法格式: usermod [参数] <用户名>
常用参数:
参数 | 作用 |
---|---|
-u | 修改用户UID |
-c | 修改用户的说明/备注 |
-g | 修改用户的所属用户组 |
-G | 修改用户的附加组 |
-L | 锁定用户密码 |
-U | 解锁用户密码 |
-s | 修改用户的登录shell |
操作演示:
设置用户xiaobei的登录shell为nologin 使其无法登录
[root@localhost ~]# usermod -s /sbin/nologin xiaobei
使用chage
命令修改用户和用户密码的有效期限,这个信息由系统用于确定用户何时必须更改其密码。
语法格式: chage [参数] [用户名]
常用参数:
参数 | 作用 |
---|---|
-M | 密码保持有效的最大天数 |
-W | 用户密码到期前,提前收到警告信息的天数 |
-E | 帐号到期的日期,会禁止此帐号 |
-d | 上一次更改的日期 |
-l | 显示用户的密码相关信息 |
操作演示:
使用户 xiaobei 的密码有效期最大为30天。
[root@localhost ~]# chage -M 30 xiaobei
使用命令userdel
删除用户。在删除之前确定用户没有登录。
语法格式: userdel [参数] [用户名]
常用参数:
参数 | 作用 |
---|---|
-f | 强制删除用户账号 |
-r | 同时删除用户的家目录 |
操作演示:
删除用户 test01 同时删除该用户的家目录
[root@localhost ~]# userdel -r test01
使用 su
命令切换当前登录用户。root 用户切换普通用户时不需要输入密码,反之需要。
语法格式: su [用户名]
常用参数:
参数 | 作用 |
---|---|
-c | 仅执行一次命令,不切换用户身份 |
操作演示:
切换到用户 xiaobei
[root@localhost ~]# su xiaobei
切换到用户 root 同时一起切换环境变量。
[xiaobei@localhost ~]$ su - root
用root用户执行一条命令 useradd
[xiaobei@localhost ~]$ su - root -c "useradd test01"
使用命令 logout
退出登录。远程终端以及su
命令登录的用户也可用 exit
退出。
在前面我们提到过,在创建新用户时,会同时创建一个与该用户同名的用户组。这是因为Linux中的用户,必须有一个所属组,如果在创建用户时指定一个所属组,就不会创建与其同名的组了。下面我们只简单介绍几个组管理的命令。
使用命令groupadd
添加用户组。
语法格式: groupadd [参数] <组名>
常用参数:
参数 | 作用 |
---|---|
-g | 创建的同时制定用户组ID |
操作演示:
添加用户组 userg 并指定id为6666
[root@localhost ~]# groupadd -g 6666 userg
使用命令groupmod
修改用户组的信息。
语法格式: groupmod [参数] <组名>
常用参数:
参数 | 作用 |
---|---|
-n | 修改组名 |
-g | 修改新的GUID |
操作演示:
修改用户组 userg 组名为testgroup
[root@localhost ~]# groupmod testgroup userg
使用命令gpasswd
来设置组和组内成员
语法格式: gpasswd <参数 > <组名>
常用参数:
参数 | 作用 |
---|---|
-a | 添加用户到组 |
-d | 从组删除用户 |
操作演示:
把用户 xiaobei 添加到 group01 用户组
[root@localhost ~]# gpasswd -a xiaobei group01
使用命令groupdel
来设置组和组内成员。如果组内有初始用户,则不能删除,如果组内有附加用户,也可以删除。
语法格式: groupdel [参数] <组名>
操作演示:
删除用户组 test01
[root@localhost ~]# groupdel test01
以上所有的用户管理、组管理命令,包括用户的添加、删除,密码的修改,有效期设置等命令的操作,均会保存在配置文件中,也就是命令的操作也就是修改配置文件。换一种说法,例如我们要修改某用户的密码有效期,除了可以使用命令,还可以直接修改Linux中记录用户信息的配置文件。都可以达到同样的效果。
通过命令进行创建、修改用户以及相关操作,都是对配置文件/etc/passwd
的修改。比如修改用户家目录,可以用命令 usermod
修改,也可以直接修改文件中的第六个字段。该文件除了记录普通用户的信息,也记录了系统用户的信息。切记,系统用户的信息不要轻易更改,否则进行某相关操作时,会导致系统错误。
通过命令 less /etc/passwd
或者 vim /etc/passwd
可以查看以及修改该配置文件。
1.用户名称:2.密码标志:3.UID:4.GID :5.用户说明/备注:6.家目录:7.登录的shell
字段解释:
密码标志 x 代表该用户有密码。
UID中 0 代表超级用户,RedHat、CentOS系列的发行版中,1-499为系统用户(伪用户),通过配置文件可以看到它们的shell解释器都为nologin也就是不登录。500-65535为普通用户可用的UID。
用户的附加组可以有多个。
在Linux系统中/etc/shadow
文件存放用户密码信息,又称为“影子文件”。由于存放了密码信息,为了保证安全性,该文件只有root用户可以读取。
1.用户名称:2.加密密码:3.密码最后一次修改日期:4.两次密码的修改间隔:5.密码有效期:6.有效期到期前的警告天数:7.宽限天数:8.账号失效时间
字段解释:
加密密码采用了SHA512散列加密算法。如果该字段为 !! 或 * 就代表该用户不能登录。
该文件所有的日期格式均采用时间戳。
两次密码的修改间隔为天数,10 就代表修改过一次密码后十天内不能再次修改。
unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)
是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z.
一个小时表示为UNIX时间戳格式为:3600秒;一天表示为UNIX时间戳为86400秒,闰秒不计算。
在大多数的UNIX系统中UNIX时间戳存储为32位,这样会引发2038年问题或Y2038。
-------- 百度百科
第七字段宽限天数,代表用户封禁前的缓冲天数,如果该值为3,就代表有效期过三天后再进行用户封禁。
在创建用户时,我们可以手动指定家目录。如果不指定,就会默认把家目录放到/home
目录下。如果我想让它默认创建到其他位置呢?我们就可以通过修改配置文件/etc/default/useradd
文件来实现。
字段解释:
HOME字段控制创建用户时默认的家目录位置
INACTIVE为密码过期的宽限天数
SHELL创建用户默认的登录shell
SKEL为家目录的模板目录
CREATE_MAIL_SPOOL是否建立邮箱
GROUP用户的默认组
EXPIRE密码失效时间
在配置文件/etc/login.defs
中,记录了用户限制设定。该文件的作用是为了对用户更为规范的管理,例如用户默认的密码有效期,就可以通过该文件进行修改,就是前面有讲到的chage
命令相关的,不过该文件修改的是用户创建时的默认项,相当于一个模板文件。注意,该文件设置对用户root不生效。
文件概览:
部分字段解释:
PASS_MAX_DAYS 默认密码有效期
UID_MIN UID的最小值
PASS_MIN_DAYS 两次密码修改的间隔。
与用户管理相同,除了命令,也可以通过直接修改配置文件来达到对组的配置。
用户组的配置文件位置为/etc/group
。
字段对应信息:
1.组名:2.组密码标志:3.GID:4.组中附加用户
组密码信息文件/etc/gshadow
中存放着用户组的密码以及管理员用户名。
字段对应信息:
1.组名:2.组密码:3.组管理员用户名:4.组中附加用户
不写个5000字都对不起超详细三个字。