本篇将要梳理有关用户和用户组的学习笔记,内容主要是基本的概念理解和常用命令的使用方法 !
?
目录
在Linux中,用户和组是管理和控制系统资源访问权限的重要概念。
Linux系统提供了多个命令可以查看用户的信息,以下是一些常用的命令:?
显示当前用户的身份信息,包括用户ID(UID)、组ID(GID)以及所属的组。?
输出分析:
查看当前登录用户的用户名:
whoami
会返回正在使用该终端的用户的用户名?,当前以 root
用户登录到系统,并在终端中执行 whoami
,它将返回 root
作为结果。
?
注意:
whoami
命令通常不需要任何参数或选项,只需简单地输入whoami
即可查看当前登录用户的用户名。?
查看系统中所有用户的详细信息?:
cat /etc/passwd
执行结果:
?
该命令会读取并显示 /etc/passwd
文件的内容,其中包含了用户账户的相关信息。每行的格式为:
username:password:UID:GID:gecos:directory:shell
?注释:
username
: 用户名password
: 加密后的密码(通常是 "x" 或 "*" 表示已在?/etc/shadow
?文件中存储)UID
: 用户ID(唯一标识符)GID
: 主要组ID(与?/etc/group
?中的组ID对应)gecos
: 用户的全名或注释字段directory
: 用户的主目录路径shell
: 用户默认的登录Shell通过运行 cat /etc/passwd
命令,可以查看和分析系统中所有用户的信息。
注意:
该文件对于普通用户只有读权限,需要使用超级用户(root)权限才能完整查看
/etc/passwd
文件的内容。
列出系统中所有用户的信息:
getent passwd
执行结果:
?
getent passwd
命令用于从系统的用户数据库中获取所有用户的信息。它会返回与 /etc/passwd
文件相同格式的输出,包含了系统中所有用户的详细信息。
与 cat /etc/passwd
不同的是,getent passwd
命令可以从不仅限于 /etc/passwd
文件中,还包括其他用户数据库(如 NIS、LDAP 等)中获取用户信息。?
注意:
对于普通用户,此命令只返回他们有权限查看的用户数据。若要完整查看所有用户信息,需要使用超级用户(root)权限。?
cut -d: -f1 /etc/passwd
?执行结果:
通过指定分隔符为 :
,并选择第一个字段(用户名字段),该命令将提取并显示所有用户的用户名。这个命令可以帮助我们快速获取系统上的用户列表,而不包括其他详细信息。
注意:
对于普通用户,此命令只返回他们有权限查看的用户数据。若要完整查看所有用户信息,需要使用超级用户(root)权限。?
显示当前登录系统的用户信息,包括用户名、终端、登录时间、运行的命令等。
?
注释:
00:55:59 up 1:11
?表示系统已经运行了1小时11分钟,当前时间为00:55:59。2 users
?表示有两个用户登录到系统中。load average: 0.00, 0.01, 0.05
?表示系统的平均负载情况,分别对应过去1分钟、5分钟和15分钟的平均负载。在下面的表格中,显示了每个登录用户的详细信息:
USER | TTY | FROM | LOGIN@ | IDLE | JCPU | PCPU | WHAT |
---|---|---|---|---|---|---|---|
root | tty1 | 23:45 | 1:10m | 0.02s | 0.02s | -bash | |
root | pts/0 | 192.168.204.1 | 23:46 | 7.00s | 0.03s | 0.01s | w |
解析每列的含义如下:
USER
: 用户名TTY
: 终端设备或会话类型FROM
: 连接来源(IP地址或主机名)LOGIN@
: 登录时间IDLE
: 空闲时间JCPU
: 用户和系统模式下消耗的CPU时间(以秒为单位)PCPU
: 仅在用户模式下消耗的CPU时间(以秒为单位)WHAT
: 当前用户正在执行的命令或活动根据上述信息,可以看到当前系统上有两个用户,一个登录到tty1终端,另一个通过pts/0终端从IP地址192.168.204.1登录。同时,还提供了其他有关用户的信息,例如登录时间、空闲时间以及当前正在执行的命令(在本例中是w
命令)。?
虽然Linux的多用户系统结构没有一个固定的标准图表,但可以描述一种常见的多用户系统结构。
+-------------------+
| 硬件设备 |
+-------------------+
|
V
+-------------------+
| 操作系统 |
+-------------------+
|
+---------------------------------------+
| 用户 |
+---------------------------------------+
/ | \
+--------------+ +----------------+ +-----------------+
| 用户1(User1) | | 用户2(User2) | | 用户3(User3) |
+--------------+ +----------------+ +-----------------+
上述图表表示了一个典型的多用户系统结构。在这个结构中:
该结构允许多个用户同时使用同一台计算机,每个用户都可以独立地进行工作,而不会相互干扰。操作系统负责管理用户之间的资源分配、权限控制和任务调度,以确保系统的安全性和高效性。
在Linux系统中,用户可以根据其用途和权限的不同进行分类。以下是常见的Linux用户分类:
①超级用户(Superuser):
②普通用户(Regular User):
③服务用户(Service User):
④系统用户(System User):
⑤匿名用户(Anonymous User):
?超级用户(root)拥有系统中最高的权限,可以创建、管理和删除普通用户。
为了方便管理和授权,用户可以被组织成组。组可以包含一个或多个用户。组通过组ID(GID)进行标识。组的主要作用是为其成员提供相同的访问权限,使得系统管理员可以更轻松地管理用户权限。
显示系统中所有组的详细信息,包括组名、组ID以及该组下的用户列表。
cat /etc/group
执行结果:
?
它会读取并显示 /etc/group
文件的内容,其中包含了每个用户组的详细信息。
每行的格式为:
groupname:password:GID:user1,user2,...
groupname
: 用户组名password
: 加密后的密码(通常是 "x" 或 "*" 表示已在?/etc/gshadow
?文件中存储)GID
: 用户组ID(唯一标识符)user1,user2,...
: 属于该用户组的用户名列表这个命令可以帮助我们快速获取系统上的用户组列表,以及查看每个用户组所包含的成员。?
注意:
该文件对于普通用户只有读权限,需要使用超级用户(root)权限才能完整查看
/etc/group
文件的内容。?
列出系统中所有组的信息:
getent group
执行结果:
?
getent group
命令用于从系统的用户组数据库中获取所有用户组的信息。它会返回与 /etc/group
文件相同格式的输出,包含了系统中所有用户组的详细信息。
与 cat /etc/group
不同的是,getent group
命令可以从不仅限于 /etc/group
文件中,还包括其他用户组数据库(如 NIS、LDAP 等)中获取用户组信息。?
注意:
对于普通用户,此命令只返回他们有权限查看的用户组数据。若要完整查看所有用户组信息,需要使用超级用户(root)权限。?
cut -d: -f1 /etc/group
通过指定分隔符为 :
,并选择第一个字段(用户组名字段),该命令将提取并显示所有用户组的名称。?
在Linux系统中,用户组是用于组织和管理用户的集合。用户组可以用来控制文件和目录的访问权限,以及允许或限制特定操作。
Linux用户组结构通常包括以下几个方面:
超级用户组(root):超级用户组是系统中具有最高权限的用户组,其组名通常为 "root"。只有属于该组的用户才能以超级用户身份执行特权操作,并对系统进行更改。
系统用户组:系统用户组用于运行系统服务和进程。这些用户组的名称可能因系统而异,但通常以 sys
, adm
, daemon
等开头或包含这些关键字。
普通用户组:普通用户组用于一般用户的分类,每个用户都会分配到一个或多个普通用户组。这样可以方便地管理和分配不同用户的权限和资源。例如,一个用户可能属于 users
组、audio
组和 video
组等。
用户组之间还可以建立层次结构和关系:
主组:每个用户在系统中都有一个主组,通常以用户的用户名命名。主组是用户默认属于的组,也是与用户家目录相关联的组。
附加组:除了主组外,用户还可以属于其他附加组。这使得用户可以在不同的上下文中具有不同的访问权限。
通过使用适当的用户组,管理员可以有效地管理用户权限和资源访问,并确保系统的安全性和可管理性。
在Linux系统中,一个组可以没有任何用户,也可以包含一个或多个用户。普通用户可以同时属于多个用户组,并且可以通过将用户添加到组来授权他们访问特定资源、共享文件等。下面是对用户和用户组关系的概括描述:
用户属于一个或多个用户组:每个用户可以属于一个主组和多个附加组。主组通常以用户的用户名命名,而附加组则用于提供额外的访问权限和资源共享。
用户组拥有权限:文件和目录在Linux系统中具有所属用户和所属用户组的权限。用户组可以被授权对特定文件或目录进行读取、写入和执行操作,而不是单独为每个用户指定权限。
文件和目录归属于用户和用户组:每个文件和目录都有一个所有者(用户)和一个所属用户组。这决定了谁可以访问、修改或执行文件。用户(所有者)通常具有最高权限,而用户组权限和其他用户的权限受到相应限制。
用户组的继承:当用户创建新文件或目录时,它们会继承创建者的用户组。这意味着新文件或目录将自动具有与创建者相同的所属用户组,从而实现资源共享和权限管理。
Linux系统中的用户和组信息通常存储在/etc/passwd和/etc/group文件中。
①/etc/passwd:该文件包含了系统中所有用户的基本信息。每行表示一个用户,字段使用冒号(:)分隔。
②/etc/group:该文件包含了系统中所有用户组的信息。每行表示一个用户组,字段使用冒号(:)分隔。
两个文件的内容前面已汇总,这里不再描述。
/etc/passwd? ? ? ? ? ? ? ? ? ?保存用户信息/etc/shadow? ? ? ? ? ? ? ? ? ?保存用户密码(以加密形式保存)/etc/group? ? ? ? ? ? ? ? ? ? ? 保存组信息/etc/login.defs? ? ? ? ? ? ? ?用户属性限制,密码过期时间,密码最大长度等限制/etc/default/useradd? ? ?显示或更改默认的 useradd 配置文件
在Linux系统中,用户管理是管理员对用户账户进行创建、删除、修改和权限管理的过程。以下是一些常见的Linux用户管理任务:
使用useradd
命令可以创建新的用户账户。它可以在系统上添加一个新的用户账号,并为该用户分配用户ID(UID)、初始组、家目录和登录shell等属性。
语法格式:
useradd [选项] 用户名
常用选项包括:
-c, --comment
:为用户添加注释,通常是用户的全名或描述。
-d, --home
:指定用户的家目录路径。
-g, --gid
:设置用户的主组ID。
-G, --groups
:指定用户所属的附加组ID列表。
-s, --shell
:指定用户的默认shell。
-m, --create-home
:在创建用户时,自动创建用户的家目录。
-p, --password
:设置用户的密码,需要使用经过加密的密码。
-e, --expiredate
:设置用户的过期日期,格式为YYYY-MM-DD。
除了上述常用选项之外,useradd命令还有其他一些选项和参数,可以使用
man useradd
命令在终端中查看useradd的完整文档和使用说明。?
例1:创建一个名为"username"的用户,可以执行以下命令:
sudo useradd username
例2:创建一个名为johndoe的用户,添加了一个注释为"John Doe",指定了/home/johndoe为家目录,并将默认shell设置为/bin/bash,可以执行以下命令:
useradd -c "John Doe" -m -s /bin/bash johndoe
例3:分别创建三个新用户账号:aa
、bb
和 cc
,并将它们的用户ID(UID)设置为 555、556 和 557,这些用户将/a
作为家目录,?可以执行以下命令:
useradd -u 555 -d /a aa
useradd -u 556 -d /a bb
useradd -u 557 -d /a cc
注意:
- ①执行useradd命令需要root或具有管理员权限的用户。?
- ②使用
useradd
命令只会创建用户账户,但不会设置密码。通常需要使用passwd
命令为新用户设置密码。
使用usermod
命令可以修改用户的各种属性,它允许系统管理员对现有用户进行修改,包括更改用户的用户名、家目录、主组、附加组、注释等。
语法格式:
usermod [选项] 用户名
常用选项包括:
-c, --comment
:修改用户的注释。
-d, --home
:修改用户的家目录路径。
-g, --gid
:修改用户的主组ID。
-G, --groups
:修改用户所属的附加组ID列表。
-s, --shell
:修改用户的默认shell。
-L, --lock
:锁定用户账号,禁止用户登录。
-U, --unlock
:解锁用户账号,允许用户登录。
-e, --expiredate
:修改用户的过期日期。
除了上述常用选项之外,usermod命令还有其他一些选项和参数,可以使用
man usermod
命令在终端中查看usermod的完整文档和使用说明。
例1:要将"username"用户所属的主组更改为"newgroup",可以执行以下命令:
sudo usermod -g newgroup username
例2:将修改名为johndoe的用户的注释为"John Smith",家目录为/home/johnsmith,并将默认shell更改为/bin/bash。?可以执行以下命令:
usermod -c "John Smith" -d /home/johnsmith -s /bin/bash johndoe
例3:分别修改账号 aa
、bb
和 cc
的家目录路径和登录shell:
aa
,将家目录路径修改为?/newhome1
,登录shell修改为?/bin/bash
。bb
,将家目录路径修改为?/newhome2
,登录shell修改为?/bin/sh
。cc
,将家目录路径修改为?/newhome3
,登录shell修改为?/usr/bin/zsh
。可以执行以下命令:
usermod -d /newhome1 -s /bin/bash aa
usermod -d /newhome2 -s /bin/sh bb
usermod -d /newhome3 -s /usr/bin/zsh cc
例4:分别修改用户 aa
的家目录路径为 /newhome
,修改用户 bb
的登录shell为 /bin/bash
,以及修改用户 cc
的登录名为 newname
?,可以执行以下命令:
usermod -d /newhome aa
usermod -s /bin/bash bb
usermod -l newname cc
注意:
执行usermod命令需要root或具有管理员权限的用户。只有具有足够权限的用户才能修改其他用户的属性。?
并且在对用户账户进行修改之后,可能需要相应地调整相关文件和权限,例如迁移用户的文件到新的家目录路径等。
使用userdel
命令可以删除用户账户。它允许系统管理员从系统中删除不再需要的用户账号,并可选择是否同时删除用户的家目录和邮件文件。
语法格式:
userdel [选项] 用户名
常见选项包括:
-r, --remove
:删除用户账户及其关联的家目录。-f, --force
:强制删除用户账户,即使用户正在登录或有其他进程。-Z, --selinux-user
:指定要删除的用户的SELinux用户。除了上述常用选项之外,userdel命令还有其他一些选项和参数,可以使用
man userdel
命令在终端中查看userdel的完整文档和使用说明。
默认情况下,userdel
命令只会删除用户账户,不会删除其相关文件和目录。如果需要同时删除用户的主目录,可以使用-r
选项。
例1:要删除"username"用户及其主目录,可以执行以下命令:
sudo userdel -r username
例2:删除名为johndoe的用户,并删除用户的家目录和邮件文件(如果有的话),可以执行以下命令:
userdel -r johndoe
例3:分别删除用户账户 aa
、bb
和 cc
,并且同时删除与这些账户关联的家目录,可以执行以下命令:
userdel -r aa
userdel -r bb
userdel -r cc
使用su
命令可以在当前会话中切换到其他用户。su命令是在Linux和Unix系统中用于切换用户身份的命令。它允许当前登录的用户在不退出当前会话的情况下切换到其他用户账号,以便执行特定的任务或访问受限资源。
语法格式:
su [选项] [用户名]
常见选项包括:
-c, --command
:执行指定的命令,而不是打开新的shell。-l, --login
:模拟登录为目标用户,加载用户的环境变量和配置文件。-s, --shell
:使用指定的shell,而不是目标用户的默认shell。除了上述常用选项之外,su命令还有其他一些选项和参数,可以使用
man su
命令在终端中查看su的完整文档和使用说明。?
默认情况下,su
命令会切换到超级用户(root)。在这种情况下,通常需要输入超级用户的密码才能完成切换。
例1:要切换到"username"用户,可以执行以下命令:
su username
例2:切换到超级用户(root)身份,可以执行以下命令:
su
例3:切换到特定用户身份(同例1),可以执行以下命令:
su 用户名
例4:?执行特定命令并切换到另一个用户身份,可以执行以下命令:
su -c "命令" 用户名
例5:模拟登录为目标用户,并打开新的shell,可以执行以下命令:
su -l 用户名
例6:?切换到johndoe用户,并执行ls -l
命令,可以执行以下命令:
su -c "ls -l" johndoe
注意:
在使用
su
命令切换用户时,需要提供目标用户的密码才能成功进行切换。?建议:
为了系统安全性,建议在完成需要root权限的任务后及时退出root账号,以避免潜在的安全风险。
使用passwd
命令为用户设置密码。passwd命令是在Linux系统中用于更改用户密码的命令。它允许用户修改自己的密码或管理员修改其他用户的密码。
语法格式:
passwd [选项] [用户名]
常见选项包括:
-l, --lock
:锁定用户账户,禁止用户使用该账户登录。-u, --unlock
:解锁被锁定的用户账户。-d, --delete
:删除用户密码,使用户无法通过密码登录,但仍可使用其他身份验证方法登录。-e, --expire
:将用户的密码设置为过期状态,在下次登录时需要强制更改密码。-x, --maxdays
:设置用户密码的最大有效天数。-n, --mindays
:设置用户必须保持密码不变的最短天数。-w, --warndays
:在密码过期之前提前多少天向用户发出警告。?如果没有提供用户名,则默认为当前用户。除了上述常用选项之外,passwd命令还有其他一些选项和参数,可以使用
man passwd
命令在终端中查看passwd的完整文档和使用说明。
示例用法:
①更改当前用户密码
passwd
②更改特定用户的密码:
passwd 用户名
③锁定用户账户:
passwd -l 用户名
④解锁用户账户:
passwd -u 用户名
例1:要设置"username"用户的密码,可以执行以下命令:
sudo passwd username
?例2:要求管理员权限,然后提示输入管理员密码,接着要求输入johndoe用户的新密码和确认新密码,可以执行以下命令:
sudo passwd johndoe
注意:
执行passwd命令需要知道当前用户的当前密码(除非当前用户是root用户),或者具有管理员权限。密码通常应该是强密码,并且应定期更改以增强系统安全性。?
在Linux系统中,用户组管理是管理员对用户组进行创建、删除和权限管理的过程。以下是一些常见的Linux用户组管理任务:
使用groupadd
命令可以创建一个新的用户组。groupadd命令是在Linux系统中用于创建新的用户组的命令。它允许系统管理员在系统中添加新的用户组,并为该用户组分配一个唯一的组ID(GID),设置相关的组属性和选项。
语法格式:
groupadd [选项] 组名
常见选项包括:
-g, --gid
:指定用户组的组ID(GID),如果不提供则由系统自动分配。-r, --system
:创建一个系统用户组,其GID通常小于1000,并且不会出现在登录界面的用户列表中。-f, --force
:即使用户组已经存在,也强制创建该用户组。?除了上述常用选项之外,groupadd命令还有其他一些选项和参数,可以使用
man groupadd
命令在终端中查看groupadd的完整文档和使用说明。
例如,创建名为"mygroup"的用户组,可以执行以下命令:
sudo groupadd mygroup
系统将自动分配一个唯一的组ID(GID)给这个用户组。?
注意:
在使用
groupadd
命令创建用户组时,需要具有适当的管理员权限。确保用户组的名称唯一且符合系统命名规范。?
使用groupmod
命令可以修改用户组的各种属性,如组名、组ID等。
语法格式:
groupmod [选项] 组名
常见选项包括:
-g, --gid
:修改用户组的组ID(GID)。-n, --new-name
:修改用户组的新名称。-o, --non-unique
:允许使用非唯一的组ID(GID)。-R, --root
:将命令作为超级用户(root)运行。?除了上述常用选项之外,groupmod命令还有其他一些选项和参数,可以使用
man groupmod
命令在终端中查看groupmod的完整文档和使用说明。
例1:将名为"mygroup"的用户组的组名更改为"newgroup",可以执行以下命令:
groupmod -n newgroup mygroup
例2:修改名为 "mygroup" 的用户组的组ID(GID)为 1234,可以执行以下命令:
groupmod -g 1234 mygroup
使用groupdel
命令可以删除一个用户组。它允许系统管理员从系统中删除不再需要的用户组。
语法格式:
groupdel [选项] 组名
常见选项包括:
-f, --force
:强制删除用户组,即使用户组还有关联的用户。-R, --root
:将命令作为超级用户(root)运行。注意:
如果该组仍有成员,则需要先从组中移除成员,然后才能删除该组。
例如,要删除名为"mygroup"的用户组,可以执行以下命令:
sudo groupdel mygroup
如果该用户组仍有关联的用户,则会出现错误提示,除非使用
-f
选项来强制删除。注意:
执行groupdel命令需要root或具有管理员权限的用户。只有具有足够权限的用户才能删除用户组。?
使用usermod
命令可以将用户添加到一个或多个用户组。
例如,要将名为"username"的用户添加到"mygroup"用户组,可以执行以下命令:?
sudo usermod -aG mygroup username
-a 是增加,如果没有-a,原来的辅助组都删除了?
使用gpasswd
命令可以从用户组中移除用户。gpasswd
命令用于管理用户组的密码和成员。它允许管理员设置用户组的密码、添加或删除用户组的成员。
语法格式:
gpasswd [选项] 组名
常见选项包括:
-a, --add 用户名
:将指定的用户添加到目标用户组。-d, --delete 用户名
:从目标用户组中删除指定的用户。-r, --remove-password
:从目标用户组中移除密码,使用户组无需密码即可加入。-R, --restrict
:限制只有用户组的所有者和超级用户(root)可以添加或删除成员。-M, --members 用户列表
:设置用户组的成员列表,替换原有成员列表。管理用户组的示例:
①添加用户到用户组:
gpasswd -a 用户名 组名
②从用户组中删除用户:
gpasswd -d 用户名 组名
③设置用户组的密码:
gpasswd 组名
④移除用户组的密码:
gpasswd -r 组名
例如,要将名为"username"的用户从"mygroup"用户组中移除,可以执行以下命令:
sudo gpasswd -d username mygroup
?注意:
执行gpasswd命令需要root或具有管理员权限的用户。
管理员可以通过正确配置用户和组的权限,确保系统安全性和文件的完整性。?
通过修改文件和目录的所有者和组权限,可以控制用户对特定资源的访问权限。可以使用chown
和chgrp
命令修改文件和目录的所有者和组,使用chmod
命令修改权限位。
通过修改文件和目录的组所有权和权限位,可以控制用户组对特定资源的访问权限。可以使用chgrp
命令修改文件和目录的组所有权,使用chmod
命令修改权限位。