前言
当我们在使用linux前,需要我们先进行登录操作(和windows一样),本文将以这个话题展开,详细说说用户账号和文件权限管理
1、用户和用户组的概述
1.1 用户的分类
Linux 中的用户分为三种角色:超级用户、普通用户和程序用户,每个角色有不同的权限和用途。理解这些角色及其对应的权限设置是系统管理的基础
1.1.1 超级用户(Root)
- Root用户是 Linux 系统中的管理员账户,拥有系统的所有权限。类似于 Windows 系统中的 administrator 用户。root 用户对系统的任何部分都拥有完全的控制权,可以执行任何操作,包括安装软件、修改系统配置和管理用户账户等
- Root用户的 UID 和 GID 都是 0
- 使用建议:为了安全,建议仅在进行系统管理任务时使用 root 用户,日常操作应使用普通用户账号,以降低系统被攻击的风险
1.1.2 普通用户
- 普通用户账号需要由 root 或其他管理员用户创建,权限较为有限,通常只能在自己的宿主目录中有完全控制权限
- UID 范围:CentOS 7 中普通用户的 UID 从 1000 开始,直到系统允许的最大值。每个用户的 UID 类似于个人身份证号码,是唯一标识用户的方式
1.1.3 程序用户
- 程序用户是安装 Linux 操作系统和应用程序时创建的低权限用户,通常用于运行系统服务或特定程序。这些用户不能登录系统,它们的主要任务是维持某个服务的正常运行。如 bin、daemon、ftp、mail 等
- UID 范围:通常是 1-499(CentOS6),1-999(CentOS7)这些 UID 被系统保留给程序用户使用
- 伪用户:它们通常不用于登录系统,而是为系统进程提供服务。例如:ftp 用户用于管理 FTP 服务,apache 用于 Web 服务
1.2 组账号的分类
Linux 系统通过将用户分配到不同的组来实现权限的管理。每个用户至少属于一个组,这个组是用户的基本组(或私有组)。用户还可以属于多个附加组,用于共享文件和服务
1.2.1 基本组
- 基本组是用户默认所属的组,通常与用户名相同。每个用户在创建时会自动拥有一个与用户名相同的基本组
- 在创建用户时,系统会为用户自动创建与其同名的基本组
1.2.2 附加组
- 附加组是用户除了基本组之外,可以加入的其他组。一个用户可以加入多个附加组,用于访问该组所授权的资源
- 这些附加组的权限影响所有加入该组的用户
1.3 UID和GID
-
UID:即每个用户的身份标示,类似于每个人的身份证号码
-
GID :是每个用户组的唯一标识符。每个用户都属于至少一个组,该组的 GID 用来标识该组。用户组用于管理一组具有相同权限的用户,文件和目录的访问权限通常由文件的 GID 来决定
2、用户帐号文件
2.1 passwd文件
/etc/passwd/ 文件在 Linux 系统中保存了所有用户的基本信息,而用户的密码信息和一些安全设置则保存在 /etc/shadow/ 文件中。密码的加密存储在 /etc/shadow/ 文件中,/etc/passwd/ 文件只存储占位符(如 x 或 !! ),以确保密码的安全
文件格式
/etc/passwd/ 文件记录每个用户的基本信息,每行一个用户,字段之间用冒号分隔,格式如下:
用户名 : 密码占位符 : UID : GID : 用户描述 : 宿主目录 : 登录Shell
字段解释
- 密码占位符:通常显示为 x ,表示密码存储在 /etc/shadow/ 文件中,而不直接存储在 /etc/passwd/ 文件里。ps:虽然 x 并不表示真正的密码,但也不能删除,如果删除了那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登陆
- 用户描述:该字段一般用于描述该用户的详细信息,通常为用户的全名或其他说明
- 宿主目录:用户登录时的默认工作目录
- /bin/bash:允许用户登录。程序文件是不允许登录,会显示 /sbin/nologin

2.2 shadow文件
/etc/shadow/ 文件用于存储用户的加密密码以及关于密码的有效期、过期时间等信息。文件中的每一行表示一个用户,字段之间由冒号分隔,格式如下:
用户名:加密密码:最后修改密码时间:最小修改间隔:最大修改间隔:密码警告天数:密码失效宽限天数:账户失效时间:保留
字段解释
- 加密密码:加密后的密码,通常使用 SHA-512 算法。若显示为
!!或*,则表示该账户已被锁定或无密码 - 上次修改密码的时间:Linux 计算日期的时间是以1970年1月1日作为第一天不断累加得到的时间。下图显示的20312意思是今天距离1970-1-1有20312天
- 最小修改间隔:密码修改的最小间隔,单位是天,默认为
0表示没有限制 - 最大修改间隔:密码的最大有效期,超过该期限必须修改密码,通常默认为
99999,表示密码永不过期 - 密码过期警告天数:密码过期前提前通知用户的天数,默认是
7天 - 密码过期宽限期:密码过期后的宽限期,表示密码过期后用户可以继续登录的天数,过期后禁用账户。
0表示过期后立即失效,-1表示永不失效 - 账户失效时间:账户的失效日期,使用自 1970 年 1 月 1 日以来的天数。为空表示账户永不过期
- 保留字段:该字段目前未使用,用作后续新增字段使用

3、用户管理相关的命令
3.1 修改用户密码信息—chage
chage 命令用于查看和修改用户账户的密码有效期、账户失效等信息。常见选项如下:
- -l:列出当前设置
- -m:设置密码可更改的最小天数
- -M:设置密码的最大有效期(最大天数)(chage -M 60 root)
- -W:设置密码到期前提前警告的天数
- -E:设置账户失效日期
- -d:设置上次修改密码的日期
- -i:设置密码过期后宽限期的天数




date -s "2025-12-23 14:30:00"

3.2 添加用户账号—useradd
添加用户账号
- -u:指定用户的 UID 号,要求该 UID 号码未被其他用户使用
- -d:指定用户的宿主目录位置(当与-M 一起使用时,不生效)
- -e:指定用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式
- -g:指定用户的基本组名
- -G:指定用户的附加组名
- -M:不建立宿主目录,即使/etc/login.defs 系统配置中已设定要建立宿主目录
- -s:指定用户的登录Shell



3.3 管理用户密码—passwd
passwd是用于管理用户密码的核心命令,主要功能包括密码修改、账户锁定及密码策略配置等
格式:passwd【选项】【用户】
- -d:清空指定用户的密码,仅使用用户名即可登录系统
- -l:锁定用户账户
- -S:查看用户账户的状态
- -u:解锁用户账户

1、单用户修改密码
echo "123" | passwd --stdin zhangsan
注:由于这里密码会明文展示,所以一般都用作于批量修改密码
2、通过脚本批量修改密码
#!/bin/bash
users=("user1" "user2" "user3")
password="CommonP@ss1"
for user in "${users[@]}"; do
echo "$password" | sudo passwd --stdin "$user"
done
3.4 修改用户账号的属性—usermod
格式:usermod 【选项】 用户
- -l:更改用户账号的登录名称
- -L:锁定用户账户
- -U:解锁用户账户
- -u:修改用户的 UID 号
- -d:修改用户的宿主目录位置。
- -e:修改用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式
- -g:修改用户的基本组名
- -G:修改用户的附加组名
- -s:指定用户的登录 Shell



3.5 删除用户账号—userdel
格式:userdel [-r] 用户名
-r 表示连用户的宿主目录一并删除

3.6 用户账号的初始配置文件
添加一个新的用户账号后,useradd命令会在该用户的宿主目录中建立一些初始配置文件。这些文件来自于账号模板目录/etc/skel/,基本上都是隐藏文件,较常用的初始配置文件 包括“.bash_logout”、“.bash_profile”和“.bashrc”。其中,“.bash_profile”文件中的命令将在该用户每次登录时被执行;“.bashrc”文件中的命令会在每次加载“/bin/Bash”程序(当然也包括登 录系统)时执行;而“.bash_logout”文件中的命令将在用户每次退出登录时执行
理解这些文件的作用,可以方便我们安排一些自动运行的后台管理任务。 在“.bashrc”等文件中,可以添加用户自己设置的可执行语句(如 Linux 命令行、脚本控 制语句等),以便自动完成相应的任务
如果希望为所有用户添加登录后自动运行的命令程 序、自动设置变量等,可以直接修改/etc 目录下的类似文件,如/etc/bashrc 文件、/etc/profile 文件。例如,执行以下操作可以为所有用户自动设置 myls 命令别名
- 每次修改 .bashrc后,使用 source ~./bashrc 可以刷新修改的配置,使之生效
- 一般会在 .bash_profile 文件中调用 .bashrc ,每次登录linux会启动 .bash_profile ,这样 .bashrc也就同步执行了
- 同理:可以在 /etc/skel/.bash_logout 文件中添加下面这行 rm -f $HOME/.bash_history 当用户每次注销时,.bash_history 文件都会被删除
4、组管理相关的命令
4.1 组账号文件
与组账号相关的配置文件也有两个,分别是 /etc/group 和 /etc/gshadow 前者用于保存 组账号名称、GID 号、组成员等基本信息,后者用于保存组账号的加密密码字串等信息。某一个组账号包含哪些用户成员,将会在 group 文件内最后一个字段中体现出来,多个组成员之间使用逗号分隔

4.2 添加组账号—groupadd
groupadd [-g GID] 组账号名
groupadd -g 1200 market
tail -1 /etc/group

4.3 添加删除组成员—gpasswd
- -a:添加用户到组
- -d:从组删除用户
- -A:指定管理员
- -M:指定组成员和-A的用途差不多
- -r:删除密码

4.4 删除组账号—groupdel
格式:groupdel 组账号名

5、查询账号信息
5.1 groups命令
格式:groups [用户名]
查询用户所属的组

5.2 id命令
格式:id [用户名]
查询用户身份标识

5.3 finger命令
格式:finger [用户名]
查询用户账号的详细信息

5.4 w、who、users命令
w命令:综合显示当前登录用户及其活动状态
用户信息:用户名(USER)、终端(TTY)、登录来源(FROM)、登录时间(LOGIN@)。
who命令:列出当前登录用户的基础会话信息
用户名、终端设备(TTY)、登录时间、远程主机 IP/域名
users命令:极简显示当前登录用户的用户名列表
ps:同名用户多次登录会重复显示用户名

5.5 su命令
格式:su - 目标用户
- 选项表示将使用目标用户的环境登录
没有 - 表示使用当前用户的环境变量

6、文件权限
6.1 查看文件/目录的权限和归属
- 读取 r:允许查看文件内容、显示目录列表
- 写入 w:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
- 可执行 x:允许运行程序、切换目录
- 属主:拥有该文件或目录的用户帐号
- 属组:拥有该文件或目录的组帐号
查看文件的权限
ls -lh 目录 查看全部
ls -ld 目录 查看某一个




drwxr-xr-x. 2 root root 6 10月 2 2020 modules-load.d
-rw-r--r--. 1 root root 0 6月 7 2013 motd
lrwxrwxrwx. 1 root root 17 8月 7 23:34 mtab -> /proc/self/mounts
## 第一个字符表示文件的类型
- 是普通文件
d是目录
l是软链接(快捷方式)
## 之后的每三个字符为一组
分别对应 r、w、x,如果有对应的权限就显示出来,没权限就会显示 -
第一组对应的是属主的权限
第二组对应的是属组的权限
第三组对应的是其他用户的权限
6.2 设置文件和目录的权限—chmod
格式1:chmod 【ugoa】【+-=】【r、w、x】【目标文件或目录】
u、g、o、a 分别表示属主、属组、其他用户、所有用户
“+-=”表示设置权限的操作动作
“+”代表增加相应权限,“-”代表减少相应权限,“=” 代表仅设置对应的权限
格式2:chmod nnn 目标文件或目录


r、w、x 每个都有对应的数字
r --- 4
w --- 2
x --- 1

6.3 设置文件和目录的归属—chown
chown 属主:属组 文件或目录
chown 属主 文件或目录
chown :属组 文件或目录
-R:递归修改指定目录下所有文件、子目录的归属


7、提权
7.1 sudo机制介绍
通过 su 命令可以非常方便地切换为另一个用户,但前提条件是必须知道目标用户的登录密码。例如,若要从zhangsan用户切换为 root 用户,必须知道 root 用户的密码。对于生产环境中,每多一个人知道特权密码,其安全风险也就增加一分。 有没有一种折中的办法,既可以让普通用户拥有一部分管理权限,又不需要将 root 用户的密码告诉他呢?答案是肯定的,使用 sudo 命令就可以提升执行权限。不过,需要由管理员预先进行授权,指定允许哪些用户以超级用户(或其他普通用户)的身份来执行哪些命令
7.2 sudo命令
- -l 列出用户在主机上可用的和被禁止的命令;一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的
- -v 验证用户的时间戳;如果用户运行sudo 后,输入用户的密码后,在短时间内可以不用输入口令来直接进行sudo 操作;用-v 可以跟踪最新的时间戳
- -u 指定以以某个用户执行特定操作
- -k 删除时间戳,下一个sudo 命令要求用求提供密码
etc/sudoers 文件的默认权限为440,需使用专门的 visudo 工具进行编辑。虽然也可以用 vim 进行编辑,但保存时必须执行“:w!”命令来强制操作,否则系统将提示为只读文件而拒绝保存。 配置文件/etc/sudoers 中,授权记录的基本配置格式如下
user MACHINE=COMMANDS
用户 主机 命令
用户(user):直接授权指定的用户名,或采用 %组名 的形式(授权一个组的所有用户)
主机(MACHINE):使用此配置文件的主机名称。一般设为 localhost 或者实际的主机名即可
命令(COMMANDS):允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号进行分隔
root用户给普通用户设置网卡权限
visudo
配置文件里插入

切换到普通用户
执行 sudo -l

执行sudo命令修改临时网卡


当使用相同授权的用户较多,或者授权的命令较多时,可以采用集中定义的别名。用户、 主机、命令部分都可以定义为别名(必须为大写),分别通过关键字User_Alias、Host_Alias、Cmnd_Alias来进行设置

总结
本文介绍了用户管理相关的命令如:useradd(增)、userdel(删)、chage(改)、usermod(改)、passwd(管理),组管理的命令groupadd增、group删、gpasswd(增、删组成员),查询账号信息(groups、id、finger、w、who、users),设置文件/目录的权限(chmod)、设置归属(chown),sudo提权【sudo 是一个灵活一种方式来控制用户(普通)的系统权限,通常以最小权限的一个原则来给普通用户赋权,通过编辑**/etc/sudoers配置文件或可视化编辑visudo**来赋权】
3120

被折叠的 条评论
为什么被折叠?



