用戶、組及其管理

用戶和組管理

   Linux是一個多用戶、多任務的操作系統。多用戶、多任務就是可以在系統上建立多個用戶,多個用戶可以在同一時間內登錄同一臺主機的系統執行不同的任務,而互不影響。例如某臺linux服務器上有4個用戶,分別是root、www、ftp和mysql,在同一時間內root用戶可能在管理維護系統,www用戶可能在修改自己的程序和操作,ftp用戶可能在上傳軟件到服務器,mysql用戶可能在執行自己的SQL程序,每個用戶互不干擾的進行自己的操作,而每個用戶之間不能越權訪問,比如www用戶不能執行mysql用戶的SQL程序,ftp用戶也不能修改www用戶的程序,因此不同用戶具有不同的權限,每個用戶是在權限允許的范圍內完成不同的任務,linux正是通過這種權限的劃分與管理,實現了多用戶多任務的運行機制。

Linux的安全模型 

        作為一個安全系統的重要功能之一就是只允許那些授權的用戶登錄該系統,而阻止那些未經授權的用戶登錄(進入)這一系統。,登錄該系統的用戶只能訪問或者操作那些他有權訪問和操作的文件和資源。那么在 Linux 操作系統中又是怎樣做到這些的呢?Linux 操作系統采用了如下的措施:

用戶登錄系統時必須提供用戶名和密碼(用戶是由 root 用戶創建的,最初的密碼也是 root 用戶設定的)。

使用用戶和群組來控制使用者訪問文件和其他資源的權限。 

系統上的每一個文件都一定屬于一個用戶(一般該用戶就是文件的創建者)并與一個群組相關。

每一個進程都會與一個用戶和群組相關聯??梢酝ㄟ^在所有的文件和資源上設定權限來只允許該文件的所有者或者某個群組的成員訪問它們。

資源分派:

 Authentication:認證 (確認身份,登陸系統的用戶名和密碼)

 Authorization:授權 (對于文件或者程序的權限)

 Accouting|Audition:審計 (監控日志)

                

用戶:

管理員:root   UID:0

普通用戶:

      系統用戶:1-499 (centos6)

                       1-999(centos7)    

      系統用戶一般不登錄,都是給后臺進程使用

postfix   27756  0.0  0.0  80976  3396 ?   S  17:46  0:00 pickup -l -t fifo -u

這里的這個進程就是使用系統用戶postfix在后臺運行的。這些用戶使用的是nologin的類型shell

      登錄用戶:500-60000(centos6)

            1000-60000(centos7)

組:

   用戶組是一些用戶的集合,在用戶組里賦予組成員用戶相同的權限。有時我們需要讓多個用戶具有相同的權限,比如查看、修改某一個文件的權限,一種方法是分別對多個用戶進行文件訪問授權,如果有10個用戶的話,就需要授權10次,這樣會很麻煩;另一種方法是建立一個組,讓這個組具有查看、修改此文件的權限,然后將所有需要訪問此文件的用戶放入這個組中,那么所有用戶就具有了和組一樣的權限。這就是用戶組,將用戶分組是Linux 系統中對用戶進行管理及控制訪問權限的一種手段,通過定義用戶組,在很大程度上簡化了管理工作。

 GID:組標識號

管理員組:root, 0

普通組: 

        系統組:1-499(centos6), 1-999(centos7) 

        普通組:500+ ,        1000+

linux 安全上下文:

security context

進程所能夠訪問資源的權限取決于進程的運行者的身份

linux組的類別:

用戶的主要組(主組):

用戶必須屬于一個且只有一個主組 組名同用戶名,且僅包含一個用戶:私有組 (private 私有)

[root@localhost ~]# groups zang
zang : zang

用戶的附加組(輔助組): 一個用戶可以屬于零個或多個輔助組

[root@localhost ~]# groups zang
zang : zang bin
[root@localhost ~]# id zang
uid=500(zang) gid=500(zang) groups=500(zang),1(bin)

123.jpg

用戶和組的配置文件

Linux用戶的配置文件:

       系統用戶配置文件,是用戶管理中最重要的一個文件。這個文件記錄了Linux系統中每個用戶的一些基本屬性,并且對所有用戶可讀。/etc/passwd中每一行記錄對應一個用戶,每行記錄又被冒號分割。

/etc/passwd:用戶及其屬性信息(名稱、UID、主組ID等)

zang:x:500:500::/home/zang:/bin/bash

login name:登錄用(zang)

passwd:密碼 (x)

    我們可以使用pwunconv(密碼不轉換),把密碼顯示在X處 ;使用pwconv(密碼轉換)把密碼放到/ect/shadow中。

UID:用戶身份編號 (500)

GID:登錄默認所在組編號 (500) [用戶的主組]

GECOS:用戶全名或注釋 

home directory:用戶主目錄 (/home/zang) 

shell:用戶默認使用shell (/bin/bash)

注意:第二項(passwd)存放著加密后的用戶口令,雖然這個字段存放的只是用戶口令的加密串,不是明文,但是由于/etc/passwd文件對所有用戶都可讀,所以這仍是一個安全隱患。因此,現在許多Linux 版本都使用了shadow,把真正加密后的用戶口令存放到/etc/shadow文件中,該文件只有root用戶擁有讀權限,從而保證了用戶密碼的安全性。在/etc/passwd文件的口令字段中只存放一個特殊的字符,例如用“x”或者“*”來表示。

下面我們來說一說/etc/shadow

/etc/shadow:用戶密碼及其相關屬性 

shadow文件格式 :

zang:$6$vfI0a6tN$amq4Jm801CJKnbgJsjZ9sL3eahHnUrB3BxpRM50cvjrH6KbEV133EwQyFbjXfbWlKGvbDg8L3LwGNThOsmWkL.:17007:0:99999:7 : : :

用戶名:(zang)

用戶密碼:$6加密算法為sha512加密;第二個$與第三個$之間,我們通常稱為salt;第三個$之后為加密的密碼

密碼最后更改日期:從1970年1月1日起到密碼最近一次被更改的時間 

最小時間間隔:密碼再過幾天可以被變更(0表示隨時可被變更)

最長密碼使用期限:密碼再過幾天必須被變更(99999表示永不過期)

密碼警告期限:密碼過期前幾天系統提醒用戶(默認為一周)

密碼非活動期限:密碼過期幾天后帳號會被鎖定

失效時間:從1970年1月1日算起,多少天后帳號失效。

保留字段:這個字段留作以后使用。

1234.png

補充知識:密碼加密

加密機制: 

加密:明文–> 密文 

解密:密文–> 明文

單向加密:哈希算法,原文不同,密文必不同 

相同算法定長輸出,獲得密文不可逆推出原始數據

雪崩效應:初始條件的微小改變,引起結果的巨大改變 

如下面的例子:

我們把zang用戶與zanghl用戶的密碼設置為相同的密碼centos

[root@localhost ~]# echo centos | passwd --stdin zang
Changing password for user zang.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# echo centos | passwd --stdin zanghl
Changing password for user zanghl.
passwd: all authentication tokens updated successfully.

查看配置文件:

[root@localhost ~]# getent shadow zang
zang:$6$CIZ.tGks$AZfFMfmNQQ6rfQ7XMIZolX4Awp6CCSmJ8oNUE7xvNuaX7MAqyzx5/dvP/WszEgECpQOiUN.o.BZ..h1ZsMdo/0:17007:0:99999:7:::
[root@localhost ~]# getent shadow zanghl
zanghl:$6$wpSq8G7i$QMqWoPxyjymeuvy9a0l5B4p8LxFgzAOoiiNAYetFLTrMg/ox7XYB3roVseGzA3hhfYUNdglEplzh8m/s4T4E90:17007:0:99999:7:::

這里我們看到加密時加入的salt并不相同,所以我們說初始條件的微小改變,引起結果的巨大改變。

加密算法:

md5: message digest, 128bits 

sha1: secure hash algorithm, 160bits 

sha224: 224bits 

sha256: 256bits 

sha384: 384bits 

sha512: 512bits

更改加密算法 authconfig –passalgo=sha256 –update

[root@localhost ~]# cat /etc/login.defs 
...
ENCRYPT_METHOD SHA256

密碼加密算法保存在:/etc/login.defs 

/etc/login.defs儲存的是建立用戶時用戶的必要信息。

Linux組的配置文件:

/etc/group:組及其屬性信息 

[root@localhost ~]# getent group zang

zang:x:500:

群組名稱:群組名稱(zang) 

群組密碼: x (存放在/etc/gshadow) 

組管理員列表:組管理員的列表,更改組密碼和成員 

以當前組為附加組的用戶列表:(分隔符為逗號)

/etc/gshadow:組密碼及其相關屬性

群組名稱:

加密的密碼:

管理員:可以對組成員進行調整。

群組成員

注意:

系統用戶的家目錄和郵箱不會自動創建。

用戶添加新的組成員,用戶必須重新登陸之后才能獲取組成員關系信息。

如果組沒有組密碼其他用戶無法加入該群組。

newgrp:臨時切換主組

如果創建一個文件,想要這個文件有其他組的權限,可以臨時切換主組,之后再創建文件

[zanghl@localhost ~]$ ll
total 0
-rw-rw-r-- 1 zanghl zanghl 0 Jul 26 00:56 f1
-rw-rw-r-- 1 zanghl zanghl 0 Jul 26 00:58 f2
-rw-rw-r-- 1 zanghl zanghl 0 Jul 26 00:59 f3
[zanghl@localhost ~]$ newgrp zang
Password: 
[zanghl@localhost ~]$ touch f5
[zanghl@localhost ~]$ ll
total 0
-rw-rw-r-- 1 zanghl zanghl 0 Jul 26 00:56 f1
-rw-rw-r-- 1 zanghl zanghl 0 Jul 26 00:58 f2
-rw-rw-r-- 1 zanghl zanghl 0 Jul 26 00:59 f3
-rw-r--r-- 1 zanghl zang   0 Jul 26 01:00 f5

用戶和組管理命令:

useradd:添加用戶或更改用戶默認信息

-u UID: [UID_MIN, UID_MAX]定義在/etc/login.defs 

示例:

[root@localhost ~]# useradd -u 10000 zz
[root@localhost ~]# getent passwd zz
zz:x:10000:10000::/home/zz:/bin/bash

-o 配合-u 選項,不檢查UID的唯一性 

[root@localhost ~]# useradd -ou 10000 zz1
[root@localhost ~]# cat /etc/passwd
...
zz:x:10000:10000::/home/zz:/bin/bash
zz1:x:10000:10001::/home/zz1:/bin/bash

之前創建了一個指定UID為10000的用戶zz,用 -ou選項在此創建一個zz1用戶也指定

用戶的UID為10000。

-g GID:指明用戶所屬基本組,可為組名,也可以GID

[root@localhost ~]# useradd -g 501 zz2
[root@localhost ~]# cat /etc/passwd
...
zanghl:x:501:501::/home/zanghl:/bin/bash
zz:x:10000:10000::/home/zz:/bin/bash
zz1:x:10000:10001::/home/zz1:/bin/bash
zz2:x:10001:501::/home/zz2:/bin/bash

-c "COMMENT":用戶的注釋信息 

[root@localhost skel]# useradd -c "dsadsada" zz67
[root@localhost skel]# getent passwd zz67
zz67:x:10003:10003:dsadsada:/home/zz67:/bin/bash

-d HOME_DIR: 以指定的路徑(不存在)為家目錄 

[root@localhost ~]# useradd -d /test zz3
[root@localhost ~]# getent passwd zz3
zz3:x:10002:10002::/test:/bin/bash

默認家目錄的基本文件/etc/skel/

指定路徑為家目錄創建用戶后,默認從/etc/skel/ 中復制文件到指定的家目錄中。

-s SHELL: 指明用戶的默認shell程序 可用列表在/etc/shells文件中 

-G GROUP1[,GROUP2,…]:為用戶指明附加組,組必須事先存在

-N 不創建私用組做主組,使用users組做主組 

-r: 創建系統用戶 CentOS 6: ID<500,CentOS 7: ID<1000

默認值設定:/etc/default/useradd文件中 

顯示或更改默認設置: useradd -D 

[root@localhost ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

[root@localhost ~]# useradd -D -s SHELL

刪除用戶

userdel [OPTION]… login 

-r: 刪除用戶家目錄;

查看用戶相關的ID信息 

id [OPTION]… [USER] 

-u: UID 顯示用戶的UID。

-g: GID 顯示用戶的GID。

-G: Groups 顯示用戶所有的組的GID。

-n: Name 與-ugG一起使用,顯示名稱。

[root@localhost test]# id -u zz1
10000
[root@localhost test]# id -g zz1
10001
[root@localhost test]# id -G zz1
10001 10000
[root@localhost test]# id -nu zz1
zz

設置密碼

passwd [OPTIONS] UserName: 修改指定用戶的密碼,僅 root用戶權限 

passwd: 修改自己的密碼;  

常用選項: 

-l:鎖定指定用戶 

-u:解鎖指定用戶 

-e:強制用戶下次登錄修改密碼 

-n mindays: 指定最短使用期限 

-x maxdays:最大使用期限 

-w warndays:提前多少天開始警告 

-i inactivedays:非活動期限; 

–stdin:從標準輸入接收用戶密碼; 

  echo "PASSWORD" | passwd –stdin USERNAME

用戶屬性修改

usermod [OPTION] login 

-u UID: 新UID 

-g GID: 新基本組 

-G GROUP1[,GROUP2,…[,GROUPN]]]:新附加組,原來的附加 組將會被覆蓋;若保留原有,則要同時使用-a選項,表示append; 

-s SHELL:新的默認SHELL; 

-c 'COMMENT':新的注釋信息; 

-d HOME: 新家目錄不會自動創建,原家目錄中的文件不會同時移 動至新的家目錄;若要創建新家目錄并移動原家數據,同時使用-m選項 

-l login_name: 新的名字; 

-L: lock指定用戶,在/etc/shadow 密碼欄的增加 ! 

-U: unlock指定用戶,將 /etc/shadow 密碼欄的 ! 拿掉 

-e YYYY-MM-DD: 指明用戶賬號過期日期; 

-f INACTIVE: 設定非活動期限;

修改用戶密碼策略

chage [OPTION]… LOGIN 

-d LAST_DAY 

-E, –expiredate EXPIRE_DATE 

-I, –inactive INACTIVE 

-m, –mindays MIN_DAYS 

-M, –maxdays MAX_DAYS 

-W, –warndays WARN_DAYS 

–l,顯示密碼策略 ? 

下一次登錄強制重設密碼 

chage -d 0 tom

設置用戶zzz

[root@localhost ~]# chage zzz
Changing the aging information for zzz
Enter the new value, or press ENTER for the default
  Minimum Password Age [0]: 
  Maximum Password Age [99999]: 42
  Last Password Change (YYYY-MM-DD) [2016-07-25]: 
  Password Expiration Warning [7]: 
  Password Inactive [-1]: 5
  Account Expiration Date (YYYY-MM-DD) [-1]: 2016-12-12

chfn 指定個人信息

[root@localhost test]# chfn zz1
Changing finger information for zz1.
Name []: zanghl
Office []: 1 
Office Phone []: 010111
Home Phone []: 1821211

chsh 指定shell

[root@localhost test]# chsh zz1
Changing shell for zz1.
New shell [/bin/bash]: /bin/csh
Shell changed.
[root@localhost test]# getent passwd zz1
zz1:x:10000:10001:zanghl,1,010111,1821211:/home/zz1:/bin/csh

finger

[root@localhost test]# finger zz1
Login: zz1                      Name: zanghl
Directory: /home/zz1                    Shell: /bin/bash
Office: 1, 010111           Home Phone: 182-1211
Never logged in.
No mail.
No Plan.

切換用戶或以其他用戶身份執行命令

su

su [options…] [-] [user [args…]]  

切換用戶的方式: su UserName:非登錄式切換,即不會讀取目標用戶的 配置文件,不改變當前工作目錄 

su – UserName:登錄式切換,會讀取目標用戶的配置 文件,切換至家目錄,完全切換

root su至其他用戶無須密碼;非root用戶切換時需要密碼 

 

換個身份執行命令: su [-] UserName -c 'COMMAND' 

選項:-l  –login: 

su -l UserName 相當于 su – UserName

不完全切換保留之前用戶的工作環境

[zzz@localhost ~]$ su root -c 'cat /etc/issue'
Password: 
CentOS release 6.8 (Final)
Kernel \r on an \m
Mage Education Learning Services

設置密碼

passwd [OPTIONS] UserName: 修改指定用戶的密碼,僅 root用戶權限 

passwd: 修改自己的密碼;

 

常用選項: 

-l:鎖定指定用戶 

-u:解鎖指定用戶 

-e:強制用戶下次登錄修改密碼 

-n mindays: 指定最短使用期限 

-x maxdays:最大使用期限 

-w warndays:提前多少天開始警告 

-i inactivedays:非活動期限;

–stdin:從標準輸入接收用戶密碼; 

echo "PASSWORD" | passwd –stdin USERNAME

創建組

groupadd [OPTION]… group_name 

-g GID: 指明GID號;[GID_MIN, GID_MAX]

[root@localhost ~]# getent group free
free:x:2016:

-r: 創建系統組; 

CentOS 6: ID<500   CentOS 7: ID<1000

修改和刪除組

組屬性修改:groupmod groupmod [OPTION]… group 

-n group_name: 新名字

-g GID: 新的GID

[root@localhost ~]# groupmod -g 2017 -n freed free
[root@localhost ~]# getent group freed
freed:x:2017:

組刪除:

groupdel 

groupdel GROUP

更改組密碼

組密碼:gpasswd 

gpasswd [OPTION] GROUP 

-a user: 將user添加至指定組中;(下面有舉例)

-d user: 從指定組中移除用戶user 

[root@localhost ~]# id user2
uid=503(user2) gid=504(user2) groups=504(user2),1(bin)
[root@localhost ~]# gpasswd -d user2 bin
Removing user user2 from group bin
[root@localhost ~]# id user2
uid=503(user2) gid=504(user2) groups=504(user2)

-A user1,user2,…: 設置有管理權限的用戶列表 (添加組管理員)

newgrp命令:臨時切換基本組; 

如果用戶本不屬于此組,則需要組密碼

[root@localhost ~]# id user2
uid=503(user2) gid=504(user2) groups=504(user2),505(free)
[user2@localhost ~]$ ll
total 0
-rw-rw-r-- 1 user2 user2 0 Aug  3 21:27 user2file
[user2@localhost ~]$ newgrp free user2
[user2@localhost ~]$ touch user2file3
[user2@localhost ~]$ ll
total 0
-rw-rw-r-- 1 user2 user2 0 Aug  3 21:27 user2file
-rw-r--r-- 1 user2 free  0 Aug  3 21:29 user2file3

更改和查看組成員

groupmems [options] [action] 

options: 

-g, –group groupname 更改為指定組 (只有root) 

Actions: 

-a, –add username    指定用戶加入組 

-d, –delete username 從組中刪除用戶

[root@localhost ~]# getent group free
free:x:505:user2,user1,zzz
[root@localhost ~]# groupmems -g free -d zzz
[root@localhost ~]# getent group free
free:x:505:user2,user1

-p, –purge           從組中清除所有成員

-l, –list            顯示組成員列表 

[root@localhost ~]# groupmems -g free -l
user2

groups [OPTION].[USERNAME]… 查看用戶所屬組列表

[root@localhost ~]# groups  user1
user1 : bin free

添加用戶附加組:

[root@localhost home]# groupmems -g bin -a user1
[root@localhost home]# id user1
uid=502(user1) gid=505(user1) groups=505(user1),1(bin)
[root@localhost home]# usermod -aG user2 user1
[root@localhost home]# id user1
uid=502(user1) gid=505(user1) groups=505(user1),1(bin),506(user2)
[root@localhost home]# gpasswd -a user1 user3
Adding user user1 to group user3
[root@localhost home]# id user1
uid=502(user1) gid=505(user1) groups=505(user1),1(bin),506(user2),507(user3)

原創文章,作者:zanghonglei,如若轉載,請注明出處:http://www.www58058.com/28385

(0)
zanghongleizanghonglei
上一篇 2016-08-04
下一篇 2016-08-04

相關推薦

  • 馬哥教育網絡班21期+第13周課程練習

    1、建立samba共享,共享目錄為/data,要求:(描述完整的過程) 1)共享名為shared,工作組為magedu; 2)添加組develop,添加用戶gentoo,centos和ubuntu,其中gentoo和centos以develop為附加組,ubuntu不屬于develop組;密碼均為用戶名; 3)添加samba用戶gentoo,centos和u…

    Linux干貨 2016-10-17
  • Linux包管理:rpm/yum/編譯安裝

    rpm:安裝,查詢,升級,校驗,卸載   Topic: 程序包 rpm管理 yum管理   程序包:   什么是程序包管理器: 將編譯好的應用程序的各個組成文件打包成一個或幾個程序包文件,從而更方便地實現程序包的安裝、升級、卸載和查詢等管理操作   程序包的組成清單: 文件清單 安裝或卸載時運行的腳本 數據庫(公共) …

    2017-09-14
  • linux基礎之磁盤管理

    linux基礎之磁盤管理 學習linux,數據維護和管理是重中之重,而數據大部分存放在硬盤當中,因此,熟練掌握磁盤的使用和管理是運維人員的基礎要求。那么,linux系統包括哪些知識點呢? 下面,我們就詳細闡述下Linux中磁盤的分區、格式化,以及一些磁盤的高級用法:磁盤配額、RAID陣列和LVM 一、硬盤 隨著技術的進步,人類社會的不斷發展。硬盤也經歷了幾代…

    Linux干貨 2017-03-19
  • bash通配符和正則表達式元字符部分歸納

    Linux中有各種各樣的字符,而且在不同環境和不同命令之下含義也不同 作為新手,決定先歸納學到的符號,方便后面學習厘清它們之間的關系。 glob 簡化了的正則表達式 bash默認通配符: ? :只匹配一個任意字符; * :匹配零個或多個任意字符;   [^] :方括號及其中^中的取反 [abc]:匹配任何一個列在方括號中的字符(這個例子要么匹配一個…

    Linux干貨 2016-04-11
  • Linux發展歷史與基礎知識

    工具: 億圖 CRT 思維圖工具-Dream VPS-搬瓦工,亞馬遜云,阿里云 網站: 阿里云-help.aliyun.com 企業新聞-36kr.com lnmp.org-如何配置web服務 中關村在線-zol.com:看服務器設備 計算機組成: 硬件,軟件。 CPU類型 ·x86 ·x64 ·ARM ·m68k(moto) ·power ·Ultrasp…

    Linux干貨 2017-03-26

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-04 15:50

    寫的不錯,如果能將選項縮進看起來會更直觀哦。

欧美性久久久久