前言:
在深入探索Linux操作系统的过程中,用户与用户组管理是一个不可或缺的部分。它们构成了Linux系统权限控制的基础,决定了哪些用户能够访问哪些资源,以及他们可以对这些资源执行哪些操作。
在这篇博客中,我们将带领读者一起走进Linux的用户与用户组世界,从基本概念讲起,逐步深入到权限设置、用户管理命令等实际操作。无论你是Linux新手,还是有一定经验的系统管理员,相信都能从中收获不少。
通过本文,你将学习到:
- Linux用户与用户组的基本概念
- 如何创建、修改和删除用户与用户组
- 如何设置和管理用户权限
- 常见的用户与用户组管理命令和工具
- 用户与用户组管理在系统安全中的作用
让我们开始这段Linux用户与用户组管理的探索之旅吧!希望本文能为你提供有价值的参考和指导,帮助你在Linux的道路上走得更远。
一.简介
1.用户的定义
在Linux系统中,用户(User)是系统使用者的身份,也是系统最底层安全机制的一部分。每个用户在系统中都以字符和文件的形式存在,并拥有特定的权限,这些权限决定了他们可以访问哪些资源以及可以对这些资源执行哪些操作。
用户账户分类
- 超级用户(root):这是Linux系统中拥有最高权限的用户,其UID(用户ID)为0。只有在进行系统维护(例如建立用户等)或其他必要情形下才会使用超级用户登录,以避免系统出现安全问题。
- 系统用户(伪用户):这些用户是Linux系统正常工作所必需的,主要用于满足相应的系统进程对文件属主的要求。例如,bin、daemon、adm、lp等用户都属于系统用户,它们不能用来登录系统。
- 普通用户:这是为了让使用者能够使用Linux系统资源而建立的用户,我们的大多数用户属于此类。普通用户的使用系统权限受限,其UID为1000以后。
2.用户组的定义
在Linux系统中,用户组(Group)是具有相同特征用户的逻辑集合,这些用户共享一定的权限。用户组的概念主要是为了方便系统管理和控制用户的访问权限。
具体来说,用户组可以包含多个用户,这些用户可以被赋予一些共同的权限,例如对某个文件或目录的读写权限。通过将这些用户加入到一个组中,可以简化权限管理,避免为每个用户单独设置权限的复杂性。
在Linux中,用户和用户组的信息通常存储在/etc/passwd和/etc/group文件中。/etc/passwd文件保存了系统中所有用户的基本信息,如用户名、用户ID(UID)、主目录、默认shell等。而/etc/group文件则保存了系统中所有用户组的信息,如组名、组ID(GID)、组成员等。
用户组可以分为多种类型,包括普通用户组、系统组和私有组(也称基本组)。普通用户组可以包含多个用户,而系统组通常包含一些系统用户,用于满足系统进程对文件属主的要求。私有组则是在创建用户时,如果没有为其指明所属组,系统就会为其定义的一个与用户同名的用户组。
总之,在Linux系统中,用户和用户组构成了系统权限控制的基础。通过合理的用户和用户组管理,可以确保系统的安全性和稳定性,同时也可以方便地进行资源的访问和控制。
二.用户的相关linux语法
1.创建用户(useradd)
1.添加新的用户账号 useradd选项用户名 参数说明 选项 -c comment 指定一段注释性描述。 -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录 - G 用户组指定用户所属的附加组 -s Shell文件指定用户的登录Shell - u 用户号指定用户的用户号,如果同时有-选项,则可以重复使用其他用户的标识 号。 用户名 指定新账号的登录名 示例1: useradd -d home/sam -m sam2 此命令创建了一个用户san ,其中-d和-m选项用来为登录名sam2产生一个主目录 /home/sam (/home为默认的用户主目录所在的父目录) 示例2: 此命令新建了一个用户gem,该用户的登录Shell是bin/sh,它属于group用户组,同 useradd-s/bin/ sh-g group -G adm, root gem 其中group用户组是其主组。这里可能新建组:#groupadd group及groupadd atn 时又属于adm和root用户组 同时更新其他系统文件如/etc/shadow, 注1:增加用户账号就是在/etc/passwud文件中为新用户增加一条记录 etc/grou等。 注2:Linx提供了集成的系统管理工具usercorf,它可以用来对用户账号进行统一管理
2.删除用户(userdel)
删除帐号 如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要 将/etc/passwd等系统文件中的该用户记录删除 必要时还删除用户的主目录 常用的选项是-r,它的作用是把用户的主目录一起删除 userdel选项用户名 示例1: userdel-r sam 此命用在系经文件中(主要是/etc/passd,/ect/shadow/,/ect/group)等等记录,同时删除用户的主目录
3.修改用户(usermod)
`usermod` 是 Linux 系统中的一个命令,用于修改用户的属性和配置。通过 `usermod` 命令,可以对用户的各种属性进行修改,如用户的用户名、用户ID、用户组ID、用户主目录、用户登录shell等。 然而,需要注意的是,`usermod` 命令不允许改变正在线上的使用者帐号名称。当使用 `usermod` 命令来改变用户ID(user ID)时,必须确保该用户没有在电脑上执行任何程序。此外,还需要手动更改使用者的 crontab 文件和 at 工作档。如果系统采用 NIS server,还需要在 server 上更改相关的 NIS 设定。 `usermod` 命令的语法是 `usermod [选项] [参数]`。其中,选项包括: * `-c<备注>`:修改用户帐号的备注文字。 * `-d<登入目录>`:修改用户登入时的目录。 * `-e<有效期限>`:修改帐号的有效期限。 * `-f<缓冲天数>`:修改在密码过期后多少天即关闭该帐号。 * `-g<群组>`:修改用户所属的群组。 * `-G<群组>`:修改用户所属的附加群组。 * `-l<帐号名称>`:修改用户帐号名称。 * `-L`:锁定用户密码,使密码无效。 * `-s<shell>`:修改用户登入后所使用的shell。 * `-u<uid>`:修改用户ID。 * `-U`:解除密码锁定。 参数 `登录名` 指定了要修改信息的用户登录名。 总的来说,`usermod` 命令是一个强大的工具,可以在 Linux 系统中修改用户的各种属性和配置。然而,使用时需要小心,确保不会影响到正在线上的用户,并手动处理可能需要的额外步骤,如更改 crontab 文件和 at 工作档等。
4.修改用户密码
在Linux系统中,passwd
是一个用于设置或更改用户密码的命令。它是Linux/Unix系统下的一个标准命令,用于管理用户的密码。
passwd
命令的主要功能包括:
- 更改用户密码:使用
passwd
命令,用户可以更改自己的密码。例如,输入passwd
并按回车键后,系统会提示用户输入当前密码和新密码。 - 设置密码策略:
passwd
命令还可以用于设置密码策略,例如密码的最小长度、密码的复杂性要求等。这些策略可以通过配置文件或命令行参数来设置。 - 管理用户密码:系统管理员可以使用
passwd
命令来管理系统中所有用户的密码。例如,他们可以为用户设置密码、更改密码或锁定用户账户等。
需要注意的是,passwd
命令只能由具有足够权限的用户(通常是系统管理员或用户自己)执行。普通用户只能更改自己的密码,而系统管理员则可以更改任何用户的密码。
此外,passwd
命令还提供了一些选项和参数,以便用户和系统管理员可以根据需要进行更灵活的操作。例如,-l
选项可以用于锁定用户账户,-u
选项可以用于解锁用户账户,-d
选项可以用于删除用户密码等。
总之,passwd
命令是Linux系统中一个非常重要的命令,它为用户和系统管理员提供了方便、灵活的方式来管理用户的密码和账户安全。
5.su切换账号
su [options] [username] |
这里的 [options]
是可选的参数,而 [username]
是要切换到的用户的用户名。如果不指定用户名,su
默认尝试切换到超级用户(root)。
以下是一些常用的 su
命令选项:
-
或--login
:这个选项告诉su
命令加载目标用户的登录环境。这通常包括设置环境变量、工作目录、shell 等。如果不使用此选项,su
仅会提供目标用户的权限,但不会加载完整的登录环境。-c
或--command=COMMAND
:这个选项允许你传递一个命令给su
,并在执行完该命令后退出目标用户的会话,不进入交互模式。-s
或--shell=SHELL
:这个选项允许你指定一个特定的 shell 来执行,而不是使用目标用户的默认 shell。-m
或--preserve-environment
:这个选项会保持当前的环境变量,而不是仅加载目标用户的环境变量。-f
或--fast
:这个选项用于csh
或tcsh
shell,表示不读取启动文件。--help
:显示帮助信息。
--version
:显示su
命令的版本信息。
下面是一些使用 su
命令的示例:
1.
su |
su - |
(使用 -
选项加载 root 用户的登录环境)
2.
su john -c "ls -l /home/john" |
3.
su -s /bin/bash john |
4.保持当前环境变量并切换到用户:
su -m john |
请注意,使用 su
命令时,通常需要输入目标用户的密码,除非当前用户是 root 用户。由于 su
命令允许用户切换到其他用户并执行命令,因此在使用时应格外小心,以确保不会意外地破坏系统安全或执行不适当的命令。
6.退出登录
在Linux中,有几种方法可以退出当前用户账户:
- exit命令:
这是最常用的方法。只需在命令行界面输入exit
,然后按下回车键即可退出当前用户。exit
命令会立即退出当前用户,并返回到上一级用户或登录界面。
exit |
logout |
- 注意:在某些情况下,
logout
和exit
命令可能具有相同的效果,特别是在shell提示符下使用时。 - Ctrl+D:
在大多数shell中,按下Ctrl+D
组合键也可以退出当前用户的登录会话。这通常与logout
命令有相同的效果。
pkill -u username |
- 这将终止该用户的所有进程并注销该用户。
- 重启或关闭系统:
当然,如果你想要重启或关闭整个系统,你可以使用reboot
或shutdown
命令。但请注意,这将影响所有用户和系统服务。
reboot # 重启系统 |
shutdown -h now # 关闭系统 |
请确保在退出用户或执行可能影响其他用户的操作时,你了解这些操作的后果,并且拥有适当的权限。如果你是系统管理员,你可能需要谨慎操作,以免对系统或其他用户造成不必要的中断或问题。
三.用户组
1.增加用户组(groupadd)
增加一个用户组
groupadd选项用户组
选项有:
-g GID指定新用户组的组标识号(GD)
#一般与-选项同时使用,表示新用户组的GD可以与系统已有用户组的GID相同。
示例1:
groupadd group1
此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的
基础上加1。
示例2:
groupadd -g 101 group2
此命令向系统中增加了一个新组group2同时指定新组的组标识号是101。
2.删除用户组(groupdel)
如果删除以及以及存在的用户组,使用 groupdel命令
groupdel 用户组
实例:
groupdel group1
3.修改用户组(gruopmod)
修改用户组的属性
groupmod选项用户组
常用的选项有:
-g GID为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n新用户组将用户组的名字改为新名字
示例1:
groupmod -g 102 group2
此命令将组group2的组标识号修改为102
示例2:
groupmod -g 10000-n group3 group2
此命令将组group2的标识号改为10000,组名修改为group3
4切换用户组(newgrp)
如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换
用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户
示例1:
newgrp root
这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或
加组
四.其他命令
1.cat /etc/passwd
您提供的是Linux系统中`/etc/passwd`文件的一部分内容。`/etc/passwd`文件存储了系统上所有用户账户的信息。每一行代表一个用户账户,并由冒号`:`分隔的七个字段组成。下面是对您提供的每一行内容的详细分析:
### root账户
```bash
root:x:0:0:root:/root:/bin/bash
```
* `root`: 用户名。
* `x`: 密码字段。这里的`x`表示密码是加密的,并且实际的加密密码存储在`/etc/shadow`文件中。
* `0`: 用户ID(UID)。对于`root`用户,UID通常是0。
* `0`: 组ID(GID)。`root`用户的默认组也是`root`,其GID也是0。
* `root`: 用户全名或描述。
* `/root`: 用户的主目录。
* `/bin/bash`: 用户的默认shell。
### 系统账户
接下来的账户(如`bin`, `daemon`, `adm`, `lp`, `sync`, `shutdown`, `halt`等)都是系统账户,用于运行系统服务。这些账户通常没有登录shell(如`/sbin/nologin`或`/bin/sync`),并且通常具有较低的UID和GID。
### 普通用户账户
* `mail`: 邮件服务的用户账户。
* `operator`: 通常用于系统管理的用户账户。
* `games`: 用于运行游戏的用户账户。
* `ftp`: FTP服务的用户账户。
* `nobody`: 一个无特权的用户,通常用于运行不需要访问权限的服务。
* `systemd-network`: 用于`systemd`网络管理的用户账户。
* `dbus`: 用于`DBus`系统消息总线的用户账户。
* `polkitd`: 用于`polkit`权限管理的用户账户。
* `postfix`: 用于`Postfix`邮件传输代理的用户账户。
* `sshd`: 用于`SSH`服务的用户账户。
* `chrony`: 用于`chrony`时间同步服务的用户账户。
* `ntp`: 用于`NTP`(网络时间协议)服务的用户账户。
* `www`: 用于Web服务器的用户账户。
* `mysql`: 用于MySQL数据库的用户账户。
* `redis`: 用于Redis数据库的用户账户。
每个用户账户的信息都包括:
* 用户名。
* 密码字段(通常是`x`,表示加密密码在`/etc/shadow`中)。
* UID。
* GID。
* 用户全名或描述。
* 用户主目录。
* 用户默认shell。
对于系统账户,主目录通常是一个系统目录,而shell通常是`/sbin/nologin`或`/bin/sync`等,表示这些账户不能用于登录。对于普通用户账户,主目录通常位于`/home/`下,shell通常是`/bin/bash`或其他shell。
请注意,`/etc/passwd`文件只包含用户的基本信息,而实际的加密密码存储在`/etc/shadow`文件中,并且只有root用户可以访问。这是出于安全考虑,以防止未经授权的用户访问加密密码。
2.cat /etc/shadow
这是Linux系统中`/etc/shadow`文件的一部分内容,该文件存储了系统上所有用户账户的加密密码和相关的账户属性。每一行代表一个用户账户,由冒号`:`分隔的九个字段组成。下面是对您提供的每一行内容的详细分析:
### root账户
```bash
root:$6$sr9HC.OUoY/QlPJI$9Cz.iTRt0wmgWHDC4XxucePa0sblPJHcNsR8isArXdPPW8WMfHdPOhDTwdOoXAbwrm4/t1WEkboZsgDxJ16gr/::0:99999:7:::
```
- `root`: 用户名。
- `$6$sr9HC.OUoY/QlPJI$9Cz.iTRt0wmgWHDC4XxucePa0sblPJHcNsR8isArXdPPW8WMfHdPOhDTwdOoXAbwrm4/t1WEkboZsgDxJ16gr/`: 加密的密码。这里使用的是SHA-512加密的密码,`$6$`表示使用的是SHA-512算法,`sr9HC.OUoY/QlPJI`是盐值(salt),后面的部分是加密后的密码。
- `::`: 账户最后一次修改密码的日期,这里为空表示从未修改过。
- `0`: 密码的最小有效期,这里是0天,表示密码可以随时更改。
- `99999`: 密码的最大有效期,这里是99999天,表示密码永远不会过期。
- `7`: 密码过期前的警告天数,这里是7天。
- `::`: 密码过期后的宽限天数,这里为空表示没有宽限。
- `::`: 账户失效日期,这里为空表示账户永远不会失效。
- `::`: 保留字段,通常用于存储账户保留信息,这里为空。
### 系统账户和普通用户账户
对于`bin`, `daemon`, `adm`, `lp`, `sync`, `shutdown`, `halt`, `mail`, `operator`, `games`, `ftp`, `nobody`等系统账户,以及`systemd-network`, `dbus`, `polkitd`, `postfix`, `sshd`, `chrony`, `ntp`, `www`, `mysql`, `redis`等普通用户账户,它们的密码字段通常以`*`或`!!`开头,表示这些账户没有密码或者密码被锁定。
- `*`: 表示账户没有密码,通常用于系统账户或那些不需要登录的账户。
- `!!`: 表示账户密码被锁定,即使账户有密码也不能登录。
接下来的字段(如UID、GID、密码有效期、警告天数等)通常是默认值或系统配置的值,具体取决于系统管理员的设置。
### 注意点
- `/etc/shadow`文件只能由root用户访问和修改,以保护加密密码的安全性。
- 加密密码使用不同的加密算法和盐值来增强安全性。
- 某些字段为空(如`::`),表示相应的设置没有特定的值,使用系统默认值。
通过配置`/etc/shadow`文件,系统管理员可以控制用户账户的密码策略、有效期、失效日期等安全相关的设置。