https://www.networkworld.com/article/3225109/linux/managing-users-on-linux-systems.html
作者 | Sandra Henry-stocker
譯者 | dianbanjiu ??共計翻譯:3.0 篇 貢獻時間:11 天
也許你的 Lniux 使用者並不是憤怒的公牛,但是當涉及管理他們的賬戶的時候,能讓他們一直開心也是一種挑戰。監控他們當前正在訪問的東西,追蹤他們他們遇到問題時的解決方案,並且保證能把他們在使用系統時出現的重要變動記錄下來。這裡有一些方法和工具可以使這份工作輕鬆一點。
配置賬戶
新增和移除賬戶是管理使用者中最簡單的一項,但是這裡面仍然有很多需要考慮的選項。無論你是用桌面工具或是命令列選項,這都是一個非常自動化的過程。你可以使用命令新增一個新使用者,像是 adduser jdoe
,這同時會觸發一系列的事情。使用下一個可用的 UID 可以建立 John 的賬戶,或許還會被許多用以配置賬戶的檔案所填充。當你執行 adduser
命令加一個新的使用者名稱的時候,它將會提示一些額外的資訊,同時解釋這是在乾什麼。
$ sudo adduser jdoe
Adding user 'jdoe' ...
Adding new group `jdoe' (1001) ...
Adding new user `jdoe' (1001) with group `jdoe' ...
Creating home directory `/home/jdoe' ...
Copying files from `/etc/skel' …
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for jdoe
Enter the new value, or press ENTER for the default
Full Name []: John Doe
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
像你看到的那樣,adduser
將新增使用者的資訊(到 /etc/passwd
和 /etc/shadow
檔案中),建立新的家目錄,並用 /etc/skel
裡設定的檔案填充家目錄,提示你分配初始密碼和認定資訊,然後確認這些資訊都是正確的,如果你在最後的提示 “Is the information correct” 處的答案是 “n”,它將回溯你之前所有的回答,允許修改任何你想要修改的地方。
建立好一個使用者後,你可能會想要確認一下它是否是你期望的樣子,更好的方法是確保在新增第一個帳戶之前,“自動”選擇與您想要檢視的內容相匹配。預設有預設的好處,它對於你想知道他們定義在哪裡有所用處,以防你想作出一些變動 —— 例如,你不想家目錄在 /home
裡,你不想使用者 UID 從 1000 開始,或是你不想家目錄下的檔案被系統上的每個人都可讀。
adduser
如何工作的一些細節設定在 /etc/adduser.conf
檔案裡。這個檔案包含的一些設定決定了一個新的賬戶如何配置,以及它之後的樣子。註意,註釋和空白行將會在輸出中被忽略,因此我們可以更加集中註意在設定上面。
$ cat /etc/adduser.conf | grep -v "^#" | grep -v "^$"
DSHELL=/bin/bash
DHOME=/home
GROUPHOMES=no
LETTERHOMES=no
SKEL=/etc/skel
FIRST_SYSTEM_UID=100
LAST_SYSTEM_UID=999
FIRST_SYSTEM_GID=100
LAST_SYSTEM_GID=999
FIRST_UID=1000
LAST_UID=29999
FIRST_GID=1000
LAST_GID=29999
USERGROUPS=yes
USERS_GID=100
DIR_MODE=0755
SETGID_HOME=no
QUOTAUSER=""
SKEL_IGNORE_REGEX="dpkg-(old|new|dist|save)"
可以看到,我們有了一個預設的 shell(DSHELL
),UID(FIRST_UID
)的開始數值,家目錄(DHOME
)的位置,以及啟動檔案(SKEL
)的來源位置。這個檔案也會指定分配給家目錄(DIR_HOME
)的許可權。
其中 DIR_HOME
是最重要的設定,它決定了每個家目錄被使用的許可權。這個設定分配給使用者建立的目錄許可權是 755
,家目錄的許可權將會設定為 rwxr-xr-x
。使用者可以讀其他使用者的檔案,但是不能修改和移除他們。如果你想要更多的限制,你可以更改這個設定為 750
(使用者組外的任何人都不可訪問)甚至是 700
(除使用者自己外的人都不可訪問)。
任何使用者賬號在建立之前都可以進行手動修改。例如,你可以編輯 /etc/passwd
或者修改家目錄的許可權,開始在新伺服器上新增使用者之前配置 /etc/adduser.conf
可以確保一定的一致性,從長遠來看可以節省時間和避免一些麻煩。
/etc/adduser.conf
的修改將會在之後建立的使用者上生效。如果你想以不同的方式設定某個特定賬戶,除了使用者名稱之外,你還可以選擇使用 adduser
命令提供賬戶配置選項。或許你想為某些賬戶分配不同的 shell,請求特殊的 UID,完全禁用登入。adduser
的幫助頁將會為你顯示一些配置個人賬戶的選擇。
adduser [options] [--home DIR] [--shell SHELL] [--no-create-home]
[--uid ID] [--firstuid ID] [--lastuid ID] [--ingroup GROUP | --gid ID]
[--disabled-password] [--disabled-login] [--gecos GECOS]
[--add_extra_groups] [--encrypt-home] user
每個 Linux 系統現在都會預設把每個使用者放入對應的組中。作為一個管理員,你可能會選擇以不同的方式去做事。你也許會發現把使用者放在一個共享組中可以讓你的站點工作的更好,這時,選擇使用 adduser
的 --gid
選項去選擇一個特定的組。當然,使用者總是許多組的成員,因此也有一些選項去管理主要和次要的組。
處理使用者密碼
一直以來,知道其他人的密碼都是一個不好的念頭,在設定賬戶時,管理員通常使用一個臨時的密碼,然後在使用者第一次登入時會執行一條命令強制他修改密碼。這裡是一個例子:
$ sudo chage -d 0 jdoe
當使用者第一次登入的時候,會看到像這樣的事情:
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for jdoe.
(current) UNIX password:
新增使用者到副組
新增使用者到副組中,你可能會用如下所示的 usermod
命令 —— 新增使用者到組中並確認已經做出變動。
$ sudo usermod -a -G sudo jdoe
$ sudo grep sudo /etc/group
sudo:x:27:shs,jdoe
記住在一些組,像是 sudo
或者 wheel
組中,意味著包含特權,一定要特別註意這一點。
移除使用者,新增組等
Linux 系統也提供了命令去移除賬戶、新增新的組、移除組等。例如,deluser
命令,將會從 /etc/passwd
和 /etc/shadow
中移除使用者登入入口,但是會完整保留他的家目錄,除非你添加了 --remove-home
或者 --remove-all-files
選項。addgroup
命令會新增一個組,按目前組的次序給他下一個 ID(在使用者組範圍內),除非你使用 --gid
選項指定 ID。
$ sudo addgroup testgroup --gid=131
Adding group `testgroup' (GID 131) ...
Done.
管理特權賬戶
一些 Linux 系統中有一個 wheel 組,它給組中成員賦予了像 root 一樣執行命令的能力。在這種情況下,/etc/sudoers
將會取用該組。在 Debian 系統中,這個組被叫做 sudo
,但是以相同的方式工作,你在 /etc/sudoers
中可以看到像這樣的取用:
%sudo ALL=(ALL:ALL) ALL
這個基礎的設定意味著,任何在 wheel 或者 sudo 組中的成員,只要在他們執行的命令之前新增 sudo
,就可以以 root 的許可權去執行命令。
你可以向 sudoers
檔案中新增更多有限的特權 —— 也許給特定使用者執行一兩個 root 的命令。如果這樣做,您還應定期檢視 /etc/sudoers
檔案以評估使用者擁有的許可權,以及仍然需要提供的許可權。
在下麵顯示的命令中,我們看到在 /etc/sudoers
中匹配到的行。在這個檔案中最有趣的行是,包含能使用 sudo
執行命令的路徑設定,以及兩個允許透過 sudo
執行命令的組。像剛才提到的那樣,單個使用者可以透過包含在 sudoers
檔案中來獲得許可權,但是更有實際意義的方法是透過組成員來定義各自的許可權。
# cat /etc/sudoers | grep -v "^#" | grep -v "^$"
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
root ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL <== admin group
%sudo ALL=(ALL:ALL) ALL <== sudo group
登入檢查
你可以透過以下命令檢視使用者的上一次登入:
# last jdoe
jdoe pts/18 192.168.0.11 Thu Sep 14 08:44 - 11:48 (00:04)
jdoe pts/18 192.168.0.11 Thu Sep 14 13:43 - 18:44 (00:00)
jdoe pts/18 192.168.0.11 Thu Sep 14 19:42 - 19:43 (00:00)
如果你想檢視每一個使用者上一次的登入情況,你可以透過一個像這樣的迴圈來執行 last
命令:
$ for user in `ls /home`; do last $user | head -1; done
jdoe pts/18 192.168.0.11 Thu Sep 14 19:42 - 19:43 (00:03)
rocket pts/18 192.168.0.11 Thu Sep 14 13:02 - 13:02 (00:00)
shs pts/17 192.168.0.11 Thu Sep 14 12:45 still logged in
此命令僅顯示自當前 wtmp
檔案變為活躍狀態以來已登入的使用者。空白行表示使用者自那以後從未登入過,但沒有將其調出。一個更好的命令是過濾掉在這期間從未登入過的使用者的顯示:
$ for user in `ls /home`; do echo -n "$user ";last $user | head -1 | awk '{print substr($0,40)}'; done
dhayes
jdoe pts/18 192.168.0.11 Thu Sep 14 19:42 - 19:43
peanut pts/19 192.168.0.29 Mon Sep 11 09:15 - 17:11
rocket pts/18 192.168.0.11 Thu Sep 14 13:02 - 13:02
shs pts/17 192.168.0.11 Thu Sep 14 12:45 still logged
tsmith
這個命令會列印很多,但是可以透過一個指令碼使它更加清晰易用。
#!/bin/bash
for user in `ls /home`
do
echo -n "$user ";last $user | head -1 | awk '{print substr($0,40)}'
done
有時,此類資訊可以提醒您使用者角色的變動,表明他們可能不再需要相關帳戶。
與使用者溝通
Linux 提供了許多方法和使用者溝通。你可以向 /etc/motd
檔案中新增資訊,當使用者從終端登入到伺服器時,將會顯示這些資訊。你也可以透過例如 write
(通知單個使用者)或者 wall
(write
給所有已登入的使用者)命令傳送通知。
$ wall System will go down in one hour
Broadcast message from shs@stinkbug (pts/17) (Thu Sep 14 14:04:16 2017):
System will go down in one hour
重要的通知應該透過多個管道傳遞,因為很難預測使用者實際會註意到什麼。mesage-of-the-day(motd),wall
和 email 通知可以吸取使用者大部分的註意力。
註意日誌檔案
更多地註意日誌檔案上也可以幫你理解使用者活動。事實上,/var/log/auth.log
檔案將會為你顯示使用者的登入和登出活動,組的建立等。/var/log/message
或者 /var/log/syslog
檔案將會告訴你更多有關係統活動的事情。
追蹤問題和請求
無論你是否在 Linux 系統上安裝了票務系統,跟蹤使用者遇到的問題以及他們提出的請求都非常重要。如果請求的一部分久久不見回應,使用者必然不會高興。即使是紙質日誌也可能是有用的,或者更好的是,有一個電子錶格,可以讓你註意到哪些問題仍然懸而未決,以及問題的根本原因是什麼。確保解決問題和請求非常重要,日誌還可以幫助您記住你必須採取的措施來解決幾個月甚至幾年後重新出現的問題。
總結
在繁忙的伺服器上管理使用者帳戶部分取決於從配置良好的預設值開始,部分取決於監控使用者活動和遇到的問題。如果使用者覺得你對他們的顧慮有所回應並且知道在需要系統升級時會發生什麼,他們可能會很高興。
via: https://www.networkworld.com/article/3225109/linux/managing-users-on-linux-systems.html
作者:Sandra Henry-Stocker[2]
譯者:dianbanjiu 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出