linux:多用户系统

本文介绍了Linux用户系统的核心概念,包括用户登录过程、用户类型(超级用户、系统用户、普通用户)、关键配置文件如/etc/passwd和/etc/shadow的作用,以及用户组管理。此外,还讲解了如何通过命令行进行用户和组的管理。着重讨论了用户权限和安全性的考量,如密码存储在/etc/shadow中的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux 多用户体系结构概述

Linux 是一个 多用户多任务 操作系统,多个用户可以同时登录并在系统上运行不同的进程。

  • 每个用户都有一个唯一的 用户名UID(用户 ID)
  • 用户的权限和访问范围由 用户组(Group)和文件权限控制
  • 典型的多用户登录方式:
    • 本地终端(TTY)
    • SSH 远程登录
    • 图形界面登录(Desktop 环境)

Linux用户登录过程

1、当Linux系统正常引导完成后,系统就可以接受用户的登录。这是用户终端上显示login:提示符,如果是图形界面,则会显示用户登录窗口,这时就可以输入用户名和密码。

2、用户输入用户名后,系统会检查 /etc/passwd 是否有该用户,如不存在,则退出,如存在,则进行下一步。

3、首先读取 /etc/passwd 中的用户ID和组ID,同时改账户的其他信息(如用户的主目录)也会一并读出。

4、用户输入密码后,系统通过检查 /etc/shadow 来判断密码是否正确。如密码校验通过,这时就进入系统并启动系统的shell,系统启动的shell类型由 /etc/passwd 中的信息确定。通过系统提供的shell接口可以操作Linux。

  • /etc/passwd — 用户基本信息
    格式:
    用户名:密码占位符:UID:GID:注释:home目录:登录shell
    
  • /etc/shadow — 用户密码与过期信息(只有 root 可读)
  • /etc/group — 用户组信息
  • /etc/gshadow — 组密码与管理信息

用户

用户类型

Linux用户类型分为 3 类:超级用户、系统用户和普通用户。

超级用户(root,UID=0):用户名为 root 或 USER ID(UID)为0的账号,具有一切权限,可以操作系统中的所有资源。root可以进行基础的文件操作以及特殊的文件管理,另外还可以进行网络管理,可以修改系统中的任何文件。日常工作中应避免使用此类账号,只有在必要的时候才使用root登录系统。

系统用户(UID 1-499):正常运行系统时使用的账户。每个进程运行在系统里都有一个相应的属主,比如某个进程以何种身份运行,这些身份就是系统里对应的用户账号。注意系统账户是不能用来登录的,比如 bin、mysql、daemon、mail等。(shell 设为 /usr/sbin/nologin

普通用户(UID 500-60000):普通使用者,能使用Linux的大部分资源,一些特定的权限受到控制。用户只对自己的目录有写权限,读写权限受到一定的限制,从而有效保证了Linux的系统安全,大部分用户属于此类。

认识/etc/passwd文件

在这里插入图片描述
1:用户名,用户登录系统时使用的用户名
2:密码位,密码占位符x,早期的unix系统中,该字段是存放账户和密码的,由于安全原因,后来把这个密码字段内容移到/etc/shadow中了。这里可以看到一个字母x,表示该用户的密码是/etc/shadow文件中保护的。
3:UID(0-65535),用户标识号
4:GID(0-65535),缺省组标识号,当添加用户时,默认情况下会同时建立一个与用户同名且UID和GID相同的组。
5:注释性描述,对这个账户的说明
6:宿主目录,用户登录系统后首先进入的目录,一般是"/home/用户名"这样的目录
7:用户使用的shell,默认为bash

认识/etc/shadow文件

因为每个用户登录时都需要取得UID和GID来判断权限问题,所以/etc/passwd的权限为644,这样一来就会带来安全问题,即所有的用户都可以都/etc/passwd文件,即使文件内的密码是加密的,但还是存在一定的被攻击破解的安全隐患。因此,就有了/etc/shadow文件。

由于passwd文件必须要被所有的用户读,所以会带来安全隐患。而shadow文件就是为了解决这个安全隐患而增加的。

权限为:---------

root:$6$jmM2rFzPCFbmqBkf$oz3AUooR3qaV5uXU67HcXlYiE3hNf0sSsunk1eBTDPrGUOM1xYCyesGoj.ZLTIzdiXEdrnnqNyC5g8SsRnxQm.:16338:0:99999:7:::
bin:*:15615:0:99999:7:::
daemon:*:15615:0:99999:7:::
adm:*:15615:0:99999:7:::
lp:*:15615:0:99999:7:::

字段1:帐号名称
字段2:加密的密码
字段3:最近更改密码的时间;从1970/1/1到上次修改密码的天数
字段4:禁止修改密码的天数;从1970/1/1开始,多少天之内不能修改密码,默认值为0
字段5:用户必须更改口令的天数;密码的最长有效天数,默认值为99999
字段6:警告更改密码的期限;密码过期之前警告天数,默认值为7;在用户密码过期前多少天提醒用户更改密码
字段7:不活动时间;密码过期之后账户宽限时间 3+5;在用户密码过期之后到禁用账户的天数
字段8:帐号失效时间,默认值为空;从1970/1/1日起,到用户被禁用的天数
字段9:保留字段(未使用),标志

用户组

每个用户至少属于一个用户组,每个用户组拥有多个用户,每个用户组共享共同的权限

cat /etc/group

在这里插入图片描述
1、组名
2、密码占位符x;通常不需要设置该密码,由于安全原因,该密码被记录在/etc/gshadow中,因此显示为’x’。这类似/etc/shadow
3、组账户GID号,用户组ID
4、本组的成员用户列表;加入这个组的所有用户账号

认识/etc/gshadow文件

root:::
bin:::bin,daemon
daemon:::bin,daemon
sys:::bin,adm
adm:::adm,daemon

字段1:组账号的名称
字段2:加密后的密码字符串,这个字段可以空的或者!;如果是空的或有!,表示没有密码
字段3:本组的管理员列表;这个字段也可为空;如果有多个用户组管理员,用,号分隔
字段4:本组的成员列表;加入这个组的所有用户账户;列表中多个用户通过","分隔

常用命令

# 切换角色
su 用户名
# 以root用户运行
sudo xx
# 添加用户
useradd 参数 usesname
# 添加组
groupadd [-g GID] 组名
# 查看Ubuntu有哪些用户
awk -F: '$3 >= 1000 {print $1}' /etc/passwd

我用sudo su切换到gitlab-runner的账号,我输入的密码是我的账号密码而不是gitlab-runner的账号密码

你如果单独用 su gitlab-runner,则会提示输入 gitlab-runner 用户的密码,但通常这个用户是系统用户,没有设置密码,所以你没法直接登录。

所以:用 sudo su - gitlab-runner 是用你自己密码授权执行切换,不用 gitlab-runner 密码。sudo 是以超级用户权限执行命令,它默认验证的是 调用者(当前登录用户)的密码,用来确认你有权限执行 sudo 操作。

我安装的node、mysql是在系统还是当前用户下?

软件安装方式安装位置生效范围
mysql-serverapt(系统包管理器)/usr/bin、/etc、/var/lib/mysql全系统,所有用户
nodejs (apt)apt/usr/bin、/usr/lib全系统,所有用户
nodejs (nvm)nvm(用户工具)当前用户家目录(~/.nvm仅当前用户
自定义源码安装自定义路径取决你配置取决权限和路径

用户管理常用命令

创建用户

sudo adduser alice
sudo useradd -m bob   # 手动指定创建 home 目录

删除用户

sudo deluser alice
sudo userdel -r bob   # 删除 home 目录和邮件

修改用户信息

sudo usermod -l newname oldname   # 修改用户名
sudo usermod -aG sudo alice       # 添加到 sudo 组
sudo passwd alice                 # 修改密码

查看用户信息

id alice
groups alice
getent passwd alice

用户组管理

创建组

sudo groupadd devteam

删除组

sudo groupdel devteam

修改组

sudo usermod -aG devteam alice    # 把 alice 加入 devteam
sudo gpasswd -d alice devteam     # 从组中移除用户

查看组信息

getent group devteam
# 有哪些组
cut -d: -f1 /etc/group

权限与访问控制

Linux 使用 三类权限

  • 文件所有者(user)
  • 所属组(group)
  • 其他用户(others)

权限类型:

  • 读(r = 4)
  • 写(w = 2)
  • 执行(x = 1)

查看文件权限

ls -l /path/to/file

修改权限

chmod 755 script.sh
chmod u+x script.sh
chmod g-w file.txt

修改所有者

sudo chown alice:devteam file.txt

常见管理场景与示例

1) 创建开发组并分配用户

sudo groupadd developers
sudo usermod -aG developers alice
sudo usermod -aG developers bob

2) 禁止用户登录

sudo usermod -s /usr/sbin/nologin testuser

3) 限制用户只访问特定目录(配合 chroot / sftp)

sudo usermod -d /var/www/webuser webuser

4) 批量创建用户

for u in user1 user2 user3; do
    sudo adduser --disabled-password $u
done

安全建议与最佳实践

  • 普通用户不要直接用 root 登录,使用 sudo 提升权限
  • 服务进程应使用独立的系统用户运行
  • 定期审计 /etc/passwd/etc/sudoers
  • 禁用长期不用的账户:sudo usermod -L username
  • 对 SSH 登录启用密钥认证并关闭密码登录

常见问题与解决办法

问题useradd: command not found
解决:安装 passwd 包(Debian/Ubuntu 系列):

sudo apt install passwd

问题:用户无法 sudo
解决:检查是否在 sudo 组:

sudo usermod -aG sudo username

问题:忘记 root 密码
解决:单用户模式(recovery mode)重置密码:

passwd root

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lvan的前端笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值