用户和组
基本命令
命令 | 说明 |
---|---|
| 显示当前登录用户信息,或指定用户信息 |
| 显示当前 shell 下所有的进程及关联的用户 |
| 创建一个用户 |
| 删除用户 |
| 删除用户并且删除相关的 home 目录 |
| 给用户设定密码 |
| 创建一个 group |
| 修改组的名称 |
| 删除组 |
| 锁定用户 |
基本概念
什么是用户
系统中的每个进程(运行程序)都作为一个被特定用户运行。每个文件归一个特定用户所有。对文件和目录的访问受到用户的限制。与运行进程相关联的用户可确定该进程可访问的文件和目录等。
id 命令用于显示有关当前已登录用户的信息。也可以通过在用户的用户名中传递作为 id 命令的首个参数来请求有关其他用户的基本信息:# id student
uid=1000(student) gid=1000(student) groups=1000(student),10(wheel)
要查看与某一文件或目录相关联的用户,则使用 ls -l 命令。第三列显示用户名:# ls -l /tmp/
total 4
drwxr-xr-x. 2 root root 17 Jan 7 2015 hsperfdata_root
要查看进程信息,可使用 ps 命令。默认为仅显示当前 shell 中的进程。添加 a 选项可查看与某一终端相关的所有进程。若要查看与进程相关联的用户,请在命令中包含 u 选项。第一列显示用户名:# ps au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 621 0.1 0.9 160728 17808 tty1 Ss+ 12:32 0:00 /usr/bin/Xorg :0 -background none -verbose -aut
root 1452 0.0 0.0 110004 828 ttyS0 Ss+ 12:32 0:00 /sbin/agetty --keep-baud ttyS0 115200 38400 960
root 1531 0.0 0.1 116144 2936 pts/0 Ss 12:33 0:00 -bash
root 1594 0.0 0.0 123356 1324 pts/0 R+ 12:36 0:00 ps au
操作系统内部是按 UID 编号来跟踪用户,名称到编号的映射在帐户信息数据库中定义。默认情况下,系统使用简单的“平面文件”(即 /etc/passwd 文件)存储有关本地用户的信息。/etc/passwd 采用以下格式(七个冒号分隔字段):
username:password:UID:GID:GECOS:/home/dir:shell
username 是 UID 到名称的一种映射,便于用户使用。
password 以前是以加密格式保存密码的位置。现在,密码存储在称为 /etc/shadow 的单独文件中。
UID 是用户 ID,即在最基本的级别标识用户的编号。
GID 是用户的主要组 ID 编号。稍后将讨论组。
GECOS 字段是任意文本,通常包含用户的实际姓名。
/home/dir 是用户的个人数据和配置文件的位置。
shell 是用户登录时运行的程序。对于普通用户,这通常是提供用户命令行提示符的程序
什么是组
与用户一样,组也有名称和编号 (GID)。本地组在 /etc/group 中定义。
主要(Primary)组
每个用户有且只有一个主要组。
对于本地用户,主要组通过 /etc/passwd 第四个字段中列出的组的 GID 编号定义。
用户创建的新文件归主要组所有。
新建用户的主要组是名称与用户相同的新建组。用户是此 用户专用组 (UPG) 的唯一成员。
补充(Supplementary)组
用户可以是零个或多个补充组的成员。
属于本地组补充成员的用户列在 /etc/group 中组条目的最后一个字段中。对于本地组,用户成员身份由 /etc/group 中组条目的最后一个字段中由逗号分隔的用户列表确定。
补充组成员身份用于帮助确保用户具有对系统中文件及其他资源的访问权限。
用户/组配置文件
文件 | 说明 |
---|---|
/etc/passwd | 本地用户信息,格式: |
/etc/shadow | 本地用户密码,加密保存 |
/etc/group | 本地组信息,任意一个用户都有一个主要的组,格式: |
/etc/sudoers | sudo 相关的配置 |
/etc/login.defs | 默认的用户密码过期时间 |
获取超级管理员权限
Linux 操作系统中 root
用户超级管理员用户,有超级管理员权限,Linux 商有两种途径获取超级管理员权限:
su -
sudo 以超级管理员权限执行命令sudo CMD
添加用户为 sudo 用户
两种方式可添加用户为 sudo 用户
1 - 添加用户对应的组到 /etc/sudoers# echo "kylin ALL=(ALL) ALL" >> /etc/sudoers
2 - 将用户添加到 wheel 组# usermod -aG wheel kylin
管理本地用户帐户
创建或修改用户
useradd username
会为/etc/passwd
中的所有字段设置合理的默认值默认情况下,useradd
命令不设置任何有效的密码,用户也必须要等设定了密码后才能登录。useradd --help
将显示可用于覆盖默认值的基本选项。在大多数情形中,可以将相同的选项用于usermod
命令,以修改现有的用户。一些默认值从
/etc/login.defs
文件中读取,如有效 UID 编号的范围和默认密码过期规则。此文件中的值仅在创建新用户时使用。更改此文件对任何现有用户毫无影响。usermod
修改现有的用户
选项 | 说明 |
---|---|
-c, --comment COMMENT | 向 GECOS 字段添加值,如全名。 |
-g, --gid GROUP | 为用户帐户指定主要组。 |
-G, --groups GROUPS | 为用户帐户指定一组补充组。 |
-a, --append | 与 -G 选项搭配使用,将用户附加到所给的补充组,而不将该用户从其他组删除。 |
-d, --home HOME_DIR | 为用户帐户指定新的主目录。 |
-m, --move-home | 将用户主目录移到新的位置。必须与 -d 选项搭配使用。 |
-s, --shell SHELL | 为用户帐户指定新的登录 shell。 |
-L, --lock | 锁定用户帐户。 |
-U, --unlock | 解锁用户帐户。 |
# useradd -g root admin
# id admin
uid=1003(admin) gid=0(root) groups=0(root)
创建用户,添加附属组# groupadd httpd
# useradd -G httpd user1
# id user1
uid=1002(user1) gid=1003(user1) groups=1003(user1),1002(httpd)
批量创建用户# for i in juliet romeo hamlet reba dolly elvis ; do useradd $i ; passwd $i ; done
# tail -n 6 /etc/passwd
juliet:x:1004:1004::/home/juliet:/bin/bash
romeo:x:1005:1005::/home/romeo:/bin/bash
hamlet:x:1006:1006::/home/hamlet:/bin/bash
reba:x:1007:1007::/home/reba:/bin/bash
dolly:x:1008:1008::/home/dolly:/bin/bash
elvis:x:1009:1009::/home/elvis:/bin/bash
# for i in juliet romeo hamlet reba dolly elvis ; do usermod -aG wheel $i ; done
创建用户,并禁止登录# useradd user7
# passwd user7
# usermod -s /sbin/nologin user7
# su - user7
This account is currently not available.
删除用户
userdel username
可将用户从 /etc/passwd 中删除,但默认情况下保留主目录不变。userdel -r username
同时删除用户和其主目录。
# for i in juliet romeo hamlet reba dolly elvis ; do userdel -r $i ; done
id 显示用户信息
id
将显示用户信息,包括用户的 UID 编号和组成员资格。id username
将显示 username 的用户信息,包括用户的 UID 编号和组成员资格。
passwd 设置密码
passwd username
可用于设置用户的初始密码或更改该用户的密码。root 用户可以将密码设为任何值。如果密码不符合最低建议标准,系统将显示消息;不过,之后会显示提示要求重新键入该新密码,所有令牌也会成功更新。
普通用户必须选择长度至少为 8 个字符,并且不以字典词语、用户名或上一密码为基础的密码。
UID 范围
特定的 UID 编号和编号范围供红帽企业 Linux 用于特殊的目的:
UID 0 始终分配至超级用户帐户 root。
UID 1-200 是一系列“系统用户”,静态分配给红帽的系统进程。
UID 201-999 是一系列“系统用户”,供文件系统中没有自己的文件的系统进程使用。通常在安装需要它们的软件时,从可用池中动态分配它们。程序以这些“无特权”系统用户身份运行,以便限制它们仅访问正常运行所需的资源。
UID 1000+ 是可供分配给普通用户的范围。
管理组
创建组
groupadd groupname
如果不带选项,则使用/etc/login.defs
文件中指定范围内的下一个可用 GID。-g GID
选项用于指定具体的 GID。-r 选项将使用 /etc/login.defs 文件中所列有效系统 GID 编号范围内的 GID 创建系统组。
# groupadd -g 30000 shakespeare
# groupadd artists
# groupadd -g 5000 ateam
# groupadd -r appusers
修改现有的组
groupmod
命令用于将组名更改为 GID 映射。-n 选项用于指定新的名称。-g 选项用于指定新的 GID。
# groupmod -n javaapp appusers
# groupmod -g 6000 ateam
删除组
groupdel
删除组如果组是任何现有用户的主要组,则它不能被删除。与 userdel 一样,请检查所有文件系统,确保不遗留由该组拥有的任何文件。
groupdel javaapp
变更组成员资格
组成员资格通过用户管理进行控制。通过
usermod -g groupname
更改用户的主要组。通过
usermod -aG groupname username
将用户添加到补充组
# usermod -G shakespeare juliet
# usermod -G shakespeare romeo
# usermod -G artists reba
# usermod -G artists dolly
# usermod -G artists elvis
查看创建的组# tail -2 /etc/group
shakespeare:x:30000:juliet,romeo
artists:x:30001:reba,dolly,elvis
更组成员资格usermod -g student student
usermod -aG wheel elvis
登录密码管理
usermod -L 锁定用户$ sudo usermod -L romeo
usermod -U 解锁用户$ sudo usermod -U romeo
chage -M 设定登录密码过期时间$ sudo chage -m 30 -M 90 -W 7 -I 30 romeo
chage -l 查看用户登录设置信息$ sudo chage -l romeo
Last password change : Feb 16, 2018
Password expires : May 17, 2018
Password inactive : Jun 16, 2018
Account expires : never
Minimum number of days between password change : 30
Maximum number of days between password change : 90
Number of days of warning before password expires : 7
chage -d 0 强制下次登录修改密码$ sudo chage -d 0 romeo
设定用户登录密码在未来某个时间点过期$ sudo chage -E 2018-08-02 romeo
使用 LDAP 和 Kerberos 完成登录认证
安装相关软件包# yum -y install sssd authconfig-gtk krb5-workstation
system-config-authentication 进行安全配置# system-config-authentication
场景练习
练习一
在 desktop 中创建一个名为 boss 的组,创建用户 tom,并且 tom 应该包含附属组 boss,创建用户 jerry,jerry 也应该具有附属组 boss, 创建用户 abc, abc 这个用户应该无法登陆操作系统,这三个用户的密码都是 redhat。
groupadd boss
useradd -G boss tom
useradd -G boss jerry
useradd -s /sbin/nologin abc
for i in tom jerry abc
do echo redhat | passwd $i --stdin
done
练习二
在 desktop 虚拟机中创建一个名为 leon 的用户,这个用户的 uid 应该是 8000,密码为 redhat。
# useradd -u 8000 leon
# echo "redhat" | passwd leon --stdin
Changing password for user leon.
passwd: all authentication tokens updated successfully.
# id leon
uid=8000(leon) gid=8000(leon) groups=8000(leon)