1. 程式人生 > >Linux系統的用戶和用戶組管理

Linux系統的用戶和用戶組管理

man controls home director useradd active 特征 crypt 集合

一、用戶(user)和用戶組(group)概念

1、用戶(user)的概念

Linux 是典型的多用戶操作系統,我們可以建若幹用戶(user),用於系統服務的運行和權限管理,不同的用戶登陸系統,按照設定的權限去操作系統,提高了安全性。在Linux系統中有一些用戶是用來完成特定任務的,比如nobody和ftp 等;有的是為了權限安全,比如限制root直接登陸系統,創建一個sshusr用戶,登陸sshusr後,再su到root下。可以通過查看/etc/passwd了解Linux系統有哪些帳號。

2、用戶組(group)的概念

用戶組(group)就是具有相同特征的用戶(user)的集合體;比如有時我們要讓多個用戶具有相同的權限,比如查看、修改某一文件或執行某個命令,這時我們需要用戶組,我們把用戶都定義到同一用戶組,我們通過修改文件或目錄的權限,讓用戶組具有一定的操作權限,這樣用戶組下的用戶對該文件或目錄都具有相同的權限。

3、用戶和用戶組的對應關系

一對一:某個用戶可以是某個組的唯一成員;
多對一:多個用戶可以是某個唯一的組的成員;
一對多:某個用戶可以是多個用戶組的成員,有附加組;
多對多:多個用戶對應多個用戶組,並且幾個用戶可以是歸屬相同的組。

二、用戶(user)和用戶組(group)相關的配置文件、命令或目錄

1、與用戶和用戶組相關的配置文件;

1)與用戶相關的配置文件;
/etc/passwd 註:用戶的配置文件;
/etc/shadow 註:用戶影子口令(密碼)文件;
2)與用戶組相關的配置文件;
/etc/group 註:用戶組配置文件;
/etc/gshadow 註:用戶組的影子口令文件;
2、管理用戶和用戶組的相關工具或命令;

1)管理用戶的工具或命令;
useradd :添加用戶
adduser :添加用戶
userdel :刪除用戶
passwd :為用戶設置密碼
usermod :修改用戶命令,可以通過usermod 來修改登錄名、用戶的家目錄等等;
pwcov :同步用戶從/etc/passwd 到/etc/shadow
pwck :pwck是校驗用戶配置文件/etc/passwd 和/etc/shadow 文件內容是否合法或完整;
pwunconv :是pwcov 的立逆向操作,是從/etc/shadow和 /etc/passwd 創建/etc/passwd ,然後會刪除 /etc/shadow 文件;
finger :查看用戶信息工具
id :查看用戶的UID、GID及所歸屬的用戶組
chfn :更改用戶信息工具
su :用戶切換工具
sudo :sudo 是通過另一個用戶來執行命令(execute a command as another user),su 是用來切換用戶,然後通過切換到的用戶來完成相應的任務,但sudo 能後面直接執行命令,比如sudo 不需要root 密碼就可以執行root 賦與的執行只有root才能執行相應的命令;但得通過visudo 來編輯/etc/sudoers來實現;
visudo :visodo 是編輯 /etc/sudoers 的命令;也可以不用這個命令,直接用vi 來編輯 /etc/sudoers 的效果是一樣的;
sudoedit :和sudo 功能差不多;

2)管理用戶組的工具或命令;
groupadd :添加用戶組;
groupdel :刪除用戶組;
groupmod :修改用戶組信息
groups :顯示用戶所屬的用戶組
grpck :用於驗證組文件的完整性
grpconv :通過/etc/group和/etc/gshadow 的文件內容來同步或創建/etc/gshadow ,如果/etc/gshadow 不存在則創建;
grpunconv 註:通過/etc/group 和/etc/gshadow 文件內容來同步或創建/etc/group ,然後刪除gshadow文件;

3、/etc/skel 目錄

/etc/skel目錄一般是存放用戶啟動文件的目錄,這個目錄是由root權限控制,當我們添加用戶時,這個目錄下的文件自動復制到新添加的用戶的家目錄下;/etc/skel 目錄下的文件都是隱藏文件,也就是類似.file格式的;我們可通過修改、添加、刪除/etc/skel目錄下的文件,來為用戶提供一個統一、標準的、默認的用戶環境;
[root@localhost beinan]# ls -la /etc/skel/
總用量 92
drwxr-xr-x 3 root root 4096 8月 11 23:32 .
drwxr-xr-x 115 root root 12288 10月 14 13:44 ..
-rw-r--r-- 1 root root 24 5月 11 00:15 .bash_logout
-rw-r--r-- 1 root root 191 5月 11 00:15 .bash_profile
-rw-r--r-- 1 root root 124 5月 11 00:15 .bashrc
-rw-r--r-- 1 root root 5619 2005-03-08 .canna
-rw-r--r-- 1 root root 438 5月 18 15:23 .emacs
-rw-r--r-- 1 root root 120 5月 23 05:18 .gtkrc
drwxr-xr-x 3 root root 4096 8月 11 23:16 .kde
-rw-r--r-- 1 root root 658 2005-01-17 .zshrc

/etc/skel 目錄下的文件,一般是我們用useradd 和adduser 命令添加用戶(user)時,系統自動復制到新添加用戶(user)的家目錄下;如果我們通過修改 /etc/passwd 來添加用戶時,我們可以自己創建用戶的家目錄,然後把/etc/skel 下的文件復制到用戶的家目錄下,然後要用chown 來改變新用戶家目錄的屬主;

4、/etc/login.defs 配置文件

/etc/login.defs 文件是當創建用戶時的一些規劃,比如創建用戶時,是否需要家目錄,UID和GID的範圍;用戶的期限等等,這個文件是可以通過root來定義的;

比如Fedora 的 /etc/logins.defs 文件內容;

# *REQUIRED*
#   Directory where mailboxes reside, _or_ name of file, relative to the
#   home directory.  If you _do_ define both, MAIL_DIR takes precedence.
#   QMAIL_DIR is for Qmail
#
#QMAIL_DIR      Maildir
MAIL_DIR        /var/spool/mail  註:創建用戶時,要在目錄/var/spool/mail中創建一個用戶mail文件;
#MAIL_FILE      .mail

# Password aging controls:
#
#       PASS_MAX_DAYS   Maximum number of days a password may be used.
#       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
#       PASS_MIN_LEN    Minimum acceptable password length.
#       PASS_WARN_AGE   Number of days warning given before a password expires.
#
PASS_MAX_DAYS   99999   註:用戶的密碼最長過期天數;
PASS_MIN_DAYS   5       註:密碼最小過期天數;
PASS_MIN_LEN    5       註:密碼最小長度;
PASS_WARN_AGE   7       註:密碼過期警告天數

#
# Min/max values for automatic uid selection in useradd
#
UID_MIN                   500   註:最小UID為500 ,也就是說添加用戶時,UID 是從500開始的;
UID_MAX                 60000   註:最大UID為60000;

#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN                   500   註:GID 是從500開始;
GID_MAX                 60000

#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD    /usr/sbin/userdel_local

#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is ORed with the -m flag on
# useradd command line.
#
CREATE_HOME     yes   註:是否創用戶家目錄,要求創建;

# The permission mask is initialized to this value. If not specified, 
# the permission mask will be initialized to 022.
UMASK           077

# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512 

5、/etc/default/useradd 文件

通過useradd 添加用戶時的規則文件;

# useradd defaults file
GROUP=100
HOME=/home  註:把用戶的家目錄建在/home中;
INACTIVE=-1  註:是否啟用帳號過期停權,-1表示不啟用;
EXPIRE=   註:帳號終止日期,不設置表示不啟用;
SHELL=/bin/bash  註:所用SHELL的類型;
SKEL=/etc/skel   註: 默認添加用戶的目錄默認文件存放位置;也就是說,當我們用adduser添加用戶時,用戶家目錄下的文件,都是從這個目錄中復制過去的;

三、用戶組的管理

1、創建一個用戶組

命令格式:
groupadd [選項] [用戶組]
選項:
-g :GID 指定新用戶組的組標識號(GID)。
-o :一般與-g選項同時使用,表示新用戶組的GID可以與系統已有用戶組的GID相同。
例1:創建group1,GID會自動在系統已創建的基礎上增加1
# groupadd group1
例2:創建一個新組group2,同時指定新組的組標識號是101。
#groupadd -g 101 group2

2、刪除一個用戶組

命令格式:
groupdel [用戶組]
例:此命令從系統中刪除組group1。
#groupdel group1

3、修改用戶組的屬性

命令格式:
groupmod [選項] [用戶組]
選項:
-g :GID 為用戶組指定新的組標識號。
-o :與-g選項同時使用,用戶組的新GID可以與系統已有用戶組的GID相同。
-n :新用戶組 將用戶組的名字改為新名字
例:此命令將組group2的組標識號修改為102。
# groupmod -g 102 group2
例:此命令將組group2的標識號改為10000,組名修改為group3。
# groupmod –g 10000 -n group3 group2
4、用戶切換用戶組
如果一個用戶同時屬於多個用戶組,那麽用戶可以在用戶組之間切換,以便具有其他用戶組的權限。用戶可以在登錄後,使用命令newgrp切換到其他用戶組,這個命令的參數就是目的用戶組。
例如:
$ newgrp root
這條命令將當前用戶切換到root用戶組,前提條件是root用戶組確實是該用戶的主組或附加組。類似於用戶賬號的管理,用戶組的管理也可以通過集成的系統管理工具來完成。

四、用戶管理

(一),添加用戶

1.命令
useradd或adduser命令用來建立用戶帳號和創建用戶的起始目錄,使用權限是超級用戶。
2.命令格式
  useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name
3.主要參數
  -c:加上備註文字,備註文字保存在passwd的備註欄中。
  -d:指定用戶登入時的主目錄,替換系統默認值/home/<用戶名>
  -D:變更預設值。
  -e:指定賬號的失效日期,日期格式為MM/DD/YY,例如06/30/12。缺省表示永久有效。
  -f:指定在密碼過期後多少天即關閉該賬號。如果為0賬號立即被停用;如果為-1則賬號一直可用。默認值為-1.
  -g:指定用戶所屬的群組。值可以使組名也可以是GID。用戶組必須已經存在的,期默認值為100,即users。
  -G:指定用戶所屬的附加群組。
  -m:自動建立用戶的登入目錄。
  -M:不要自動建立用戶的登入目錄。
  -n:取消建立以用戶名稱為名的群組。
  -r:建立系統賬號。
  -s:指定用戶登入後所使用的shell。默認值為/bin/bash。
  -u:指定用戶ID號。該值在系統中必須是唯一的。0~499默認是保留給系統用戶賬號使用的,所以該值必須大於499。
例:創建用戶tom,沒有登陸權限
# useradd -s /sbin/nologin tom

4.說明
  useradd可用來建立用戶賬號,它和adduser命令是相同的。賬號建好之後,再用passwd設定賬號的密碼。使用useradd命令所建立的賬號,實際上是保存在/etc/passwd文本文件中。

(二)用戶的刪除

命令格式:
userdel [用戶名] #只是刪除用戶名,用戶目錄和郵件賬戶目錄還在
userdel -r [用戶名] #清除用戶的家目錄和郵件目錄

(三)設置用戶密碼

root用戶登陸時執行,如果是當前用戶登陸,passwd回車後按提示設置密碼即可。
1,命令格式:
echo [密碼] | passwd --stdin [用戶名]
例如:新建用戶test,密碼test,另外添加usertest組

#useradd test 
#echo "test" | passwd --stdin test 
#groupadd usertest

2,用戶的密碼文件
用戶修改的密碼信息存在/etc/shadow中,

# sed -n ‘$p‘ /etc/shado`w`
nalex:$6$QCsCA/7/$jsBzKSSoEOFW/.TsFlkJi.nZndkZz3EZ2nOMtpjDk9UInBxY6g76HnuTMgl9GqC0E0WNe.oznUKANMYrZG2FI.:17551:0:99999:7:0:17897:

--用戶名
--密碼
--從1970年1月1日起到上次修改密碼所經過的天數
--密碼再過幾天可以被變更(0表示隨時可以改變)
--密碼再過幾天必須被變更(99999表示永不過期)
--密碼過期前幾天提醒用戶(默認為一周)
--密碼過期幾天後帳號被禁用
--從1970年1月1日算起,多少天後賬號失效

(四)修改用戶屬性
1.用usermod修改用戶屬性
語  法:usermod [參數選項] [用戶帳號]
補充說明:usermod可用來修改用戶帳號的各項設定。
選 項:
-a|--append ##把用戶追加到某些組中,僅與-G選項一起使用
-c|--comment ##修改/etc/passwd文件第五段comment
-d|--home ##修改用戶的家目錄通常和-m選項一起使用
-e|--expiredate ##指定用戶帳號禁用的日期,格式YY-MM-DD
-f|--inactive ##用戶密碼過期多少天後采用就禁用該帳號,0表示密碼一過期就禁用帳號,-1表示禁用此功能,默認值是-1
-g|--gid ##修改用戶的gid,改組一定存在
-G|--groups ##把用戶追加到某些組中,僅與-a選項一起使用
-l|--login ##修改用戶的登錄名稱
-L|--lock ##鎖定用戶的密碼
-m|--move-home ##修改用戶的家目錄通常和-d選項一起使用
-s|--shell ##修改用戶的shell
-u|--uid ##修改用戶的uid,該uid必須唯一
-U|--unlock ##解鎖用戶的密碼
2.示例
1).新建用戶alex,密碼alex,另外添加galex組

#useradd alex
#echo "alex" | passwd --stdin alex 
#groupadd galex 

2).把alex用戶加入galex組
#usermod -aG galex alex #多個組之間用空格隔開

# id alex
uid=1005(alex) gid=1006(alex) 組=1006(alex),1007(galex)

3).修改alex用戶的家目錄為galex

# usermod -md /home/galex alex
# cat /etc/passwd|grep "alex"
alex:x:1005:1006::/home/galex:/bin/bash

4).修改用戶名

# usermod -l nalex alex
# cat /etc/passwd|grep "alex"
nalex:x:1005:1006::/home/galex:/bin/bash

5).鎖定nalex的密碼

# sed -n ‘$p‘ /etc/shadow
nalex:$6$QCsCA/7/$jsBzKSSoEOFW/.TsFlkJi.nZndkZz3EZ2nOMtpjDk9UInBxY6g76HnuTMgl9GqC0E0WNe.oznUKANMYrZG2FI
.:17551:0:99999:7:::
#usermod -L nalex 
# sed -n ‘$p‘ /etc/shadow
nalex:!$6$QCsCA/7/$jsBzKSSoEOFW/.TsFlkJi.nZndkZz3EZ2nOMtpjDk9UInBxY6g76HnuTMgl9GqC0E0WNe.oznUKANMYrZG2FI
.:17551:0:99999:7:::

鎖定後用戶冒號後面會多一個感嘆號“!”
6).解鎖nalex的密碼
#usermod -U nalex
去除用戶後面的感嘆號
7).修改用戶的shell

#sed ‘$!d‘ /etc/passwd 
nalex:x:500:500::/home/usertest:/bin/bash 
#usermod -s /bin/sh nalex 
#sed -n ‘$p‘ /etc/passwd 
nalex:x:500:500::/home/galex:/bin/sh 

8)指定帳號過期日期

# sed -n ‘$p‘ /etc/shadow
nalex:$6$QCsCA/7/$jsBzKSSoEOFW/.TsFlkJi.nZndkZz3EZ2nOMtpjDk9UInBxY6g76HnuTMgl9GqC0E0WNe.oznUKANMYrZG2FI
.:17551:0:99999:7:::
# usermod -e 2019-01-01 nalex
]# sed -n ‘$p‘ /etc/shadow
nalex:$6$QCsCA/7/$jsBzKSSoEOFW/.TsFlkJi.nZndkZz3EZ2nOMtpjDk9UInBxY6g76HnuTMgl9GqC0E0WNe.oznUKANMYrZG2FI
.:17551:0:99999:7::17897:

多了時間限制
9).指定用戶帳號密碼過期多少天後,禁用該帳號

# usermod -f 0 nalex
# sed -n ‘$p‘ /etc/shadow
nalex:$6$QCsCA/7/$jsBzKSSoEOFW/.TsFlkJi.nZndkZz3EZ2nOMtpjDk9UInBxY6g76HnuTMgl9GqC0E0WNe.oznUKANMYrZG2FI
.:17551:0:99999:7:0:17897:

Linux系統的用戶和用戶組管理