6.2 切换用户和授权
1.su
-
su
(Switch User)命令允许当前用户切换到另一个用户,通常是超级用户(root)。 -
默认情况下,如果没有指定要切换到的用户,
su
命令会将用户切换到超级用户(root)。 -
需要输入目标用户的密码才能切换到该用户。
示例:
su - username #推荐su - 会切换环境变量
这将会切换到指定用户名的用户。用户需要输入该用户的密码才能完成切换。
2. sudo
-
sudo
(Superuser Do)命令允许普通用户以超级用户的身份执行特定命令。 -
用户必须事先在 sudo 配置文件(通常是
/etc/sudoers
)中进行配置,才能够使用 sudo 命令,并且需要输入自己的密码而不是目标用户的密码。 -
sudo
命令可以用于执行单个命令或在一定时间内启用超级用户权限。
示例:
sudo command
这将会以超级用户权限执行特定的命令。
3.visudo
visudo
是一个用于编辑 sudoers 文件的命令,sudoers 文件包含了 sudo 命令的配置信息,用于控制用户在系统上以超级用户权限执行命令的权限。
使用 visudo
命令可以避免在编辑 sudoers 文件时出现语法错误,因为它会在你保存并退出编辑器时检查文件的语法,如果有语法错误,它会提示你进行修改。
运行 visudo
命令后会打开 sudoers 文件,你可以在其中添加、删除或修改用户的权限配置。请确保在编辑 sudoers 文件时仔细阅读相关文档以了解其语法和使用方法。
在终端中输入以下命令即可使用 visudo
:
sudo visudo
这将会以超级用户的权限打开 sudoers 文件进行编辑。编辑完成后,保存并退出编辑器,即可使更改生效。
6.3用户管理
1./etc/passwd
/etc/passwd
文件是一个存储系统用户信息的文本文件,它通常位于 Linux 系统的根目录下。每一行代表一个用户的记录,包含了用户的基本信息,例如用户名、加密后的密码、用户 ID、组 ID、用户描述、家目录路径以及默认的 shell 程序。
/etc/passwd
文件的格式如下:
username:password:UID:GID:GECOS:home_directory:shell
其中各字段的含义如下:
-
username:用户的登录名。
-
password:加密后的密码,现在通常用 'x' 或 '*' 表示密码已经保存在
/etc/shadow
文件中。 -
UID:用户 ID(User ID),一个唯一标识用户的数字。
-
GID:默认的组 ID(Group ID),表示该用户的默认组。
-
GECOS:用户描述信息,通常包括用户的全名、电话号码等。现在这个字段通常为空。
-
home_directory:用户的家目录路径,即用户登录后的默认工作目录。
-
shell:用户登录后默认使用的 shell 程序。
示例 /etc/passwd
文件的一行记录可能如下所示:
john:x:1001:1001:John Doe:/home/john:/bin/bash
这表示一个名为 "john" 的用户,其密码字段为 'x'(实际密码保存在 /etc/shadow
文件中),用户 ID 为 1001,组 ID 为 1001,用户描述为 "John Doe",家目录路径为 "/home/john",默认 shell 程序为 "/bin/bash"。
2./etc/shadow
/etc/shadow
文件是一个用于存储系统用户的加密密码和相关信息的文件,通常位于 Linux 系统的根目录下。与 /etc/passwd
文件一样,每一行代表一个用户的记录,但是它存储的是用户的加密密码和其他安全相关的信息。
/etc/shadow
文件的格式如下:
username:password:lastchg:min:max:warn:inactive:expire:flag
其中各字段的含义如下:
-
username:用户的登录名,与
/etc/passwd
文件中的对应。 -
password:加密后的密码,是实际的用户密码经过加密算法处理后的结果。
-
lastchg:上次修改密码的日期(自 1970 年 1 月 1 日以来的天数)。
-
min:密码修改后要等待的最短天数。
-
max:密码有效期的最大天数。
-
warn:密码过期前的警告天数。
-
inactive:密码过期后用户账号被禁用前的非活动天数。
-
expire:账号失效日期(自 1970 年 1 月 1 日以来的天数)。
-
flag:预留字段,目前未使用。
示例 /etc/shadow
文件的一行记录可能如下所示:
john:$6$5P/HJd$lCn7h6kEwhs3x8mQg/:18702:0:99999:7:::
这表示一个名为 "john" 的用户,其加密密码为 $6$5P/HJd$lCn7h6kEwhs3x8mQg/
,上次修改密码的日期距今有 18702 天,密码修改后不需要等待,密码有效期为 99999 天,密码过期前 7 天发出警告,密码过期后账号立即失效。
useradd
、usermod
和 userdel
是 Linux 系统中用于管理用户的常用命令,它们分别用于创建、修改和删除用户。以下是它们的详细说明:
3.useradd
-
useradd
命令用于创建新用户。 -
使用该命令时,可以指定用户的各种属性,如用户名、用户 ID、所属组、家目录路径等。
-
常用选项:
-
-c, --comment
:指定用户的注释信息。 -
-m, --create-home
:创建用户时同时创建用户的家目录。 -
-u, --uid
:指定用户的用户 ID。 -
-g, --gid
:指定用户的初始组 ID。 -
-d,--directory
:指定用户家目录 -
-s,--shell
:指定用户shell
-
-
示例:
sudo useradd -m -c "John Doe" -u 1001 -g 1001 john
4.usermod
-
usermod
命令用于修改现有用户的属性。 -
可以使用该命令来修改用户的用户名、用户 ID、所属组、注释信息等。
-
常用选项:
-
-l, --login
:修改用户的登录名。 -
-c, --comment
:修改用户的注释信息。 -
-d, --home
:修改用户的家目录路径。 -
-g, --gid
:修改用户的初始组 ID。 -
-a,--append:添加
-
-
示例:
sudo usermod -l newname oldname sudo usermod -u 2222 -s /bin/bash jerry sudo usermod -aG xiaoshuo student
5.userdel
-
userdel
命令用于删除用户。 -
可以使用该命令删除指定的用户及其相关文件。
-
常用选项:
-
-r, --remove
:删除用户的家目录及其内容。
-
-
示例:
sudo userdel -r john
这些命令是管理用户的基本工具,可以通过它们来创建、修改和删除系统中的用户,并对其进行必要的配置。
6.4用户组管理
1./etc/group
/etc/group
是一个存储系统组信息的文本文件,通常位于 Linux 系统的根目录下。与 /etc/passwd
文件类似,每一行代表一个组的记录,包含了组的基本信息,例如组名、加密后的密码、组 ID、组内成员等。
/etc/group
文件的格式如下:
groupname:password:GID:user1,user2,...
其中各字段的含义如下:
-
groupname:组的名称。
-
password:加密后的密码,通常为空,表示密码不可用。密码占位符
x
-
GID:组 ID(Group ID),一个唯一标识组的数字。
-
user1,user2,...:属于该组的用户列表。
示例 /etc/group
文件的一行记录可能如下所示:
developers:x:1001:john,jane
这表示一个名为 "developers" 的组,其密码字段为空,组 ID 为 1001,该组包含了 "john" 和 "jane" 两个用户。
2.主组和隶属组
在Linux系统中,有两种类型的组:主组(Primary Group)和隶属组(Supplementary Group)。
-
主组(Primary Group):
-
每个用户都有一个主组。
-
当用户创建文件或目录时,默认情况下它们会被分配给用户的主组。
-
用户的主组通常在
/etc/passwd
文件中指定。
-
-
隶属组(Supplementary Group):
-
除了主组外,用户还可以属于一个或多个隶属组。
-
隶属组可以赋予用户访问特定资源的权限。
-
隶属组的信息通常存储在
/etc/group
文件中。
-
区别:
-
主组是用户创建文件或目录时默认分配的组,每个用户只有一个主组。
-
隶属组是用户额外属于的组,一个用户可以属于一个或多个隶属组。
例如,假设用户 "john" 的主组是 "developers",而他还属于 "engineers" 和 "designers" 这两个隶属组。那么当 "john" 创建文件时,文件将被分配给 "developers" 组,而 "john" 仍然可以通过他的隶属组 "engineers" 和 "designers" 访问特定的资源。
3.groupadd
-
groupadd
命令用于创建新组。 -
使用该命令时,可以指定组的各种属性,如组名、组 ID 等。
-
常用选项:
-
-g, --gid
:指定组的组 ID。
-
-
示例:
sudo groupadd -g 1001 developers
4.groupmod
-
groupmod
命令用于修改现有组的属性。 -
可以使用该命令来修改组的名称或组 ID。
-
常用选项:
-
-n, --new-name
:修改组的名称。 -
-g, --gid
:修改组的组 ID。
-
-
示例:
sudo groupmod -n newgroup oldgroup
5.groupdel
-
groupdel
命令用于删除组。 -
可以使用该命令删除指定的组及其相关信息。
-
示例:
sudo groupdel oldgroup
6.gpasswd
gpasswd
命令是用于管理组密码和组成员的命令,通常用于设置组密码和添加/删除组成员。下面是 gpasswd
命令的基本用法和选项:
gpasswd [options] groupname
其中,groupname
是要操作的组的名称。
常用选项包括:
-
-a, --add user
: 将用户添加到指定组。 -
-d, --delete user
: 从指定组中删除用户。 -
-r, --remove-password
: 从指定组中删除密码。 -
-A, --administrators admin1,admin2,...
: 设置组管理员(只有管理员才能修改组成员或密码)。 -
-M, --members user1,user2,...
: 设置指定的组成员列表。 -
-p, --password
: 设置或更改组密码。
示例用法:
-
将用户添加到组:
gpasswd -a username groupname
-
从组中删除用户:
gpasswd -d username groupname
-
设置组管理员:
gpasswd -A admin1,admin2 groupname
-
设置组密码:
gpasswd -p password groupname
6.5密码策略
1./etc/shadow
/etc/shadow
文件是一个用于存储系统用户的加密密码和相关信息的文件,通常位于 Linux 系统的根目录下。与 /etc/passwd
文件类似,每一行代表一个用户的记录,但是它存储的是用户的加密密码和其他安全相关的信息。
/etc/shadow
文件的格式如下:
username:password:lastchg:min:max:warn:inactive:expire:flag
其中各字段的含义如下:
-
username:用户的登录名,与
/etc/passwd
文件中的对应。 -
password:加密后的密码,是实际的用户密码经过加密算法处理后的结果。
-
lastchg:上次修改密码的日期(自 1970 年 1 月 1 日以来的天数)。
-
min:密码修改后要等待的最短天数。
-
max:密码有效期的最大天数。
-
warn:密码过期前的警告天数。
-
inactive:密码过期后用户账号被禁用前的非活动天数。
-
expire:账号失效日期(自 1970 年 1 月 1 日以来的天数)。
-
flag:预留字段,目前未使用。
示例 /etc/shadow
文件的一行记录可能如下所示:
john:$6$5P/HJd$lCn7h6kEwhs3x8mQg/:18702:0:99999:7:::
这表示一个名为 "john" 的用户,其加密密码为 $6$5P/HJd$lCn7h6kEwhs3x8mQg/
,上次修改密码的日期距今有 18702 天,密码修改后不需要等待,密码有效期为 99999 天,密码过期前 7 天发出警告,密码过期后账号立即失效。
2.passwd
passwd
命令用于修改用户的密码。在 Linux 系统中,任何用户都可以使用 passwd
命令修改自己的密码,而超级用户(root)可以用它来修改任何用户的密码。
passwd #修改当前用户的密码: sudo passwd username #修改其他用户的密码(需要 root 权限) echo mima | passwd --stdin #一行改密 pass -d tom #删除tom的密码
3.chage
chage
命令用于更改用户的密码过期信息和账户有效期限制。它允许管理员对用户账户的密码过期时间、账户失效时间等进行管理。chage
命令通常用于设置用户密码过期策略,强制用户定期更改密码,以提高系统安全性。
基本用法如下:
chage [options] username
其中,username
是要修改密码设置的用户名。
常用选项包括:
-
-d, --lastday LAST_DAY
: 设置用户上次更改密码的日期(yyyy-mm-dd 格式)。 -
-E, --expiredate EXPIRE_DATE
: 设置用户账户的失效日期(yyyy-mm-dd 格式)。 -
-l, --list
: 显示用户的密码过期信息。
示例用法:
-
查看用户的密码过期信息:
chage -l username
-
设置用户密码失效日期:
sudo chage -E YYYY-MM-DD username
-
设置用户密码过期提醒:
sudo chage -M days username
-
设置用户密码过期策略(90 天后过期):
sudo chage -M 90 username
这些是 chage
命令的一些常见用法,通过它可以管理用户密码的过期信息和账户的有效期限制。
4./etc/login.defs
/etc/login.defs
是一个配置文件,用于设置系统登录及密码策略的默认值。这个文件通常包含了许多关于用户账户的设置,如密码长度、过期时间、尝试次数等。在大多数 Linux 发行版中,这个文件包含了默认的系统范围的设置,但有些发行版也可能会提供其他方式来配置这些设置。
以下是 /etc/login.defs
文件中可能包含的一些设置项和它们的含义:
-
PASS_MAX_DAYS:密码的最大有效天数。
-
PASS_MIN_DAYS:密码更改的最小间隔天数。
-
PASS_MIN_LEN:密码的最小长度。
-
PASS_WARN_AGE:在密码过期前多少天发出警告。
-
LOGIN_RETRIES:登录尝试失败的最大次数。
-
LOGIN_TIMEOUT:登录超时时间。
-
UID_MIN:系统分配的最小用户 ID。
-
UID_MAX:系统分配的最大用户 ID。
-
GID_MIN:系统分配的最小组 ID。
-
GID_MAX:系统分配的最大组 ID。
-
UMASK:新文件的默认权限掩码。
-
USERGROUPS_ENAB:是否允许用户创建与其用户名相同的组。
以及其他一些可能影响用户账户和登录策略的设置。
通过编辑 /etc/login.defs
文件,系统管理员可以更改这些默认设置以满足特定的安全要求和策略需求。不过,在修改此文件之前,建议仔细阅读相关的文档以确保了解每个设置项的含义和影响。
4.账号锁定和解锁
passwd -l username 用户的密码字段前加上 !! usermod -l username 用户的密码字段前加上 ! passwd -u username usermod -u username