- Home
- Packages
- Forums
- Wiki
- Bugs
- AUR
- Download

# Users and Groups (正體中文)

From ArchWiki

摘要
本文章描述如何管理使用者與群組帳號。某些桌面環境會提供圖形使用者 / 群組管理工具，此非本文討論範圍。
概要
Users and groups are used on GNU/Linux for access control. The superuser (root) has complete access to the operating system and its configuration; it is intended for administrative use only. Unprivileged users can use the su and sudo programs for controlled privilege escalation.
相關資料
DeveloperWiki:UID / GID Database
PolicyKit
chmod
Change username

Users and groups are used on GNU/Linux for access control — that is, to control access to the system's files, directories, and peripherals. Linux offers relatively simple/coarse access control mechanisms by default. For more advanced options, see ACL and LDAP Authentication.

## 概要

A user is anyone who uses a computer. In this case, we are describing the names which represent those users. It may be Mary or Bill, and they may use the names Dragonlady or Pirate in place of their real name. All that matters is that the computer has a name for each account it creates, and it is this name by which a person gains access to use the computer. Some system services also run using restricted or privileged user accounts.

Managing users is done for the purpose of security by limiting access in certain specific ways.

Any individual may have more than one account, as long as they use a different name for each account they create. Further, there are some reserved names which may not be used such as "root".

Users may be grouped together into a "group," and users may choose to join an existing group to utilize the privileged access it grants.

Note: The beginner should use these tools carefully and stay away from having anything to do with any other existing user account, other than their own.

## 權限與擁有權

From In UNIX Everything is a File:

  The UNIX operating system crystallizes a couple of unifying ideas and concepts that shaped its design, user interface, culture and evolution. One of the most important of these is probably the mantra: "everything is a file," widely regarded as one of the defining points of UNIX.

  This key design principle consists of providing a unified paradigm for accessing a wide range of input/output resources: documents, directories, hard-drives, CD-ROMs, modems, keyboards, printers, monitors, terminals and even some inter-process and network communications. The trick is to provide a common abstraction for all of these resources, each of which the UNIX fathers called a "file." Since every "file" is exposed through the same API, you can use the same set of basic commands to read/write to a disk, keyboard, document or network device.

From Extending UNIX File Abstraction for General-Purpose Networking:

  A fundamental and very powerful, consistent abstraction provided in UNIX and compatible operating systems is the file abstraction. Many OS services and device interfaces are implemented to provide a file or file system metaphor to applications. This enables new uses for, and greatly increases the power of, existing applications — simple tools designed with specific uses in mind can, with UNIX file abstractions, be used in novel ways. A simple tool, such as cat, designed to read one or more files and output the contents to standard output, can be used to read from I/O devices through special device files, typically found under the `/dev` directory. On many systems, audio recording and playback can be done simply with the commands, "`cat /dev/audio > myfile`" and "`cat myfile > /dev/audio`," respectively.

Every file on a GNU/Linux system is owned by a user and a group. In addition, there are three types of access permissions: read, write, and execute. Different access permissions can be applied to a file's owning user, owning group, and others (those without ownership). One can determine a file's owners and permissions by viewing the long listing format of the `ls` command:

    $ ls /boot/ -l

    total 13740
    drwxr-xr-x 2 root root    4096 Jan 12 00:33 grub
    -rw-r--r-- 1 root root 8570335 Jan 12 00:33 kernel26-fallback.img
    -rw-r--r-- 1 root root 1821573 Jan 12 00:31 kernel26.img
    -rw-r--r-- 1 root root 1457315 Jan  8 08:19 System.map26
    -rw-r--r-- 1 root root 2209920 Jan  8 08:19 vmlinuz26

The first column displays the file's permissions (for example, the file `kernel26.img` has permissions `-rw-r--r--`). The third and fourth columns display the file's owning user and group, respectively. In this example, all files are owned by the root user and the root group.

    $ ls /media/ -l

    total 16
    drwxrwx--- 1 root vboxsf 16384 Jan 29 11:02 sf_Shared

In this example, the `sf_Shared` directory is owned by the root user and the vboxsf group. It is also possible to determine a file's owners and permissions using the stat command:

Owning user:

    $ stat -c %U /media/sf_Shared/

    root

Owning group:

    $ stat -c %G /media/sf_Shared/

    vboxsf

Access rights:

    $ stat -c %A /media/sf_Shared/

    drwxrwx---

Access permissions are displayed in three groups of characters, representing the permissions of the owning user, owning group, and others, respectively. For example, the characters `-rw-r--r--` indicate that the file's owner has read and write permission, but not execute (`rw-`), whilst users belonging to the owning group and other users have only read permission (`r--` and `r--`). Meanwhile, the characters `drwxrwx---` indicate that the file's owner and users belonging to the owning group all have read, write, and execute permissions (`rwx` and `rwx`), whilst other users are denied access (`---`). The first character represents the file's type.

List files owned by a user or group with the `find` command:

    # find / -group [group]

    # find / -user [user]

A file's owning user and group can be changed with the `chown` (change owner) command. A file's access permissions can be changed with the `chmod` (change mode) command.

See man chown, man chmod, and Linux file permissions for additional detail.

## 檔案清單

警告: 不要手動編輯這些檔案。使用指定工具可以正確處理鎖定問題，並避開任何使資料庫格式無效的風險。請參閱#使用者管理與#群組管理瞭解個大概。

檔案 | 目的
--- | ---
`/etc/shadow` | 保全的使用者帳號資訊
`/etc/passwd` | 使用者帳號資訊
`/etc/gshadow` | 包含群組帳號的影子資訊
`/etc/group` | 定義使用者所屬群組為何
`/etc/sudoers` | 允許執行 sudo 的名單
`/home/*` | 家目錄

## 使用者管理

`who` 指令可以用來列出所有登入系統的使用者。

使用 `useradd` 指令新增使用者：

    # useradd -m -g [起始群組] -G [額外群組] -s [登入用 Shell] [使用者名稱]

- `-m` 建立使用者的家目錄為 `/home/[使用者名稱]`；一個非 root 的使用者在家目錄內可以寫入、刪除檔案並安裝程式。
- `-g` 定義使用者起始登入群組的群組名稱或編號；群組名稱必須存在；若提供群組編號，其指定的群組必須是一個已存在的群組；若未指定此項，useradd 將參考 `/etc/login.defs` 內所包含的 USERGROUPS_ENAB 變數。
- `-G` 引進一個輔助群組清單，讓使用者同時成為這些群組的成員；每個群組以逗號分隔，不包含任何空格；預設情況下，使用者只會隸屬於其起始群組。
- `-s` 定義使用者預設登入用 Shell 的路徑與檔名；Arch Linux 啟始腳本使用 Bash；當開機程序結束後，預設登入用 Shell 就變成所指定的 Shell；若選擇 Bash 以外的 Shell，請確認已經安裝所選 Shell 的軟體包。

一個典型桌面系統下的範例：新增 archie 這個使用者，並指定登入用 Shell 為 bash：

    # useradd -m -g users -s /bin/bash archie

之後若要將使用者加入其它群組，使用

    # usermod -aG [額外群組] [使用者名稱]

警告: 若忽略 `-a` 選項，該使用者將會被踢出所有未列於 `[額外群組]` 的群組 (也就是說，使用者將只有 `[額外群組]` 所列舉群組的成員身分)。

若要在 GECOS 欄位 (例如，使用者的全名) 輸入使用者資訊：

    # chfn [使用者名稱]

(此方式下 `chfn` 將以互動模式執行)。

指定使用者的密碼：

    # passwd [username]

使用者帳號可以使用 `userdel` 指令刪除。

    # userdel -r [username]

`-r` 選項代表同時刪除該使用者的家目錄與郵件佇列。

### 使用者資料庫

本機的使用者資訊會儲存在 `/etc/passwd` 檔案。列出系統上所有使用者帳號：

    $ cat /etc/passwd

一行會列出一個帳號，格式如下：

    account:password:UID:GID:GECOS:directory:shell

欄位意義：

- `account` 為使用者的名稱
- `password` 為使用者的密碼
- `UID` 為使用者的數字 ID
- `GID` 為使用者主群組的數字 ID
- `GECOS` 為選填欄位，使用者的個人資；通常包含使用者的全名
- `directory` 為使用者的 `$HOME` 目錄
- `shell` 為使用者的指令直譯程式 (預設為 `/bin/sh`)

註記: Arch Linux 使用影子密碼。由於 `passwd` 檔案可以無限制地讀取，在該檔案儲存密碼 (雜湊值或其它方式) 非常不安全。`password` 欄位內只包含一個佔位字元 (`x`)，代表密碼的雜湊值已儲存於存取受限的檔案 `/etc/shadow`。

## 群組管理

`/etc/group` 這個檔案定義了系統內的群組 (詳情列於 `man group`)。

以 `groups` 指令顯示使用者所屬群組：

    $ groups [使用者]

若忽略`[使用者]`，將顯示目前使用者加入的群組名稱。

`id` 指令提供更多的詳細資料，像是使用者的 UID 與關聯 GID：

    $ id [使用者]

列出系統上所有群組：

    $ cat /etc/group

用 `groupadd` 指令建立新群組：

    # groupadd [群組]

用 `gpasswd` 指令將使用者加入群組：

    # gpasswd -a [使用者] [群組]

刪除群組：

    # groupdel [群組]

將使用者自群組中移除：

    # gpasswd -d [使用者] [群組]

若使用者目前已登入，他/她必須登出後再行登入，變動才會生效。

## 群組清單

### 使用者群組

註記:

- 在執行 systemd 的系統下，某些群組可能為非必要。請參閱 Systemd 的「補充資料」一節。
- 只要 logind 階段沒有損毀，正常的桌面權限如音效、3D、列印、掛載等都能直接獲得，不必加入這些群組。(若要檢查，詳見一般疑難排解#階段權限)。

工作站、桌面使用者通常會將他們的非 root 使用者帳號加入以下某些群組，對周邊設備與其它硬體的存取才會被允許，以便進行系統的管理：

群組 | 影響檔案 | 目的
--- | --- | ---
audio | `/dev/audio`, `/dev/snd/*`, `/dev/rtc0` | 在所有階段對音效硬體的直接存取 (ALSA 和 OSS 皆提出要求)。本機階段已經有能力播放音效、存取混音器控制。
camera |  | 存取數位相機。
disk | `/dev/sda[1-9]`, `/dev/sdb[1-9]` | 存取區塊裝置，不受 optical、floppy 與 storage 其它群組的影響。
floppy | `/dev/fd[0-9]` | 存取軟碟機。
games | `/var/games` | 存取某些遊戲軟體。
locate | `/usr/bin/locate`, `/var/lib/locate`, `/var/lib/mlocate`, `/var/lib/slocate` | 使用 updatedb 指令的權利。
lp | `/etc/cups`, `/var/log/cups`, `/var/cache/cups`, `/var/spool/cups` | 存取印表機硬體；讓使用者能夠管理列印工作。
network |  | 改變網路設定值的權利；像是使用 NetworkManager。
networkmanager |  | 您的使用者帳號需要這個，才能以 NetworkManager 連上無線網路。這個群組預設不包含進 Arch，必須手動加入。
optical | `/dev/sr[0-9]`, `/dev/sg[0-9]` | 存取光學裝置，如 CD/DVD 光碟機。
power |  | 使用 Pm-utils (暫停、休眠...) 與電力管理控制的權利。
rfkill | `/dev/rfkill` | 控制無線裝置電力狀態的權利 (rfkill 使用)。
scanner | `/var/lock/sane` | 存取掃描器硬體。
storage |  | 存取可移除裝置，如 USB 外接硬碟、快速插拔裝置、MP3 播放器；讓使用者能夠掛載儲存裝置。
sys |  | 管理 CUPS 內印表機的權利。
users |  | 一般使用者群組。
uucp | `/dev/ttyS[0-9]`, `/dev/tts/[0-9]` | 序列與 USB 裝置，如數據機、手持設備、RS-232/序列埠。
video | `/dev/fb/0`, `/dev/misc/agpgart` | 存取影像擷取裝置、2D/3D 硬體加速、幀緩衝 (使用 X 不需要加入本群組)。本機階段已經有能力使用硬體加速與影像擷取。
wheel |  | 管理性群組，通常用來給予 sudo 與 su 指令的存取 (預設皆不使用)。

### 系統群組

以下群組作為系統用途，不太被一般 Arch 使用者所使用：

群組 | 影響檔案 | 目的
--- | --- | ---
avahi |  |
bin | 無 | 歷史的遺骸
clamav | `/var/lib/clamav/*`, `/var/log/clamav/*` | Clam AntiVirus 使用。
daemon |  |
dbus | `/var/run/dbus/*` |
ftp | `/srv/ftp` | FTP 伺服器使用，如 Proftpd
gdm | X 伺服器認證目錄 (ServAuthDir) | GDM 群組。
http |  |
kmem | `/dev/port`, `/dev/mem`, `/dev/kmem` |
log | `/var/log/*` | 存取 `/var/log` 下的日誌檔。
mail | `/usr/bin/mail` |
mem |  |
mpd | `/var/lib/mpd/*`, `/var/log/mpd/*`, `/var/run/mpd/*`，另外再加上音樂目錄 | MPD 群組。
nobody |  | 沒有權限的群組。
ntp | `/var/lib/ntp/*` | NTPd 群組。
policykit |  | PolicyKit 群組。
root | `/*` | 完整的系統管理與控制權 (root, admin)。
smmsp |  | sendmail 群組。
systemd-journal | `/var/log/journal/*` | 提供完整的 systemd 日誌存取。否則只顯示使用者產生的訊息。
tty | `/dev/tty`, `/dev/vcc`, `/dev/vc`, `/dev/ptmx` | 例：存取 `/dev/ACMx`
vboxsf | 虛擬機器共享資料夾 | VirtualBox 使用。
fuse |  | fuse 使用，允許使用者掛載。

### 軟體群組

以下群組允許其成員使用特定軟體：

群組 | 影響檔案 | 目的
--- | --- | ---
adbusers | `/dev/` 下的裝置節點 | 存取「Android 除錯橋接器」(Android Debugging Bridge) 的權利。
cdemu | `/dev/vhba_ctl` | 使用 cdemu 驅動模擬的權利。
kvm | `/dev/kvm` | 使用 KVM 的「硬體輔助虛擬化」(Hardware-assisted Virtualization) 的權利。
thinkpad | `/dev/misc/nvram` | ThinkPad 使用者用來存取諸如 tpb 等工具。
vboxusers | `/dev/vboxdrv` | 使用 VirtualBox 軟體的權利。
vmware |  | 使用 VMware 軟體的權利。
ssh |  | 設定 Sshd，只允許該群組的成員登入。
wireshark |  | 用 Wireshark 抓取封包的權利。

### 不建議或已不使用的群組

以下群組目前不被任何人使用：

群組 | 目的
--- | ---
stb-admin | 已不再使用！存取 system-tools-backends 的權利

Retrieved from "https://wiki.archlinux.org/index.php?title=Users_and_Groups_(正體中文)&oldid=274542"
Category:

- Security (正體中文)

## Navigation menu