2 用户管理
2.0 用户管理
2.1 常用命令
在 Linux 系统中,常用的用户和用户组的管理命令主要有以下几个:
useradd:
用于创建新用户账号。
useradd [选项] 用户名
[-u uid [-o]] [-g group] [-G group,...]
[-d 主目录 [-m]] [-s shell] [-c 注释] [-l 新名称]
[-f 失效日] [-e 过期日] [-p 密码] [-L|-U] 用户名
示例:假设要创建一个名为 "testuser" 的用户,主目录为 "/home/testuser",使用的shell为 "/bin/bash",并且添加到 "testgroup" 和 "admingroup" 用户组中,可以使用如下命令:
plaintext
复制
useradd -u 1001 -g testgroup -G admingroup -d /home/testuser -m -s /bin/bash testuser
-u 1001:指定用户的 UID 为 1001。
-g testgroup:将用户添加到 "testgroup" 用户组中。
-G admingroup:将用户添加到 "admingroup" 用户组中。
-d /home/testuser:指定用户的主目录。
-m:在指定的主目录下创建用户的家目录。
-s /bin/bash:指定用户登录时使用的 shell。
testuser:要创建的用户账号的用户名。
这样就创建了一个名为 "testuser" 的用户,并将其加入到 "testgroup" 和 "admingroup" 用户组中。
usermod:
用于修改用户的属性。
usermod [选项] 用户名
-c comment
更新用户帐号 password 档中的注解栏,一般是使用 chfn(1)来修改。
-d home_dir
更新用户新的登入目录。如果给定-m 选项,用户旧目录会搬到新的目录去,如旧目录不存在则建个新的。
-e expire_date 加上用户帐号停止日期。日期格式为 MM/DD/YY.
-f inactive_days 帐号过期几日后永久停权。当值为 0 时帐号则立刻被停权。而当值为-1 时则关闭此功能。预设值为-1。
-g initial_group 更新用户新的起始登入用户组。用户组名须已存在。用户组 ID 必须参照既有的的用户组。用户组 ID 预设值为 1。
-G group,[...] 定义用户为一堆 groups 的成员。每个用户组使用","区格开来,不可以夹杂空白字元。用户组名同-g 选项的限制。如果用户现在的用户组不再此列,则将用户由该用户组中移除。
-l login_name 变更用户 login 时的名称为 login_name。其它不变。特别是,用户目录名应该也会跟着更动成新的登入名。
-s shell 指定新登入 shell。如此栏留白,系统将选用系统预设 shell。
-u uid 用户 ID 值。必须为唯一的 ID 值,除非用-o 选项。数字不可为负值。预设为最小不得小于/etc/login.defs 中定义的UID_MIN 值。0 到 UID_MIN 值之间是传统上保留给系统帐号使用。用户目录树下所有的档案目录其 userID 会自动改变。放在用户目录外的档案则要自行手动更动。
2,示例
假设我们要将用户名为 testuser 的用户账号的主目录修改为 /home/newdir,并将其所属的用户组修改为 newgroup,可以使用如下命令:
usermod -d /home/newdir -g newgroup testuser
-d /home/newdir:将用户的主目录修改为 /home/newdir。
-g newgroup:将用户所属的主要用户组修改为 newgroup。
testuser:要进行修改的用户账号的用户名。
userdel:
用于删除用户账号。
userdel [选项] 用户名
-r 需要注意的是,userdel 命令只会删除用户账号本身,不会删除用户的文件和目录。如果需要同时删除用户的主目录,可以使用 -r 选项。
passwd:
用于设置或更改用户的密码。
passwd [选项] 用户名
1,root用户删除root密码
root@localhost ~]# passwd
也有提示;
Changing password for user root.
New UNIX password: 注:请输入新密码;
Retype new UNIX password: 注:验证新密码;
passwd: all authentication tokens updated successfully. 注:修改 root 密码成功;删除
2,root 修改指定用户(普通用户)的密码
root@localhost ~]# passwd beinan 注:更改或创建 beinan 用户的密码;
Changing password for user beinan.
New UNIX password: 注:请输入新密码;
Retype new UNIX password: 注:再输入一次;
passwd: all authentication tokens updated successfully. 注:成功;
3,普通用户只能修改自己的密码
beinan@localhost ~]$ passwd
Changing password for user beinan. 注:更改 beinan 用户的密码;
(current) UNIX password: 注:请输入当前密码;
New UNIX password: 注:请输入新密码;
Retype new UNIX password: 注:确认新密码;
passwd: all authentication tokens updated successfully. 注:更改成功;
4,相关参数
[root@localhost beinan]# passwd --help
Usage: passwd [OPTION...] <accountName>
-k, --keep-tokens keep non-expired authentication tokens 注:保留即将过期的用户在期满后能仍能使用;
-d, --delete delete the password for the named account (root only)注:删除用户密码,仅能以 root 权限操作;
-l, --lock lock the named account (root only)注:锁住用户无权更改其密码,仅能通过 root 权限操作;
-u, --unlock unlock the named account (root only) 注:解除锁定;
-f, --force force operation 注:强制操作;仅 root 权限才能操作;
-x, --maximum=DAYS maximum password lifetime (root only) 注:两次密码修正的最大天数,后面接数字;仅能root 权限操作;
-n, --minimum=DAYS minimum password lifetime (root only) 注:两次密码修改的最小天数,后面接数字,仅能root 权限操作;
-w, --warning=DAYS number of days warning users receives before 注:在距多少天提醒用户修改密码;仅能root 权限操作;
password expiration (root only)
-i, --inactive=DAYS number of days after password expiration when an 注:在密码过期后多少天,用户被禁掉,仅能以 root 操作;
account becomes disabled (root only)
-S, --status report password status on the named account (root 注:查询用户的密码状态,仅能 root用户操作;
--stdin read new tokens from stdin (root only)
groupadd:
用于创建新的用户组。
groupadd [选项] 用户组名
groupmod:
用于修改用户组的属性。
groupmod [选项] 用户组名
groupdel:
用于删除用户组。
groupdel [选项] 用户组名
chown:
用于修改文件或目录的所有者。
chown [选项] 所有者 文件/目录
2,示例:修改文件的用户和组
假设我们有一个名为 file.txt 的文件,当前的所有者为 user1,所属的组为 group1。现在,我们想将其所有者修改为 user2,所属的组修改为 group2,可以使用如下命令:
chown user2:group2 file.txt
user2:将文件 file.txt 的所有者修改为 user2。
group2:将文件 file.txt 的所属组修改为 group2。
file.txt:要进行修改的文件名。
执行上述命令后,文件 file.txt 的所有者将变为 user2,所属的组将变为 group2。
2,只修改文件的所有者或所属的组。例如,如果只想修改文件的所有者,可以使用以下命令:
chown user2 file.txt
这将把文件 file.txt 的所有者修改为 user2,同时保持原来的所属组不变。
chmod:
用于修改文件或目录的权限。
chmod [选项] 权限 文件/目录
2,示例:使用`r x w `更改文件的权限
假设我们有一个名为 file.txt 的文件,当前的权限为 -rw-r--r--,即所有者具有读写权限,而组和其他用户只有读权限。现在,我们想将所有者的写权限去掉,可以使用如下命令:
chmod u-w file.txt
u-w:表示将所有者的写权限 (w) 去掉 (-)。
file.txt:要进行修改的文件名。
执行上述命令后,文件 file.txt 的权限将变为 -r--r--r--,即所有者只有读权限,而组和其他用户仍然只有读权限。
3,示例:使用数字修改文件的权限
每种权限都有一个对应的数字值(读取权限:4,写入权限:2,执行权限:1)。例如,如果想将 file.txt 的权限设置为 -rwxr-xr-x,可以使用以下命令:
chmod 755 file.txt
755:表示将权限设置为 rwxr-xr-x,即所有者具有读取、写入和执行权限,而组和其他用户只有读取和执行权限。
请注意,以管理员权限(root 或使用 sudo)运行该命令,并根据需要进行修改。务必谨慎设置文件和目录的权限,确保系统的安全性和文件的可用性。
注意:
这些命令可以帮助管理系统中的用户和用户组,包括创建、修改、删除用户和用户组账号,设置密码,以及更改文件和目录的权限和所有者等。请注意,执行这些命令可能需要以管理员权限(root 或使用 sudo)
2.2 相关配置文件
/etc/passwd:
记录了系统上所有用户账号的信息。每行对应一个用户账号,字段由冒号分隔,包括用户名、加密后的密码(通常是占位符 x)、用户 ID(UID)、主要组 ID(GID)、用户信息、主目录、登录 shell 等。

/etc/shadow:
包含了用户账号的加密密码和其他安全相关信息。它只能由管理员访问。通常,此文件中的密码字段(第二个字段)被填充为一个哈希值,表示用户的密码或密码占位符。

/etc/gshadow:
关于组的阴影文件,类似于 /etc/shadow 文件。它记录了与每个组相关的安全信息,如组密码和组的管理者。
####
/etc/group:
存储了系统上所有组的信息。每行对应一个组,字段由冒号分隔,包括组名、组密码(通常是占位符 x)、组 ID(GID)和附加用户列表。

2.3 用户密码策略
在 Linux 系统中,用户密码策略是由 /etc/login.defs 和 /etc/passwd 文件中的配置参数控制的。以下是一些常见的密码策略设置和管理方法:
-
密码有效期:
/etc/login.defs文件中可以设置PASS_MAX_DAYS参数来指定密码的最长有效期,以天为单位。默认情况下,该值通常为 99999 天。可以根据需求修改此值以要求用户更频繁地更改密码。 -
密码最小有效期:
/etc/login.defs文件中的PASS_MIN_DAYS参数用来指定两次密码更改之间的最短时间间隔,以天为单位。默认情况下,该值为 0,即没有最小时间间隔限制。 -
密码长度要求与复杂性:
/etc/login.defs文件中的PASS_MIN_LEN参数可以设置密码的最小长度要求。还可以通过使用pam_pwquality.so模块在/etc/pam.d/common-password文件中启用密码复杂性要求,例如要求密码包含特殊字符、数字和大写字母等。 -
密码尝试次数限制及锁定:
/etc/pam.d/login文件或/etc/pam.d/system-auth文件中的pam_tally2.so模块可以用来限制密码尝试次数,并在达到一定次数后锁定账号。可以使用pam_tally2命令来管理已锁定的账号。 -
过期密码警告:
/etc/login.defs文件中的PASS_WARN_AGE参数可以设置密码过期前的警告天数。在密码将过期之前,系统会向用户发送警告消息。
要管理密码策略和用户密码,你可以使用以下命令和工具:
-
passwd命令:用于更改用户密码。使用passwd命令时,系统会根据密码策略要求用户输入新密码。 -
chage命令:用于更改用户的密码过期期限以及其他相关选项。例如,chage -M 90 username可以将特定用户的密码最大有效期设置为 90 天。 -
passwd -l和passwd -u命令:用于锁定和解锁用户账号。例如,passwd -l username可以锁定用户账号。 -
pam_tally2命令:用于管理登录尝试次数和锁定账号。
在修改密码策略和管理用户密码时,以管理员权限运行命令是必要的,并确保对系统和用户具有足够的了解,以避免不必要的错误和安全问题。。
2.4 acl
在 Linux 中,ACL(Access Control List)是一种权限控制机制,允许对文件和目录设置更细粒度的权限。ACL 提供了除了标准的所有者、用户组和其他用户之外的更多权限级别,可以更精细地设置文件和目录的权限
2.4.1alc相关概念
使用 ACL,可以授予其他用户或用户组特定的权限,而不是仅限于所有者和用户组的权限。使用 ACL
-
默认 ACL:默认 ACL 是针对目录的,用于设置在该目录中新创建的文件和子目录的默认权限。默认 ACL 中的权限将自动继承给新创建的对象。
-
Access ACL:Access ACL 是应用于单个文件或目录的 ACL。它可以覆盖默认 ACL,并允许对特定对象设置特定权限。
-
三种权限:ACL 提供了读取(read)、写入(write)和执行(execute)三种基本权限,除此之外还可以设置其他特定权限,例如删除、更改权限等。
-
getfacl 和 setfacl 命令:getfacl 命令用于查看文件或目录的 ACL,而 setfacl 命令用于设置文件或目录的 ACL。
2.4.2 示例命令:
- 查看文件或目录的 ACL:
[root@centos7 ~]#getfacl .
# file: .
# owner: root
# group: root
user::r-x
group::r-x
other::---
- 设置文件或目录的 ACL:
setfacl -m u:username:permissions /path/to/file
其中,u:username:permissions 表示设置特定用户的权限。
- 设置默认 ACL:
setfacl -d -m u:username:permissions /path/to/directory
其中,-d 参数指定设置的是默认 ACL。
要使用 ACL,文件系统必须使用支持 ACL 的文件系统类型,如 ext4 或 XFS。如果系统不支持 ACL,可以考虑将文件系统转换为支持 ACL 的类型。
2.5 切换用户身份
在 Linux 中,要切换用户身份可以使用 su 命令或 sudo 命令。
2.5.1 su 命令:
- 打开终端,输入以下命令:
su username。 - 然后按下回车键,系统会提示你输入要切换到的用户的密码。
- 输入密码后,按下回车键,你将切换到指定用户的身份。
2.5.2sudo 命令:
- 打开终端,输入以下命令:
sudo -i或sudo su。 - 然后按下回车键,系统会提示你输入当前用户的密码。
- 输入密码后,按下回车键,你将切换到超级用户(root)的身份。注意,切换到 root 用户要谨慎操作。
另外,需要注意的是,使用 su 命令切换到其他用户身份时,需要输入目标用户的密码。而使用 sudo 命令时,你需要输入当前用户的密码,然后才能通过授权执行需要超级用户权限的命令。
在切换用户身份后,可以执行需要特定权限的操作,直到退出切换的用户身份为止。要退出用户身份,可以输入 exit 或 logout 命令,并按下回车键。
2.6查询用户
w
可显示开机多久,当前登录的所有用户,平均负载
who
显示当前登录的所有用户
[root@centos7 ~]#who | tail -n 5
root :0 2023-08-04 08:35 (:0)
root pts/0 2023-08-04 08:35 (:0)
root pts/1 2023-08-04 16:31 (192.168.1.1)
root pts/2 2023-08-04 18:29 (192.168.1.1)
last
显示每个用户最后的登录时间
[test@centos7 root]$last | grep root | nl
1 root pts/2 192.168.1.1 Fri Aug 4 18:29 still logged in
2 root pts/1 192.168.1.1 Fri Aug 4 16:31 still logged in
3 root pts/1 192.168.1.1 Fri Aug 4 08:39 - 13:50 (05:10)
lastlog
显示每个用户最后的登录时间
[test@centos7 root]$lastlog | grep -v "Never logged in" |nl
1 Username Port From Latest
2 root pts/2 192.168.1.1 Fri Aug 4 18:29:55 +0800 2023
3 gdm :0 Fri Aug 4 08:34:46 +0800 2023
4 test pts/2 Fri Aug 4 20:23:52 +0800 2023
whoami
显示当前终端用户名
[root@centos7 ~]#whoami
root

浙公网安备 33010602011771号