管理用户账号和组账号
概述
linux基于用户身份对资源访问进行控制
- 用户账号:
超级用户(root、管理员) 、普通用户(一般用户)、 程序用户(特定的低权限账号保证程序运行,通常不显示在登录界面)
su -命令
切换root身份,但是shell环境、环境变量、工作目录等还是普通用户的shell;
su -用户
切换用户
su -
echo $PATH 查看当前系统环境 - 组账号:
基本组(私有组)基本组账号只能有一个 一般为创建用户时指定的组
在/etc/
附加组(公共组)用户除了基本组以外,额外添加指定的组,可有可无,也可以有多个 - UDI和GID:
UID: User IDentity,用户标识号
GID:Group IDentity,组标识号
用户帐号文件
用户账号文件/etc/passwd
基于系统运行和管理需要,所有用户都可以访问passwd文件中的内容,但是只有root用户才能进行更改。在早期的UNIX操作系统中,用户帐号的密码信息是保存在passwd文件中的,不法用户可以很容易的获取密码字串并进行暴力破解,因此存在一定的安全隐患。后来经改进后,将密码转存入专门的shadow文件中,而passwd文件中仅保留密码占位符“x”。
文件位置:/etc/passwd
每一行对应一个用户的帐号记录
root:x:0:0:root:/root:/bin/bash
- 字段1-
root
:用户帐号的名称 - 字段2-
x
:用户密码占位符“x” - 字段3-
0
:用户帐号的UID号 - 字段4-
0
:**所属基本组帐号的GID号 - 字段5-
root
:用户全名(登录) - 字段6-
/root
:宿主目录 - 字段7-
/bin/bash
:登录Shell信息 - 注意:
/bin/bash
为可登陆系统,/sbin/nologin
和/bin/false
为禁止用户登陆系统
用户账号文件/etc/shadow
默认只有 root 用户能够读取 shadow 文件中的内容,且不允许直接编辑该文件中的内容。
文件位置:/etc/shadow
保存用户的密码、账号有效期等信息
每一行对应一个用户的密码记录
root:$6$VyOUGqOC$v5HlLM1wagZC/FwGfnrtJFnlT:18445:0:99999:7:::
- 字段1-
root
:用户帐号的名称 - 字段2-
$6$VyOUGqOC$v5HlLM1wagZC/FwGfnrtJFnlT
:使用MD5加密的密码字串信息,当为*
或!!
时表示此用户不能登录到系统。 - 若该字段内容为空,则该用户无须密码即可登录系统
- 字段3-
18445
:上次修改密码的时间,表示从1970年01月01日算起到最近一次修改密码时间隔的天数 - 字段4-
0
:密码的最短有效天数,自本次修改密码后,必须至少经过该天数才能再次修改密码。默认值为0,表示不进行限制 - 字段5-
99999
:密码的最长有效天数,自本次修改密码后,经过该天数以后必须再次修改密码。默认值为99999
,表示不进行限制 - 字段6-
7
:提前多少天警告用户密码将过期,默认值为7
- 字段7 :在密码过期之后多少天禁用此用户
- 字段8 :帐号失效时间,此字段指定了用户作废的天数(从1970年01月01日起计算),默认值为空,表示账号永久可用。
- 字段9 :保留字段(未使用)
所有伪用户的密码都是!!
或*
,代表没有密码是不能登录的。
当然,新创建的用户如果不设定密码,那么它的密码项也是!!
,代表这个用户没有密码可以登录
不用登陆密码这是个伪命题,普通用户之间切换必须要密码,除非passwd -d
。
添加用户账号 useradd
在/etc/passwd
文件和/etc/shadow
文件的末尾增加该用户账号的记录。
useradd
是一个在 Linux 和类 Unix 系统中用于创建新用户的命令行工具。它允许系统管理员或具有适当权限的用户创建新的用户账户,并可以指定一系列的配置选项,如用户的家目录、登录 shell、用户组等。
基本用法
基本的 useradd
命令格式如下:
useradd [选项] 用户名
- 用户名:你想要创建的新用户的用户名。
常用选项
常用选项 | 含义 |
---|---|
-m | 创建用户时自动创建用户的家目录(通常为 /home/用户名 )。 |
-d /path/to/dir | 指定用户的家目录路径,如果路径不存在,则不会创建用户。 |
-s /bin/shell | 指定用户的登录 shell,/bin/shell 可以是 /bin/bash 、/bin/sh 、/bin/zsh 等。 |
-g 组名 | 将用户添加到指定的初始登录组。 |
-G 组名,组名,... | 将用户添加到指定的附加组中。 |
-c "注释" | 为新用户添加注释字段,通常用于描述用户信息。 |
-u UID | 为新用户指定一个唯一的用户 ID(UID)。 |
示例
- 创建一个新用户,并自动创建家目录:
useradd -m 新用户名
- 创建用户并指定家目录和登录 shell:
useradd -m -d /home/自定义目录 -s /bin/bash 新用户名
- 将新用户添加到特定的用户组中:
useradd -m -g 组名 新用户名
- 将新用户添加到多个组中:
useradd -m -g 初始组 -G 组1,组2 新用户名
注意
- 在使用
useradd
创建用户时,通常需要 root 权限。因此,可能需要在命令前加上sudo
(如果不是以 root 用户身份登录) - 若未明确指定用户的宿主目录,则在
/home
目录下自动创建与该用户账号同名的宿主目录,并在该目录中建立用户的各种初始配置文件。 - 若没有明确指定用户所属的组,则自动创建与该用户账号同名的基本组账号,组账号的记录信息将保存到
/etc/group
和/etc/gshadow
文件中。 - 创建用户后,可能还需要为新用户设置密码。这可以通过
passwd
命令完成:passwd 用户名
。
为用户账号设置密码 passwd
passwd
命令是Linux和类Unix系统中用于设置用户密码的命令行工具。root用户可以指定用户名作为参数,对指定账号的密码进行管理。普通用户却只能执行单独的“passwd”命令修改自己的密码。
基本用法
- 无选项:当不带任何选项和参数直接运行
passwd
命令时,它会提示当前登录用户更改自己的密码。 - 带用户名:
passwd 用户名
,管理员可以使用此格式来更改指定用户的密码。
常用选项
常用选项 | 含义 |
---|---|
-l | 锁定用户账户,禁止用户登录。只有root用户或具有相应权限的用户才能执行此操作。 |
-u | 解锁用户账户,允许用户登录。同样,只有root用户或具有相应权限的用户才能执行此操作。 |
-d | 删除用户的密码。执行此操作后,用户将无需密码即可登录。此选项通常仅对系统管理员可用。 |
-e | 强制用户在下次登录时更改密码。这对于新创建的用户或需要定期更改密码的用户很有用。 |
-S | 显示用户密码的状态信息,如密码是否已设置、密码过期时间等。这对于管理员监控用户密码状态非常有用。 |
-x | 设置密码的最大使用期限(天数)。超过此期限后,用户需要更改密码才能继续登录。 |
-n | 设置密码的最短使用期限(天数)。在更改密码后,用户必须等待指定的天数才能再次更改密码。 |
-w | 设置密码过期前的警告天数。在密码过期前的指定天数内,用户登录时会收到密码即将过期的警告。 |
-i | 设置密码过期后的不活动期限(天数)。如果用户在密码过期后的一段时间内没有更改密码,则账户将被禁用。 |
示例
-
更改当前用户的密码:
passwd
执行后,系统会提示你输入当前密码和新密码。
-
更改指定用户的密码(仅限管理员):
sudo passwd 用户名
执行后,系统会提示你输入新密码(无需输入原密码,因为你是以管理员身份执行)。
-
锁定用户账户:
sudo passwd -l 用户名
执行后,用户将无法登录系统。
-
解锁用户账户:
sudo passwd -u 用户名
执行后,用户将能够重新登录系统。
-
查看用户密码状态:
sudo passwd -S 用户名
执行后,系统会显示用户的密码状态信息。
补充
- 免交互设置密码
echo 123 | passwd --stdin 用户名
- 执行
passwd
命令时,通常需要root权限或sudo权限,以便进行特权操作。 - 在更改密码时,根据系统配置的安全策略,密码可能需要符合一定的复杂度要求(如包含数字、大写字母、特殊字符等)。
- 对于批量设置用户密码的情况,可以使用
chpasswd
命令,它可以从文本文件中读取用户名和密码的列表,并将其批量应用于系统中的用户。
总之,passwd
命令是Linux和类Unix系统中管理用户密码的重要工具,它提供了丰富的选项来满足不同场景下的需求。
修改用户账号属性 usermod
基本用法
usermod [选项] 用户名
常用选项
常用选项 | 含义 |
---|---|
-c, --comment COMMENT | 为用户账户添加或更改注释信息。例如,usermod -c "New comment" username 。 |
-d, --home HOME_DIR | 指定用户的新家目录。如果新家目录不存在,且没有使用-m 选项,则命令不会执行成功。例如,usermod -d /new/home/directory username 。 |
-e, --expiredate EXPIRE_DATE | 设置用户账户的过期日期。格式为YYYY-MM-DD。例如,usermod -e 2024-12-31 username 。 |
-f, --inactive INACTIVE | 设置用户账户在密码过期后多少天不活动则禁用账户。例如,usermod -f 30 username 。 |
-g, --gid GROUP | 修改用户的主用户组。GROUP可以是组名或GID。例如,usermod -g newgroup username 。 |
-G, --groups GROUPS | 将用户添加到指定的附加用户组中。GROUPS是一个逗号分隔的组名列表。注意,如果仅使用-G 选项而不带-a ,则会替换用户当前的所有附加组。例如,usermod -aG group1,group2 username 。 |
-l, --login NEW_LOGIN | 修改用户的登录名(即用户名)。例如,usermod -l newloginname oldloginname 。 |
-L, --lock | 锁定用户账户,禁止用户登录。这实际上是修改了/etc/shadow 文件中用户密码的加密串前添加了一个! 或* 字符。例如,usermod -L username 。 |
-m, --move-home | 与-d 选项一起使用时,将用户旧的家目录内容移动到新的家目录中。如果新家目录不存在,则创建它。例如,usermod -d /new/home -m username 。 |
-s, --shell SHELL | 修改用户的登录Shell。例如,usermod -s /bin/zsh username 。 |
-u, --uid UID | 修改用户的用户ID(UID)。例如,usermod -u 1001 username 。 |
-U, --unlock | 解锁用户账户,允许用户登录。这移除了/etc/shadow 文件中用户密码加密串前的! 或* 字符。例如,usermod -U username 。 |
示例
-
修改用户登录名:
sudo usermod -l newusername oldusername
此命令将
oldusername
的登录名更改为newusername
。 -
修改用户家目录:
sudo usermod -d /new/home/directory -m username
此命令将
username
的家目录更改为/new/home/directory
,并将旧家目录的内容移动到新目录中。 -
将用户添加到附加组:
sudo usermod -aG groupname username
此命令将
username
添加到groupname
附加组中,同时保留其他附加组。 -
锁定用户账户:
sudo usermod -L username
此命令锁定
username
账户,禁止用户登录。 -
解锁用户账户:
sudo usermod -U username
此命令解锁
username
账户,允许用户登录。 -
修改用户默认Shell:
sudo usermod -s /bin/zsh username
此命令将
username
的默认Shell更改为/bin/zsh
。 -
锁定用户账户:
sudo usermod -L username
此命令将
username
的账户锁定。 -
修改用户的UIDl:
sudo usermod -u 1003 username
此命令将username
的默l更改为UID为1003
注意事项
- 在使用
usermod
命令时,通常需要以root用户身份执行或使用sudo命令。 - 修改用户账户属性时,应确保不会违反系统的安全策略或导致意外的系统行为。
- 在进行重要更改之前,建议备份相关文件或数据以防万一。
- 某些更改(如修改UID或用户名)可能会影响用户的文件所有权和权限,因此在执行这些操作时应格外小心。
出现-bash-4.2$
的解决方法:
-bash-4.2
表示使用的是bash shell程序的版本号是4.2,$表示当前用户是普通用户
[root@localhost home]# cp /etc/skel/.bashrc /home/test/
[root@localhost home]# cp /etc/skel/.bash_profile /home/test/
[root@localhost home]# chown test:test /home/test/.bash_profile
[root@localhost home]# chown test:test /home/test/.bashrc
删除用户账号 userdel
userdel
是Linux系统中用于删除用户账户的命令。以下是关于userdel
命令的详细解释,包括其基本用法、常用选项、使用示例及注意事项。
基本用法
userdel [选项] 用户名
常用选项
常用选项 | 含义 |
---|---|
-r, --remove | 删除用户的同时,删除用户的主目录及其包含的所有文件。如果不使用此选项,则默认仅删除用户账户,不删除其主目录。 |
-f, --force | 强制删除用户账户,即使用户当前已登录或有运行的进程。请注意,使用此选项可能会导致数据丢失,因为正在运行的进程可能未正确关闭。 |
-Z, --selinux-user | 删除用户时,同时删除其SELinux安全上下文。这个选项通常用于具有SELinux支持的系统上。 |
-h, --help | 显示userdel 命令的帮助信息,包括可用的选项和用法说明。 |
-R, --root CHROOT_DIR | 指定用户的家目录的根路径,这个选项较少使用,主要用于特殊配置的环境。 |
示例
- 删除用户但不删除其主目录:
这个命令会删除指定的用户账户,但不会删除其主目录及其文件。sudo userdel 用户名
- 删除用户及其主目录:
这个命令会删除指定的用户账户,并同时删除其主目录及其包含的所有文件。sudo userdel -r 用户名
- 强制删除用户:
如果用户当前已登录或有运行的进程,此命令会强制删除用户账户。但请注意,这可能会导致数据丢失或系统不稳定。sudo userdel -f 用户名
注意事项
- 在执行
userdel
命令之前,请确保您有足够的权限(通常是root权限或sudo权限)。 - 默认情况下,
userdel
命令仅删除用户账户,不删除用户的主目录。如果您想同时删除主目录,请使用-r
选项。 - 强制删除用户(使用
-f
选项)可能会导致数据丢失或系统不稳定,因此请谨慎使用。 - 在删除用户之前,请确保已经备份了任何重要数据,以防万一。
userdel
命令不会删除与用户账户相关联的其他系统资源,如数据库记录、网络配置文件等。如果需要删除这些资源,请手动处理。
补充
一
在当前bash环境下读取并执行/etc/profile
中的命令。
source /etc/profile
用户账号的初始配置文件:
/etc/profile
/etc/profile
是系统的全局配置文件,对所有用户都有效。它包含一些系统级别的环境变量和默认的系统级别的 shell 配置。
vim /etc/profile
alias cat='cat -n'
source /etc/profile
二
用户登录到系统时,系统会首先执行/etc/profile
文件,然后再执行该用户的个人配置文件(如.bashrc等)。所以/etc/profile
中设置的环境变量和命令对于所有用户都是生效的。
这个文件通常被用来设置一些全局环境变量,例如PATH,LANG等,以及一些系统范围的配置,如umask和系统范围的别名。
~/.bash_profile
:该文件是用户登录时被执行的脚本,可以用来设置环境变量和一些常用的命令别名等信息。
通常用来为用户定制个性化的系统环境。
vim .bash_profile
alias cat='cat -n'
source .bash_profile
修改之后重新登录shell即可
~/.bashrc
:该文件是在每个新的bash shell打开时被执行的脚本,
通常用来定义一些用户自己的shell函数、命令别名、路径、颜色等等。
vim .bashrc
alias cat='cat -n'
source .bashrc
修改之后重新登录shell即可
~/.bash_logout
:该文件是在用户退出bash shell时被执行的脚本,
通常用来清理一些临时文件、关闭一些服务等等。
/etc/bashrc
:该文件是系统全局的bash配置文件,对所有用户都有效。
可以在该文件中添加系统全局的环境变量、别名等信息,通常用来为所有用户定制系统级别的配置信息。
需要注意的是,这些配置文件是在不同的环境下被执行的,执行的顺序也不同。
通常在登录系统时:
系统会首先执行/etc/profile
文件
然后/.bash_profile
文件会被执行,
然后再执行/.bashrc
文件。
而在退出bash shell时,~/.bash_logout
文件会被执行。
组账号文件
一、组账号文件概述
Linux系统中的组账号文件主要有两个:/etc/group
和/etc/gshadow
。这两个文件分别存储了组账号的基本信息和密码信息(尽管/etc/gshadow
中的密码信息通常较少使用)。
二、组账号文件内容
/etc/group
文件- 功能:用于保存组账号的基本信息。
- 内容:该文件包含了多个字段,通常每行代表一个组的信息,字段之间用冒号(
:
)分隔。主要字段包括:- 组名称:组的唯一标识名。
- 组密码:通常不使用,设置为
x
表示密码存储在/etc/gshadow
文件中。 - GID(组ID):用于唯一标识每个组的数字。
- 组成员:属于该组的用户列表,用户之间用逗号(
,
)分隔。
- 示例:
这表示有一个名为groupname:x:1001:user1,user2
groupname
的组,其GID为1001,包含user1
和user2
两个成员。
/etc/gshadow
文件- 功能:用于保存组账号的密码信息以及组管理员信息。
- 内容:该文件也包含多个字段,但通常对于大多数组来说,密码字段是空的或未使用的。主要字段包括:
- 组名称:与
/etc/group
文件中的组名称相对应。 - 组密码:如果设置了组密码,将存储在这里。但出于安全考虑,通常不建议为组设置密码。
- 组管理员:可以管理组成员的用户列表,如果有多个管理员,则用逗号分隔。
- 组成员:与
/etc/group
文件中的组成员相同,但通常这里不重复列出。
- 组名称:与
- 示例:
这表示groupname:!::user3
groupname
组没有设置密码,也没有组管理员,但可能有额外的信息(如user3
)存储在特定字段中,尽管这取决于系统配置和文件的具体使用方式。
三、组账号文件的操作
对组账号文件的操作通常通过命令行工具进行,
groupadd
、groupmod
、groupdel
用于添加、修改、删除组账号
gpasswd
命令则用于管理组成员和组密码
grep "postfix" /etc/group
mail:x:12:postfix
postfix:x:89:
字段1:组帐号的名称
字段2:占位符“x”
字段3:组账号的GID号
字段4:组账号包含的用户成员(一般不包括基本组对应的用户帐号),多个成员之间以逗号“,”分隔
- 添加组账号
groupadd
[root@localhost ~]# groupadd test
[root@localhost ~]# tail -f /etc/group
-g:指定 GID 号
[root@localhost ~]# groupadd -g 88 ky29
[root@localhost ~]# tail -f /etc/group
- 添加删除组成员
gpasswd
常用选项:
选项 | 含义 |
---|---|
-a | 向组内添加一个用户 |
-d | 从组内删除一个用户成员 |
-M | 定义组成员列表,以逗号分隔 |
示例:
[root@localhost ~]# useradd yht
[root@localhost ~]# useradd hcy
[root@localhost ~]# gpasswd -M yht,hcy,qzz dn #将用户yht、hcy和qzz加入到dn用户组中
[root@localhost ~]# cat /etc/group
- 删除组账号 groupdel:
groupdel test
- 查询用户所属的组 groups:
groups [username]
- 查询用户身份标识 id:
id [username]
管理文件属性
查询用户帐号的详细信息 finger
需要先进行安装finger软件包
yum install -y finger
常用选项:
finger [用户名]
查询已登录到主机的用户信息:
在Linux或Unix系统中,你可以使用who
、w
或users
命令来查看当前登录的用户信息。
-
who
命令:显示当前登录的用户信息,包括用户名、登录的终端、登录时间以及从哪个IP地址登录(如果适用)。who
-
w
命令:提供比who
更详细的信息,包括用户正在执行的命令、登录时间、空闲时间等。w
-
users
命令:仅列出当前登录的用户名,一行一个。users
文件/目录的权限
权限类型
权限类型 | 读 | 写 | 执行 |
---|---|---|---|
字符表示 | r | w | x |
二进制表达 | 1 | 1 | 1 |
十进制表达 | 4 | 2 | 1 |
用户类别
权限可以针对以下用户类别进行设置:
- 文件所有者(u):文件的拥有者。
- 组(g):文件所属的用户组。
- 其他用户(o):既不是文件所有者也不属于文件所在组的用户。
- 所有用户(a):文件所有者、文件所在组的用户以及其他所有用户。
设置目录和文件的权限 chmod
chmod [ugoa…][±=][rwx] 文件或目录
“ugoa”表示该权限设置所针对的用户类别。
“u”代表文件属主,
“g”代表文件属组内的用户,
“o”代表其他任何用户,
“a”代表所有用户(缺省时为a)。
“±=”表示设置权限的操作动作。“+”代表增加相应权限,“-”代表减少相应权限,“=”代表仅设置对应的权限。
“rwx”是权限的字符组合形式,也可以拆分使用,如“r”“rx”等。
chmod
命令是Linux和UNIX系统中用于改变文件或目录权限的命令。通过chmod
命令,用户可以控制谁可以对文件或目录进行读取、写入或执行等操作。以下是chmod
命令的详细解释和用法:
权限设置方法
chmod
命令主要有两种设置权限的方法:
-
字母法
chmod [who] [+ | - | =] [mode] 文件名
[who]
:指定用户类别,可以是u、g、o、a中的一个或多个。[+ | - | =]
:指定操作类型,+
表示添加权限,-
表示删除权限,=
表示设置特定权限并取消其他所有权限。[mode]
:指定权限,可以是r、w、x中的一个或多个。
示例:
给文件所有者添加读、写、执行权限,给同组用户添加读、执行权限,给其他用户添加读权限
chmod u+rwx,g+rx,o+r filename
- 数字法
数字法通过三个八进制数字来表示权限,每个数字分别代表文件所有者、同组用户和其他用户的权限。数字由r(4)、w(2)、x(1)的权重值相加得到。chmod [mode] 文件名
[mode]
:三个八进制数字的组合,例如755
。
例如,chmod 755 filename
表示文件所有者有读、写、执行权限(7=4+2+1),同组用户和其他用户有读和执行权限(5=4+1)。
递归修改目录权限
chmod -R
表示递归修改目录以及其内部文件和子目录权限
chmod -R 755 directory/
此命令会将directory/
目录及其内部所有文件和子目录的权限设置为:
所有者拥有读、写、执行权限;同组用户和其他用户有读和执行权限。
注意
- 只有文件的所有者或root用户才能改变文件的权限。
- 错误的权限设置可能会导致文件或目录无法正常访问或被意外修改,因此在实际使用中需要谨慎。
补充
指定用户登陆时,以脚本的形式执行,弹出来提示语 “欢迎你!”
方法1:在用户的.bash_profile
或.bashrc
中添加命令
对于bash shell用户,可以在用户的家目录下的.bash_profile
或.bashrc
文件中添加命令来显示欢迎信息。.bash_profile
通常在登录shell时执行,而.bashrc
则在每个bash实例启动时执行(包括非登录shell)。
-
打开终端。
-
使用文本编辑器(如nano或vim)编辑用户的
.bash_profile
或.bashrc
文件。例如,使用nano编辑.bash_profile
,可以输入:nano ~/.bash_profile
或者,如果你希望这个欢迎信息每次打开bash时都显示(包括非登录shell),可以编辑
.bashrc
:nano ~/.bashrc
-
在文件的末尾添加以下行:
echo "欢迎你!"
-
保存并关闭文件。
-
为了使更改立即生效,你可以执行
source ~/.bash_profile
(或.bashrc
,取决于你编辑的文件)来重新加载配置文件,或者简单地注销并重新登录。
方法2:使用/etc/profile.d/
目录
另一种方法是创建一个新的shell脚本文件,并将其放置在/etc/profile.d/
目录下。这个目录下的脚本会在用户登录时自动执行(针对bash shell)。
- 创建一个新的shell脚本文件,例如
welcome_message.sh
:sudo nano /etc/profile.d/welcome_message.sh
- 在文件中添加以下内容:
#!/bin/bash echo "欢迎你!"
- 保存并关闭文件。
- 给脚本文件添加执行权限:
sudo chmod +x /etc/profile.d/welcome_message.sh
- 现在,每当用户登录时则会看到“欢迎你!”的提示。