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

Linux 用戶和用戶組管理

最大 修改root密碼 用戶模式 登錄用戶 運行程序 用戶界面 -- top fis

Linux和其他的類UNIX系統一樣是一個多用戶、多任務的操作系統。多用戶的特性允許多人在Linux中創建獨立的賬戶來確保個人數據的安全性。而多任務機制允許多個用戶同時登陸,同時使用系統的軟硬件資源。
在Linux操作系統中,每一個用戶都有一個唯一的身份標識,稱為用戶ID(UID)。每一個用戶至少屬於一個用戶組。用戶組是由系統管理員創建,由多個用戶組成的用戶群體。每一個用戶組也有一個唯一的身份標識,稱為用戶組IDL(GID)。不同的用戶和用戶組對系統擁有不同的權限。對文件或目錄的訪問,以及對程序的執行都需要調用者擁有相符合的身份,同時一個正被執行的程序也相應的繼承了調用者的所有權限。
Linux用戶被劃分為兩類:一類是根用戶(root用戶),也稱為超級用戶;另一類是普通用戶。根用戶是系統的所有者,對系統擁有最高的權力,可以對所有文件、目錄進行訪問,可以執行系統中所有程序而不管文件、目錄和程序的所有者的同意與否。普通用戶的權限由系統管理員創建時賦予。普通用戶通常只能管理屬於自己的主文件,或者組內共享及完全共享的文件。根用戶與windows系統中的administrator地位相當,但根用戶在Linux系統中是唯一的,且不允許重新命名。
普通用戶管理:包括添加新用戶、刪除用戶、修改用戶屬性以及對現有用戶的訪問參數進行設置。與此密切相關的文件包括/etc/passwd、/etc/shadow以及/home目錄下的文件。

添加新用戶:

1.設置用戶名稱及密碼
2.設置用戶的UID。系統在 /etc/passwd文件中查找目前使用的大於或等於500的UID的最大編號,加1後賦予當前的新用戶;若目前還沒有大於500的編號,則將500賦予該用戶。
3.添加該新用戶所屬的用戶組。每一個用戶都會屬於一個或多個用戶組。系統在添加新用戶時默認添加的用戶組與心用戶名相同,同時會賦予該用戶組一個GID,通常GID的編號與UID的編號相同。
4.創建以新用戶的用戶名為名稱的主目錄。在大多數的系統中,用戶的主目錄都被創建在一個特定的目錄下,例如/home。各用戶對自己的主目錄有完全的讀、寫執行權限,其他用戶只能依據該目錄的權限設置進行訪問。
5.設定用戶的shell環境,默認是/bin/bash。
6.設定用戶的失效時間,默認是99999天後。
7.設定失效前發出警告的天數,默認是失效前7天。

1.作用
useradd命令用來建立用戶帳號和創建用戶的起始目錄,使用權限是終極用戶。
2.格式

useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name 

3.主要參數

-c:加上備註文字,備註文字保存在passwd的備註欄中。 
-d:指定用戶登入時的啟始目錄。 
-D:變更預設值。 
-e:指定賬號的有效期限,缺省表示永久有效。 
-f:指定在密碼過期後多少天即關閉該賬號。 
-g:指定用戶所屬的起始群組。 
-G:指定用戶所屬的附加群組。 
-m:自動建立用戶的登入目錄。 
-M:不要自動建立用戶的登入目錄。 
-N:取消建立以用戶名稱為名的群組。 
-r:建立系統賬號。 
-s:指定用戶登入後所使用的shell。 
-u:指定用戶ID號。 

4.說明

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

例:添加一個新用戶student2,UID為502,用戶組ID100(users用戶組的ID是100),用戶目錄為/home/student2,用戶默認shell為/bin/bash,賬戶失效日期為2017年6月25日,則其命令為:

[[email protected] etc]$ sudo useradd student2 -u 502 -d /home/student2 -s /bin/bash -e 2017/06/25 -g 100
[sudo] password for walt740: 
[[email protected] etc]$ id student2
uid=502(student2) gid=100(users) groups=100(users)
[[email protected] etc]$ 

顯示/etc/passwd文件最後一行

[[email protected] etc]$ tail -1 /etc/passwd
student2:x:502:100::/home/student2:/bin/bash

顯示/etc/shadow文件最後一行

[[email protected] etc]$ sudo tail -1 /etc/shadow
student2:!!:17342:0:99999:7::17342:

解析/etc/passwd文件
passwd文件存儲著用戶的相關信息,包括用戶名、密碼和主目錄位置等。根用戶對該文件有讀和寫的權限,普通用戶只有讀權限。Linux2.0以上版本為了增強系統的安全性,采用了用戶基本信息與密碼分開存儲的方法,密碼已不再存放在/etc/passwd文件中,而是轉存到了同目錄下的/etc/shadow文件中,其原來存放密碼的位置用“x”標識來表示。
格式如下:username:encypted password:UID:GID:full name:home directory:login shell

[[email protected] etc]$ sudo cat  /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
walt740:x:1000:1000:Walt740:/home/walt740:/bin/bash
binbinstory:x:1001:1001:CentOS 7:/home/binbinstory:/bin/bash
mike:x:1002:1001::/home/mike:/bin/bash
john:x:1003:1003::/home/john:/bin/bash
student2:x:502:100::/home/student2:/bin/bash

用戶名:密碼:UID:GID:註釋:用戶家目錄:用戶的shell

用戶名是用戶在系統中的標識,通常長度不超過8位,由字母,數字,下劃線或句點組成。
密碼:該字段存放加密後的用戶密碼。由於現在的系統大多采用shadow技術,該字段通常只存放一個特殊字“x”真正的密碼已經轉移到/etc/shadow文件中。
如果該字段的第一個字符為#則表示該用戶已被停用,即系統暫時不再允許該用戶登錄,但該用戶的用戶信息和相應的主目錄及屬主文件仍保存在系統中,並沒有被系統刪除。
用戶表示號:UID是用戶在系統中的唯一標識,必須是整數,通常和用戶名一一對應。當有多個用戶名對應同一個UID時,系統會把他們視為同一個用戶。UID的取值範圍是0~65535 0~499一般由系統自己保留,其中0由根用戶占用,新增用戶的UID和GID需要大於或等於500。
用戶組標識號:GID該字段記錄用戶所屬的用戶組。用戶組的具體定義可以查看/etc/group文件。
登陸目錄:該目錄是用戶登陸系統後的默認目錄,通常就是用戶的主目錄,一般在/home下。根用戶登陸系統默認的登陸目錄是/root。
登陸shell:用戶以文本方式登陸系統後需要啟動一個shell進程。shell是用戶和linux內核之間的接口程序,負責將用戶的操作傳遞給內核,所以shell通常也被稱為命令解釋器。在linux系統中有多種shell可以使用,各shell之間略有差別,常用的包括sh(Bourne Shell)、csh(C Shell)、ksh(Korn Shell)、tcsh(TENEX/TOPS-20 type C Shell)和bash(Bourne Again Shell)等。其中C Shell可以提供方便的用戶界面設計,語法與C語言很相似,而Korn Shell兼有C Shell和Bourne Again Shell的優點。

解析/etc/shadow文件
由於普通用戶可以讀取/etc/passwd文件,因此密碼直接保存在該文件中是極不安全的,很可能被別有用心的人獲取並破譯。目前的操作系統在密碼保護方面大多采用了Shadow Passwords及MD5口令保護功能。Shadow Passwords技術,即影子密碼,是將加密的口令放在另一個文件/etc/shadow文件中,並對/etc/shadow文件設置嚴格的權限,只有根用戶可以讀取該文件。
格式如下:
username:Encypted password:Number of days:Minimum password life:Maximum password life:Warning period:Disable account:Account expiration:Reserver

[[email protected] etc]$ sudo cat /etc/shadow
[sudo] password for walt740: 
root:$1$9R0c2mqO$KJGbhx/3v6Fis4WipueAZ1::0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
walt740:$6$PHDHNywteyX2kjUf$jAiVk.oc8h/LYgAQzko5zYHdJ/3mN6Na44RLwYJZMEOJqgrdbppgdA7F/8/CxWQfo4AB4v2X3o1M95tAAs7yq.::0:99999:7:::
binbinstory:$1$9R0c2mqO$KJGbhx/3v6Fis4WipueAZ1:17318:0:99999:7:::
mike:$1$DxXVjHIM$tnpvQ3ajJGkIibltVAhlW1:17342:0:99999:7:::
john:!!:17342:0:99999:7:::
student2:!!:17342:0:99999:7::17342:

每個用戶占一行,一行9個字段,前八個字段分別表示用戶名、密碼、從1970年到上次修改密碼的天數,密碼必須連續使用的天數、密碼有效期、密碼失效前警告的天數、從密碼過期到徹底停用的天數、賬號失效日期,最後一段作為保留字段。

username:用戶的登錄名
Encypted password:已加密的密碼 密後的密碼。如果密碼是“*”或“!”,則表示不會用這個帳號來登錄(通常是一些後臺進程)
Number of days:從1970年1.1到上次修改密碼的天數
Minimum password life:至少在設定天數內密碼是不能修改的,可設置為0
Maximum password life:在設定的天數之後必須修改密碼
Warning period:在密碼失效前,提前提醒用戶密碼即將失效的天數
Disable account:設定密碼過期之後,如果該賬號仍沒有被使用,則停用該賬號的天數
Account expiration:設定賬號失效的時間。如果到這個時間還沒有使用該賬號,用戶將不能以該賬號身份登陸。時間的格式為YYYY-MM-DD,也可以是距離1970年1.1的天數
Reserver:系統保留

修改用戶

修改用戶的賬號:修改用戶的賬號包括更改用戶的用戶名、密碼、主目錄、所屬用戶組和登陸shell等信息。
1.修改用戶基本信息usermod命令

 -c<備註>  修改用戶帳號的備註文字。 
 -d登入目錄>  修改用戶登入時的目錄。 加-m命令會將原文件夾中的文件轉移到新文件裏。 
 -e<有效期限>  修改帳號的有效期。格式為YYYY-MM-DD. 
 -f<緩沖天數>  修改在密碼過期後多少天即關閉該帳號。 
 -g<群組>  修改用戶所屬的群組。 
 -G<群組>  修改用戶所屬的附加群組。 
 -l<帳號名稱>  修改用戶帳號名稱。 
 -L  鎖定用戶密碼,使密碼無效。 
 -s  修改用戶登入後所使用的shell。 
 -u  修改用戶ID。 
 -U  解除密碼鎖定。

usermod 不 允 許 你 改 變 正 在線 上 的 使 用 者 帳 號 名 稱 。 當 usermod 用 來 改 變 user ID, 必 須 確 認 這 名 user 沒 在 電 腦 上 執 行 任 何 程 序。(暫時還理解不了: 你 需 手 動 更 改 使 用 者 的 crontab 檔 。 也 需 手 動 更 改 使 用 者 的 at 工 作 檔 。 采 用 NIS server 須 在 server 上 更 動 相 關 的 NIS 設 定 。 )
應用舉例:
1、將 newuser2 添加到組 staff 中

usermod -g staff newuser2 

2、修改 newuser 的用戶名為 newuser1

usermod -l newuser1 newuser 

3、鎖定賬號 newuser1

usermod -L newuser1 

4、解除對 newuser1 的鎖定

usermod -U newuser1

修改用戶密碼

passwd 作為普通用戶和超級權限用戶都可以運行,但作為普通用戶只能更改自己的用戶密碼,但前提是沒有被root用戶鎖定;如果root用戶運行passwd ,可以設置或修改任何用戶的密碼;

passwd 命令後面不接任何參數或用戶名,則表示修改當前用戶的密碼;請看下面的例子;

[[email protected] ~]# passwd 註:沒有加任何用戶,我是用root用戶來執行的passwd 表示修改root用戶的密碼;下面也有提示; 
Changing password for user root. 
New UNIX password: 註:請輸入新密碼; 
Retype new UNIX password: 註:驗證新密碼; 
passwd: all authentication tokens updated successfully. 註:修改root密碼成功;

如果是普通用戶執行passwd 只能修改自己的密碼;

如果新建用戶後,要為新用戶創建密碼,則用 passwd 用戶名 ,註意要以root用戶的權限來創建;

[[email protected] ~]# passwd beinan 註:更改或創建beinan用戶的密碼; 
Changing password for user beinan. 
New UNIX password: 註:請輸入新密碼; 
Retype new UNIX password: 註:再輸入一次; 
passwd: all authentication tokens updated successfully. 註:成功;

普通用戶如果想更改自己的密碼,直接運行passwd即可;比如當前操作的用戶是beinan;

[[email protected] ~]$ passwd 
Changing password for user beinan. 註:更改beinan用戶的密碼; 
(current) UNIX password: 註:請輸入當前密碼; 
New UNIX password: 註:請輸入新密碼; 
Retype new UNIX password: 註:確認新密碼; 
passwd: all authentication tokens updated successfully. 註:更改成功;

2、passwd 幾個比較重要的參數;

[[email protected] beinan]# passwd –help 
Usage: passwd [OPTION…] 
-k, –keep-tokens keep non-expired authentication tokens 註:保留即將過期的用戶在期滿後能仍能使用; 
-d, –delete delete the password for the named account (root only) 註:刪除用戶密碼,僅能以root權限操作; 
-l, –lock lock the named account (root only) 註:鎖住用戶無權更改其密碼,僅能通過root權限操作;
-u, –unlock unlock the named account (root only) 註:解除鎖定; 
-f, –force force operation 註:強制操作;僅root權限才能操作; 
-x, –maximum=DAYS maximum password lifetime (root only) 註:兩次密碼修正的最大天數,後面接數字;僅能root權限操作; 
-n, –minimum=DAYS minimum password lifetime (root only) 註:兩次密碼修改的最小天數,後面接數字,僅能root權限操作; 
-w, –warning=DAYS number of days warning users receives before  password expiration (root only)  註:在距多少天提醒用戶修改密碼;僅能root權限操作; 
-i, –inactive=DAYS number of days after password expiration when an account becomes disabled (root only)  註:在密碼過期後多少天,用戶被禁掉,僅能以root操作; 
-S, –status report password status on the named account (root only) 註:查詢用戶的密碼狀態,僅能root用戶操作; 
–stdin read new tokens from stdin (root only)

刪除用戶

userdel -r [username]
執行前需要查看是否在線運行程序以及是否有定時任務
查詢方法

#ps -aux | grep "student"
student 4001 0.0 0.5 4712 666 ? s 12:15 0:00 stidentproc

#crontab -u student -r

用戶的臨時禁用
可以在passwd文件用戶名前加#或在shadow文件密碼字段前加*或!

所有選項的默認配置在/etc/login.defs文件裏

根用戶管理
密碼修改同樣使用passwd命令
普通用戶切換root
使用su命令 臨時切換至root權限
使用完畢可使用exit命令退出root
也可以使用su切換至其他用戶

當忘記root密碼時可以進入單用戶模式進行修改,也可以使用光盤掛在/mnt/sysimage目錄下刪除shadow文件中的密碼部分。

用戶組的管理

添加新用戶組

groupadd 
-g:指定新建工作組的id,默認從大於499中選取; 
-r:創建系統工作組,系統工作組的組ID小於500; 
-o:允許添加組ID號不唯一的工作組。 
-f:加入已經有的組時,系統會出現錯誤信息然後退出groupadd。
#groupadd -g 502 student

修改用戶組屬性

groupmod 
-g <群組識別碼>  設置欲使用的群組識別碼。 
-o 重復使用群組識別碼。 
-n <新群組名稱>  設置欲使用的群組名稱。
#groupmod -g 550 -n director student

一個用戶在多個用戶組間切換

newgrp [-] [group]

刪除用戶組
groupdel 必須在所有用戶都退出的情況下才能刪除組。

解析/etc/group文件
Group_name:用戶組的名稱
Encrypted_password:用戶的密碼,用x代替
GID:用戶組標識
User_list:組成員列表

[[email protected] etc]$ cat ./group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:walt740
walt740:x:1000:walt740,mike
binbinstory:x:1001:mike
newgroup:x:1002:
john:x:1003:mike

解析/etc/gshadow文件

[[email protected] etc]$ sudo cat /etc/gshadow
[sudo] password for mike: 
root:::
bin:::
daemon:::
sys:::
adm:::
tty:::
disk:::
lp:::
mem:::
kmem:::
wheel:::walt740
tcpdump:!::
walt740:!!::walt740,mike
binbinstory:!::mike
newgroup:!::
john:!::mike

Group_name:用戶組名稱
Encrypted_password:用戶組的密碼,該字段用於保存加密後的用戶組密碼
Group administrators:用戶組的管理員賬號
User_list:組成員列表

使用chage命令查詢賬戶有效期 一般用-l命令

who命令查詢登陸用戶
last查詢最近用戶登錄時間

賬號管理命令
1.id命令
用於顯示用戶當前UID,GID和用戶所屬的組的列表
2.whoami命令
用於顯示當前用戶的名稱
3.groups命令
用於顯示指定用戶所屬的用戶組,如果未指定則顯示當前用戶所屬的組
4.newgrp命令
用於切換分組
5.finger命令
用於查找並顯示用戶信息。
6.who命令
顯示當前登錄用戶的用戶名,登陸終端,登陸時間以及登陸地址
7.w命令
用於顯示當前登陸的所有用戶的信息。
8.cnfin命令
修改用戶的基本信息。執行該命令系統會進入交互模式,依次詢問用戶的真實姓名、住址、辦公電話和家庭電話。
9.write命令
使用write命令,可以將信息實時傳遞給登陸的用戶或終端。通過在命令行指定用戶或終端可以控制信息發往何處。不帶任何選項可以將信息發給所有登陸用戶。

用戶創建共享目錄
例:項目組成員s1.s2.s3需要創建一個公共目錄用於存放項目開發中的文件。可以將這些用戶組織到一個公共組並創建一個共享目錄。通過設置SGID位,允許改組中的任何用戶把文件復制到共享目錄中,並允許改組其他成員讀取共享目錄中的所有文件。
1.使用groupadd創建一個公共組

#groupadd student

2.使用useradd創建s1,s2,s3賬號,並給每個用戶分配一個密碼

#useradd s1 -g student
#passwd s1

#useradd s2 -g student
#passwd s2

#useradd s3 -g student
#passwd s2

3.創建一個名為/home/student的新共享目錄。對於擁有這個目錄的用戶和組,使用chmod 770 /home/student命令給這個目錄分配讀、寫和執行權限(rwx)。

#mkdir /home/student
#chmod 770 /home/student

4.在共享目錄上配置SGID位,這將使得擁有這個目錄的組中的所有用戶都能夠擁有所有權級別的權限

#chmod g+s /home/student

5.使用chgrp命令為這個目錄設置所有權

#chgrp student /home/student

------------------------------------------------------------------------------------------------

轉自:http://blog.csdn.net/wjymzh/article/details/51042390

Linux 用戶和用戶組管理