设置新用户

来自 Alpine Linux

本页展示了如何创建非特权用户账户。即那些用于日常工作,包括桌面使用和远程登录的账户,以及如何在需要时授予此类账户管理员访问权限。

概述

创建用户账户为用户提供了他们自己的 $HOME 目录,并允许您(root 用户)限制这些用户账户对操作系统配置文件的访问权限。

使用它们可以提高安全性,因为它们限制了可能的操作,从而限制了可能的损害(即使是意外错误造成的)。

注意: 如果您正在使用“无盘”或“数据”磁盘模式安装,请在继续操作之前参考 持久 Home 目录 部分。

创建新用户

root 账户应仅用于需要提升访问权限的本地管理目的。可以通过两种方式创建常规或非特权用户账户

setup-user

setup-user 脚本允许快速简单地设置用户账户。要使用上述脚本创建常规用户账户

# setup-user

将提示用户选择选项。此脚本在后端使用 adduser

adduser

# adduser [-g "<Full Name>"] <username>

默认情况下,adduser 将会

  • 提示您为新用户设置密码
  • /home/<username> 中创建 home 目录
  • 将 shell 设置为 root 账户使用的 shell(默认为 ash)
  • 从 1000 开始分配用户 ID 和组 ID
  • 将 GECOS(全名)字段设置为 “Linux User,,,”
提示: 可选的 -g "<Full Name>" 上述命令设置 GECOS 字段。这对于指定非常有用。设置此字符串 - 至少等于用户名 - 使用户可区分,例如,当他们在显示管理器的登录屏幕上列出时。

用法(来自 “man busybox”)

adduser [OPTIONS] USER [GROUP]

Create new user, or add USER to GROUP

     -h --home DIR           Home directory
     -g --gecos GECOS        GECOS field
     -s --shell SHELL        Login shell named SHELL by example /bin/bash
     -G --ingroup GRP        Group (by name)
     -S --system             Create a system user
     -D --disabled-password  Don't assign a password, so cannot login
     -H --no-create-home     Don't create home directory
     -u --uid UID            User id
     -k SKEL                 Skeleton directory (/etc/skel)

新用户列在最后一行

/etc/passwd 的内容

root:x:0:0:root:/root:/bin/ash ... <username>:x:1000:1000:<username>:/home/<username>:/bin/ash

现在您应该能够发出 exit 命令并登录到新创建的账户。

用户组管理

要查看您属于哪个或哪些组,请使用以下命令

$ groups

要将您的用户添加到组(例如 seat),您可以使用以下命令

# adduser '<username>' seat

上述命令是 adduser 的变体。

要将您的用户添加到组,您也可以使用以下命令

用法(来自 “man busybox”)

addgroup [-g GID] [-S] [USER] GROUP

Create a group or add a user to a group

    -g --gid GID    Group id
    -S --system     Create a system group
注意: 您需要注销并重新登录才能使组更改生效。

管理员用户

如果确实必须允许用户访问 root 账户,则必须将 <username> 添加到 wheel 组。另请确保 doas 可用。

wheel 组

setup-user 脚本允许快速简单地设置管理员用户账户。要使用上述脚本创建新用户作为管理员用户,请使用

# setup-user -a <username>

上述命令将创建一个管理员用户,方法是将用户添加到 wheel 组并安装 doas,如果尚未安装。

要将现有用户添加为管理员用户

# adduser <username> wheel

在使用 adduser 将用户添加到 wheel 组后,如果尚未完成,请记住安装和配置 doas

doas

doas 命令提供了一种以另一个用户身份执行命令的方法。它的目标是成为 sudo 的简化和轻量级替代品。如前所述,setup-user 脚本会自动安装 doas 软件包。

# apk add doas

您将希望允许 wheel 组的成员使用 doas 获得 root 权限。为此,您的 doas 配置文件应如下所示

/etc/doas.d/doas.conf 的内容

# See doas.conf(5) and doas.d(5) for configuration details. # Configuration here may be overridden by /etc/doas.d/*.conf if files exist. # Uncomment to allow group "wheel" to become root. permit persist :wheel

sudo

注意: v3.15.0 起,Sudo 在 Alpine Linux 中已被弃用,转而使用 doas

Sudo (su “do”) 允许系统管理员委派权限,以授予某些用户(或用户组)以 root 用户或其他用户身份运行某些(或所有)命令的能力,同时提供命令及其参数的审计跟踪。

sudo 软件包是使用类似 BSD 的 doas 的替代方案,但软件包要大得多。

它可以如下使用:添加自定义用户配置文件,以避免以后在软件包升级期间手动更改配置文件。

# apk add sudo # NEWUSER='yourUserName' # adduser -g "${NEWUSER}" $NEWUSER # echo "$NEWUSER ALL=(ALL) ALL" > /etc/sudoers.d/$NEWUSER && chmod 0440 /etc/sudoers.d/$NEWUSER

保护 root 账户

建议不要以 root 身份运行完整的应用程序(如编辑器)来修改管理文件。

  • 使用 doasedit 中的 doasedit,它在 testing 仓库中可用。可以通过遵循 指南 安全地安装它。
  • 如果使用 sudo,请使用 sudoedit

这些工具允许使用文件的临时副本启动编辑器,用户修改并保存后,临时副本将覆盖原始文件。例如,doasedit /etc/apk/lbu.conf

  • 许多桌面环境和文件浏览器支持在其地址栏中使用 admin:///,以通过本地 gvfs-admin 挂载访问文件。

一旦 doassudo 配置正确并经过全面测试,就可以通过锁定 root 账户来禁用它。

警告: 在使用 doassudo 全面测试您的 管理员用户 之前,请勿锁定您的 root 账户。


要锁定 root 账户,您需要登录到您的 root 账户,然后使用 passwd 命令锁定它

# passwd -l root

Home 目录权限

`adduser` 创建具有 `rwxr-sr-x` 权限的 home 目录。这使得系统上的所有其他用户都可以读取该目录。如果您不希望其他用户读取您的 home 目录,则可以更改权限

chmod o-rx <path-to-directory>

提示: 多用户协作

如果未设置 --ingroup,(默认)新用户将分配一个新的 GID,该 GID 与 UID 匹配。如果与提供的 UID 对应的 GID 已存在,adduser 将会失败。

这确保了新用户默认拥有一个 “用户私有组”(UPG)作为主组。这些允许系统使用权限 umask (002),这会自动创建新的文件为组可写,但仅限于用户的私有组。在特殊的设置组 ID(协作)目录中,新文件可以自动创建为目录的组可写。

持久 Home 目录

如果使用“无盘”或“数据”磁盘模式安装,则使 /home 目录持久化非常重要

  • 要么需要从可写分区挂载 /home 文件系统,要么
  • 必须将 /home 目录添加到 lbu 备份中,并在创建用户后提交新的本地备份

# lbu include /home # lbu commit

(不推荐,因为恢复到较旧的 .apkovl 也会恢复 /home 中的文件)。

常用权限组

以下组是系统上某些操作所必需的。组名称取自 https://git.alpinelinux.org/alpine-baselayout/tree/group

注意: 请参考 Debian/wiki SystemGroups 以了解所有这些组的安全隐患。

adm 用于系统监控任务。disk 原始磁盘访问权限。基本等同于 root 访问权限。lp 此组的成员可以启用和使用打印机。wheel 管理员组,成员可以使用 doas 以 root 身份运行命令(如果在 doas 配置中启用)。floppy 访问软盘驱动器和其他可移动(非光盘)驱动器(如 USB 闪存驱动器)。audio 直接访问声音硬件(声卡或麦克风)。cdrom 用于访问磁盘写入器以及以普通用户身份挂载 DVD、BR 或 CD-ROM 光盘。dialout 完全直接访问串行端口。input 访问输入设备。tape 需要为一组用户提供对磁带驱动器的访问权限。video 访问视频捕获设备(如网络摄像头)。netdev 用于以普通用户身份进行网络连接管理。kvm 需要使用虚拟机的 KVM 加速。games 访问某些游戏软件。cdrw 需要在磁盘写入设备上写入 RW-DVD、RW-BR 或 RW-CD 光盘。usb 需要访问特殊的 USB 设备,已弃用的组。users 如果您计划为所有用户使用公共文件,则为必需,作为桌面使用是强制性的。

桌面使用

如果使用 setup-desktop 安装桌面环境,则 elogind 会自动启动并运行。如果您手动安装了桌面,并且在使用桌面时遇到困难,或者如果使用 seatd,那么想要图形环境的用户需要添加到 videoseat 组。

请参考 #15409 以了解有关 video 组的安全问题。

要将新创建的用户添加到可能在桌面使用中派上用场的组,您可以以 root 身份运行以下命令

# for u in $(ls /home); do for g in disk lp input audio cdrom dialout video netdev games users; do addgroup $u $g; done;done

请注意以上命令中的组,并且仅当您要将系统中的所有用户添加到以上组时才继续操作。

参见