點擊返回 自學Linux命令行與Shell腳本之路html
7.1-linux用戶帳戶和組
linux安全系統的核心是用戶帳戶。
每一個能進入linux系統的用戶都會被分配惟一的用戶帳戶,用戶對系統中各對象的訪問權限取決於他們登錄時用的帳戶。
用戶權限是經過建立用戶時分配的用戶ID(UID)來跟蹤的。linux
1. 用戶帳戶
Linux系統使用特定的文件和工具來跟蹤和管理系統上的用戶帳戶,常用的有/etc/passwd /etc/shadow shell
1.1 /etc/passwd 文件
- /etc/passwd文件中的每一個用戶都有一個對應的記錄行,記錄着這個用戶的一下基本屬性
- 該文件對全部用戶可讀
- 該文件內root用戶帳戶是linux系統管理員,固定分配UID爲0
- linux系統爲各式各樣的系統建立不一樣的用戶帳戶,這些帳戶爲系統帳戶,爲這些預留500如下的UID值

解釋一下 carlos:x:1000:1000:yk,,,:/home/carlos:/bin/bash (上面截圖不完整,沒有顯示)ubuntu
- 用戶名(login_name):是表明用戶帳號的字符串。一般長度不超過8個字符,而且由大小寫字母和/或數字組成。
登陸名中不能有冒號(:),由於冒號在這裏是分隔符。爲了兼容起見,登陸名中最好不要包含點字符(.),而且不使用連字符(-)和加號(+)打頭。
- 口令(passwd): 一些系統中,存放着加密後的用戶口令字。雖然這個字段存放的只是用戶口令的加密串,不是明文,可是因爲/etc/passwd文件對全部用戶均可讀,因此這還是一個安全隱患。
所以,如今許多Linux系統(如SVR4)都使用了shadow技術,把真正的加密後的用戶口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一個特殊的字符,例如「x」或者「*」。
- 用戶標識號(UID):是一個整數,系統內部用它來標識用戶。通常狀況下它與用戶名是一一對應的。
若是幾個用戶名對應的用戶標識號是同樣的,系統內部將把它們視爲同一個用戶,可是它們能夠有不一樣的口令、不一樣的主目錄以及不一樣的登陸Shell等。
取值範圍是0-65535。0是超級用戶root的標識號,1-99由系統保留,做爲管理帳號,普通用戶的標識號從100開始。在Linux系統中,這個界限是500。
- 組標識號(GID):字段記錄的是用戶所屬的用戶組。它對應着/etc/group文件中的一條記錄。
- 註釋性描述(users):字段記錄着用戶的一些我的狀況,例如用戶的真實姓名、電話、地址等,這個字段並無什麼實際的用途。
在不一樣的Linux系統中,這個字段的格式並無統一。在許多Linux系統中,這個字段存放的是一段任意的註釋性描述文字,用作finger命令的輸出。
- 主目錄(home_directory):也就是用戶的起始工做目錄,它是用戶在登陸到系統以後所處的目錄。在大多數系統中,各用戶的主目錄都被組織在同一個特定的目錄下,而用戶主目錄的名稱就是該用戶的登陸名。
各用戶對本身的主目錄有讀、寫、執行(搜索)權限,其餘用戶對此目錄的訪問權限則根據具體狀況設置。
- 登陸Shell(Shell):用戶登陸後,要啓動一個進程,負責將用戶的操做傳給內核,這個進程是用戶登陸到系統後運行的命令解釋器或某個特定的程序,即Shell。Shell是用戶與Linux系統之間的接口。
Linux的Shell有許多種,每種都有不一樣的特色。系統管理員能夠根據系統狀況和用戶習慣爲用戶指定某個Shell。若是不指定Shell,那麼系統使用sh爲默認的登陸Shell,即這個字段的值爲/bin/sh。
1.2 /etc/shadow 文件
- 只有root才能訪問/etc/shadow文件
- /etc/shadow文件爲每個用戶帳戶都保存了一條密碼記錄
大部分Linux發行版的默認帳戶是普通用戶,而更改系統文件或者執行某些命令(此時的/etc/shadow文件),須要root身份才能進行,這就須要從當前用戶切換到root用戶,Linux中切換用戶的命令是 su 或 su -
安全
初始化root密碼:
Ubuntu剛安裝後,不能在terminal中運行su命令,由於root沒有默認密碼,須要手動設定。安裝ubuntu時輸入的用戶名登錄,該用戶在admin組中,有權限給root設定密碼.bash
- 打開一個terminal,而後輸入下面的命令 sudo passwd root
- 回車後會出現讓你輸入原始密碼,新密碼和確認密碼,這樣root的密碼設置完畢

這樣才能在terminal中利用su su- 就能夠切換到root用戶了, exit退出root用戶返回原用戶。服務器


- su 只是切換了root身份,但Shell環境仍然是普通用戶的Shell
- su - 連用戶和Shell環境一塊兒切換成root身份了。只有切換了Shell環境纔不會出現PATH環境變量錯誤。
su切換成root用戶之後,pwd一下,發現工做目錄仍然是普通用戶的工做目錄;
su -命令切換之後,工做目錄變成root的工做目錄了。
用echo $PATH命令看一下su和su - 之後的環境變量有何不一樣。以此類推,要從當前用戶切換到其它用戶也同樣,應該使用su -命令。
介紹sudo:工具
因爲su 對切換到超級權限用戶root後,權限的無限制性,因此su並不能擔任多個管理員所管理的系統。若是用su 來切換到超級用戶來管理系統,也不能明確哪些工做是由哪一個管理員進行的操做。特別是對於服務器的管理有多人蔘與管理時,最好是針對每一個管理員的技術特長和 管理範圍,而且有針對性的下放給權限,而且約定其使用哪些工具來完成與其相關的工做,這時咱們就有必要用到 sudo。ui
經過sudo,咱們能把某些超級權限有針對性的下放,而且不須要普通用戶知道root密碼,因此sudo 相對於權限無限制性的su來講,仍是比較安全的,因此sudo 也能被稱爲受限制的su ;另外sudo 是須要受權許可的,因此也被稱爲受權許可的su;加密
sudo 執行命令的流程是當前用戶切換到root(或其它指定切換到的用戶),而後以root(或其它指定的切換到的用戶)身份執行命令,執行完成後,直接退回到當前用戶;而這些的前提是要經過sudo的配置文件/etc/sudoers來進行受權;
如今有權限看/etc/shadow文件:


- 「登陸名」是與/etc/passwd文件中的登陸名相一致的用戶帳號
- 「口令」字段存放的是加密後的用戶口令字:
若是爲空或!,則對應用戶沒有口令,登陸時不須要口令;
*星號表明賬號被鎖定;
!!表示這個密碼已通過期了;
$6$開頭的,代表是用SHA-512加密;
$1$代表是用MD5加密;
$2$ 是用Blowfish加密;
$5$ 是用 SHA-256加密;
- 「最後一次修改時間」表示的是從某個時刻起,到用戶最後一次修改口令時的天數。時間起點對不一樣的系統可能不同。例如在SCOLinux中,這個時間起點是1970年1月1日。
- 「最小時間間隔」指的是兩次修改口令之間所需的最小天數。
- 「最大時間間隔」指的是口令保持有效的最大天數。
- 「警告時間」字段表示的是從系統開始警告用戶到用戶密碼正式失效之間的天數。
- 「不活動時間」表示的是用戶沒有登陸活動但帳號仍能保持有效的最大天數。
- 「失效時間」字段給出的是一個絕對的天數,若是使用了這個字段,那麼就給出相應帳號的生存期。期滿後,該帳號就再也不是一個合法的帳號,也就不能再用來登陸了。
1.3 用戶帳戶操做
Linux 系統中,UID以以下的方式劃分:
- 0 表示管理員(root)
- 1 - 500 表示系統用戶
- 501 - 65535 表示普通用戶
- 不一樣的 Linux 發行版,這些數字可能不同
1.3.1 useradd 命令:添加用戶
- -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。
useradd -D 能夠查看linux系統中默認的值

- 新添加的用戶會被添加到GIQ位100的公共組
- 新添加的用戶HOME目錄在/home
- 新添加的用戶密碼在過時後不會被禁用
- 新添加的用戶未被設置過時時間
- 新添加的用戶將sh做爲默認的shell
- 系統會叫/etc/skel目錄下的內容複製到用戶的HOME目錄下
- 系統爲該用戶帳號在mail目錄下建立一個用於接收郵件的文件

useradd -D 選項後面跟一個指定的值能夠修改系統默認的新用戶的設置,主要有:
- -b 更改新添加的用戶HOME目錄在/home
- -e 更改新添加的用戶過時時間
- -f 更改新添加的用戶從密碼過時到帳號被禁的天數
- -g 更改新添加的用戶的組名稱或者GID
- -s 更改新添加的用戶shell

1.3.2 userdel命令:刪除用戶
- userdel 會修改系統帳戶文件,因此須要root特權來運行它
- 不帶選項使用 userdel,只會刪除/etc/passwd文件中的用戶信息,不會刪除該系統中屬於該帳戶的任何文件
- userdel -r 會刪除用戶的HOME目錄以及郵箱目錄



1.3.3 用戶帳戶修改的命令
- usemod 修改用戶帳戶的字段
基本用法和 useradd 類似,這裏列出須要注意的點
usermod -G GROUPS USERNAME:改變用戶的附加組,會徹底替換原有的附加組
usermod -G -a GROUPS USERNAME:在原有附加組的基礎上追加附加組
usermod -d PATH USERNAME:修改家目錄。修改後原先家目錄中的文件不能訪問了,由於在當前的家目錄中並不存在這些文件。
usermod -l NEWNAME USERNAME:改變用戶名
usermod -e USERNAME:指定該用戶的過時時間
usermod -L USERNAME:鎖定用戶
usermod -U USERNAME:解鎖用戶
- passwd 修改已有用戶的密碼
若是省略用戶名,意味着更改當前登陸用戶的密碼;
若是指定用戶名,更改指定用戶的密碼,只能root使用;
passwd --stdio:標準輸入讀取密碼passwd -l:鎖定用戶帳號(root only)
echo "newpassword" | passwd --stdio MIKE
passwd -u:解鎖用戶帳號(root only)
passwd -d:刪除用戶密碼。用戶密碼刪除後不能登陸。
- chpasswd 從文件中讀取登錄名密碼對,並更新密碼
- change 修改密碼的過時日期
- chfn 修改用戶帳戶的備註信息
chfn USERNAME:修改註釋信息,用來增長用戶的詳細信息,如公司,地址等。能夠由 finger 查看相應的改變。
- chsh 修改用戶帳戶的默認登錄shell
chsh SHELL USERNAME:改變默認 shell
- id 查看賬號屬性
格式: id user1 顯示user1的uid和gid ,缺省爲當前用戶的id信息
真實的ID:在/etc/passwd定義的用戶的UID和GID
有效的ID:當前生效的用戶的UID和GID

2. 組帳戶
- 每一個用戶都有一個用戶組,系統能夠對一個用戶組中的全部用戶進行集中管理
- 不一樣Linux 系統對用戶組的規定有所不一樣,如Linux下的用戶屬於與它同名的用戶組,這個用戶組在建立用戶時同時建立
- 每一個組都有惟一的GID,還有一個惟一的組名
- 用戶組的管理涉及用戶組的添加、刪除和修改。組的增長、刪除和修改實際上就是對/etc/group文件的更新
- 當一個用戶在/etc/passwd文件中指定某個組做爲默認組時,用戶帳戶不會做爲該組成員再出如今/etc/group文件中
2.1 /etc/group 文件

每行組用戶包含4個字段:
2.2 groupadd 建立組
groupadd 選項 用戶組
- -g gid在建立組帳戶的時候,指定組帳戶的GID
若是不使用該選項指定,系統會選擇在組解析文件中出如今的不大於60000最大的GID加1;
- -r 建立系統組,意思就是建立一個GID在1~999(1~499)之間的組;


2.3 groupdel 刪除組

2.4 gorupmod 修改組
- -g gid:修改組帳戶的ID;
- -n :修改組名;


最後備註:若是一個用戶同時屬於多個用戶組,那麼用戶能夠在用戶組之間切換,以便具備其餘用戶組的權限。用戶能夠在登陸後,使用命令newgrp切換到其餘用戶組,這個命令的參數就是目的用戶組。