用戶的概念
對于計算機的應用,我們大多數都是在儲存資料、辦公娛樂。我們耗費精力與時間把我們喜歡的一些東西尋找下載在我們的計算機中,這臺計算機沒有一丁點限制,誰都可以進行訪問,那我們所進行存儲的一些東西就將變得很不安全,但是我們在給計算機創建一個用戶并設置密碼之后,其他人沒獲得我們的密碼,他想對我們的東西做些手腳那將會變得很困難。
用戶組的目的:
打個比方可能好理解點,一個學校有很多學生分成了很多班級便于學校管理,在linux中也要對用戶(學生)按照某種策略進行分組管理。那么相對你而言你的同班同學就是你的同組用戶,其他班級的學生就是非同組用戶。
恰好你有一套非常流行的漫畫,你就是文件(漫畫)的屬主,文件屬主對自己的文件擁有最大權限可讀可寫可執行。如果你愿意與同組用戶共享文件,那么就可以賦予同組用戶(同班同學)一定的權限訪問你的文件比如可讀不可寫可執行。如果你愿意與外班學生分享漫畫,文件屬主也可以賦予可讀不可寫不可執行的權限給非同組用戶。這樣就實現了對不同用戶對某個文件的訪問權限的管理。這完全取決于文件屬主根據實際情況來決定哪個用戶有沒有有哪些權限訪問屬主的文件。當然如果你將自己文件的權限設置為777,那么就是所有的用戶擁有和文件屬主一樣的最大權限,你也就失去了對這個文件的絕對控制。你也可以這樣理解,文件屬主所具有的權限應高于本組用戶,本組用戶的權限應高于非本組用戶。做為文件屬主或者是root用戶不可以隨便賦予本組或非本組用戶擁有與文件屬主一樣的權限,這樣會導致安全漏洞。
下面我簡單說相關命令的操作。
用戶和組的相關文件:
/etc/skel:
用戶家目錄樣本信息。
這個目錄存儲了用戶目錄的樣本文件,當用戶的家目錄損壞的時候,我們可以復制這個目錄的文件到指定用戶的家目錄下。
這個目錄大多數都是隱藏文件,所以復制的時候需要注意。
/etc/shadow:
詳細信息:
樣例: hua:!!:17086:0:99999:7:::
如果查看/etc/shadow文件存放的特殊帳號信息如下:
name:!!:13675:0:99999:7:::
每一行給一個特殊帳戶定義密碼信息,每個字段用 : 隔開。
字段 1 定義與這個 shadow 條目相關聯的特殊用戶帳戶。
字段 2 包含一個加密的密碼。
字段 3 自 1/1/1970 起,密碼被修改的天數
字段 4 密碼將被允許修改之前的天數(0 表示“可在任何時間修改”)
字段 5 系統將強制用戶修改為新密碼之前的天數(1 表示“永遠都不能修改”)
字段 6 密碼過期之前,用戶將被警告過期的天數(-1 表示“沒有警告”)
字段 7 密碼過期之后,系統自動禁用帳戶的天數(-1 表示“永遠不會禁用”)
字段 8 該帳戶被禁用的天數(-1 表示“該帳戶被啟用”)
字段 9 保留供將來使用
/etc/passwd: 存儲了用戶的詳細信息,
/etc/passwd 文件是一個純文本文件,每行采用了相同的格式:
樣例:hua:x:1001:1001::/home/hua:/bin/bash
第一段: 用戶登錄名
第二段: password 用戶口令。此域中的口令是加密的,常用x表示。
當用戶登錄系統時,系統對輸入的口令采取相同的算法,與此域中的內容進行比較。
如果此域為空,表明該用戶登錄時不需要口令。
第三段: uid 指定用戶的 UID。用戶登錄進系統后,系統通過該值,而不是用戶名來識別用戶。
第四段: gid GID。如果系統要對相同的一群人賦予相同的權利,則使用該值。
第五段: comment 用來保存用戶的真實姓名和個人細節,或者全名。
第六段: home 指定用戶的主目錄的絕對路徑。
第七段: shell 如果用戶登錄成功,則要執行的命令的絕對路徑放在這一區域中。它可以是任何命令。
如果用戶的shell類型是nologin,那么他將不能在本地登陸。
linux組與windows的區別:windows不允許用戶名與組名同名,而linux可以。
/etc/group :
linux組與windows的區別:windows不允許用戶名與組名同名,而linux可以。
記錄了組名,組密碼,組id號,以及組中成員。
詳細信息:
樣例: group_name:passwd:GID:user_list
在/etc/group 中的每條記錄分四個字段:
第一字段:用戶組名稱;
第二字段:用戶組密碼;
第三字段:GID
第四字段:用戶列表,每個用戶之間用,號分割;本字段可以為空;如果字段為空表示用戶組為GID的用戶名;
/etc/gshadow :
/etc/gshadow是/etc/group的加密資訊文件,比如用戶組(Group)管理密碼就是存放在這個文件。
/etc/gshadow和/etc/group是互補的兩個文件;對于大型服務器,針對很多用戶和組,定制一些關系結構比較復雜的權限模型,設置用戶組密碼是極有必要的。
比如我們不想讓一些非用戶組成員永久擁有用戶組的權限和特性,這時我們可以通過密碼驗證的方式來讓某些用戶臨時擁有一些用戶組特性,這時就要用到用戶組密碼。
樣例:
[root@localhost ~]# cat /etc/gshadow
root:::root
bin:::root,bin,daemon
組名:口令:組管理者:組內用戶列表
1) 組名: 是用戶組的名稱,由字母或數字構成。
2) 口令:用戶組密碼,這個段可以是空的或!,如果是空的或有!,表示沒有密碼
3) 組管理者:這個字段也可為空,如果有多個用戶組管理者,用,號分割
4) 組內用戶列表:如果有多個成員,用,號分割 ;
/etc/login.defs 用戶與組策略文件
login.defs是設置用戶帳號限制的文件,在這里我們可配置密碼的最大過期天數,密碼的最大長度約束等內容。該文件里的配置對root用戶無效。如果/etc/shadow文件里有相同的選項,則以/etc/shadow里的設置為準,也就是說/etc/shadow的配置優先級高于/etc/login.defs
下邊是該文檔的內容:
#*REQUIRED*
#Directorywheremailboxesreside,_or_nameoffile,relativetothe
#homedirectory.Ifyou_do_defineboth,MAIL_DIRtakesprecedence.
#QMAIL_DIRisforQmail
#
#QMAIL_DIRMaildir
MAIL_DIR/var/spool/mail 注:創建用戶時,要在目錄/var/spool/mail中創建一個用戶mail文件;
#MAIL_FILE.mail
#Passwordagingcontrols:
#
#PASS_MAX_DAYSMaximumnumberofdaysapasswordmaybeused.
#PASS_MIN_DAYSMinimumnumberofdaysallowedbetweenpasswordchanges.
#PASS_MIN_LENMinimumacceptablepasswordlength.
#PASS_WARN_AGENumberofdayswarninggivenbeforeapasswordexpires.
#
PASS_MAX_DAYS99999 注:用戶的密碼不過期最多的天數;
PASS_MIN_DAYS0 注:密碼修改之間最小的天數;
PASS_MIN_LEN5 注:密碼最小長度;
PASS_WARN_AGE7 注:
#
#Min/maxvaluesforautomaticuidselectioninuseradd
#
UID_MIN500 注:最小UID為500,也就是說添加用戶時,UID是從500開始的;
UID_MAX60000 注:最大UID為60000;
#
#Min/maxvaluesforautomaticgidselectioningroupadd
#
GID_MIN500 注: GID是從500開始;
GID_MAX60000
#
#Ifdefined,thiscommandisrunwhenremovingauser.
#Itshouldremoveanyat/cron/printjobsetc.ownedby
#theusertoberemoved(passedasthefirstargument).
#
#USERDEL_CMD/usr/sbin/userdel_local
#
#Ifuseraddshouldcreatehomedirectoriesforusersbydefault
#OnRHsystems,wedo.ThisoptionisORedwiththe-mflagon
#useraddcommandline.
#
CREATE_HOMEyes 注:是否創用戶家目錄,要求創建;
/erc/default/useradd :
這里我們詳細說說/etc/default/useradd這個文件。該文件主要是定義默認家目錄、環境配置文件目錄、登入執行首個程序等等。
來個實例吧:
# useradd defaults file
GROUP=100 注:gid=100,表示可創建普通組
HOME=/home 注:把用戶的家目錄建在/home中;用戶家目錄的默認創建地
INACTIVE=-1 注:是否啟用帳號過期停權,-1表示不啟用;寬限天數,0及以下數皆為無效數字
EXPIRE= 注:帳號終止日期,不設置表示不啟用;帳號失效日期(如:20081212)
SHELL=/bin/bash 注:所用SHELL的類型;登錄后執行的程序
SKEL=/etc/skel 注: 用戶家目錄中的環境文件,默認添加用戶的目錄默認文件存放位置;也就是說,當我們用adduser添
加用戶時,用戶家目錄下的文件,都是從這個目錄中復制過去的;
有人這里又會問:/etc/skel是干什么的?
用useradd username(或者adduser username)添加一個名為username的用戶,然后用passwd
username
指定口令。
用戶的信息記錄在/etc/passwd文件里,由于每個用戶都可以(而且必須能)讀出這個文件然后就可以crack出其它用戶的密碼,為安全考慮現在都使用shadow。在/etc/passwd下用戶的口令變為x
真正的口令密文記錄在/etc/shadow里,而這個文件只有以root權限才能讀出。Redhat
5.1以下版本沒有直接使用shadow,需要用pwconv轉換一下,如果要變回來,可以用pwunconv。
因此,在/etc/skel目錄記錄了一個用戶應該有的基本文件
(ls -a
/etc/skel/看看都有什么,都是用戶家目錄中的環境文件),useradd會自動把這些文件復制到用戶的家目錄下并置上適當的權限(除非添加用戶時用了-m參數:
useradd -m
xxx)。
如果你在這個目錄下鍵一個public_html的目錄,則以后添加的用戶在它的家目錄下都會自動有個同名的目錄,這樣每個用戶都有了“個人主頁”。刪除用戶可以用userdel
usrname或userdel -r
username(有些發行版可能是deluser),-r參數會刪除這個用戶的宿主目錄,但是在系統里別的地方還可能有此用戶的信息,所以在刪除用戶之前最好還要用find
/ -user username等方式去找一找相關信息。
如果要臨時禁止一個用戶,可以在/etc/passwd文件中此用戶的密碼這一項第一個字符前添加一個*號。
如果把密碼域改為空,則此用戶不需要密碼就可以進入系統,當你忘記root口令時,可以用軟盤啟動把原來的root安裝上來,直接去改passwd文件。我記得以單用戶方式啟動時不需要密碼可以進去。長用戶名的問題,在Redhat發行版中已經做得很好了,也允許用戶名中有空格。如果你手上的發行版不支持,到/usr/include/utmpbits.h里把UT_NAMEDSIZE改為32,重新編譯相關程序。
另一個直觀的配置工具是linuxconf,比如用它來配置pppuser等等。
有關用戶的命令
首先說下創建用戶:
在linux中我們創建用戶有很多種方法,由于本人才疏學淺,僅知道以下幾種,厚顏無恥的拿出來讓大伙樂呵樂呵。
(一) 創建用戶:useradd
語法格式: useradd(選項)(參數)
這個命令的的選項可是不少:
-c<備注>:加上備注文字。備注文字會保存在passwd的備注欄位中;
-d<登入目錄>:指定用戶登入時的啟始目錄;
-D:變更預設值;
-e<有效期限>:指定帳號的有效期限;
-f<緩沖天數>:指定在密碼過期后多少天即關閉該帳號;
-g<群組>:指定用戶所屬的群組;
-G<群組>:指定用戶所屬的附加群組;
-m:自動建立用戶的登入目錄;
-M:不要自動建立用戶的登入目錄;
-n:取消建立以用戶名稱為名的群組;
-r:建立系統帳號;
-s:指定用戶登入后所使用的shell;
-u:指定用戶id。
打了這么多選項了,我忍不住要試一下了,下面是這命令的具體用法:
先不帶參數的創建一個用戶試試:
查看創建的信息,可以發現用戶名tom之后跟了一大串的信息,這些是什么意思呢?
我來說明以下:
第一段: 用戶登錄名
第二段: password 用戶口令。此域中的口令是加密的,常用x表示。當用戶登錄系統時,系統對輸入的口令采取相同的算法,與此域中的內容進行比較。如果此域為空,表明該用戶登錄時不需要口令。
第三段: uid 指定用戶的 UID。用戶登錄進系統后,系統通過該值,而不是用戶名來識別用戶。
第四段: gid GID。如果系統要對相同的一群人賦予相同的權利,則使用該值。
第五段: comment 用來保存用戶的真實姓名和個人細節,或者全名。
第六段: home 指定用戶的主目錄的絕對路徑。
第七段: shell 如果用戶登錄成功,則要執行的命令的絕對路徑放在這一區域中。它可以是任何命令。
每一段的信息已經給大家介紹了,這里在回到原先的主題把,從新來說明下個參數的用法,那么現在問題來了,剛才第一個介紹的命令“-c”是修改備注信息,這里就牽扯到了另外一條命令,這里我先暫時用一下,下面會有詳細的說明。
(二)修改用戶屬性:
命令格式: usermod (選項) (參數)
usermod命令用于修改用戶的基本信息。usermod命令不允許你改變正在線上的使用者帳號名稱。當usermod命令用來改變user id,必須確認這名user沒在電腦上執行任何程序。
該命令的相關參數:
-c<備注>:修改用戶帳號的備注文字;
-d<登入目錄>:修改用戶登入時的目錄;
-e<有效期限>:修改帳號的有效期限;
-f<緩沖天數>:修改在密碼過期后多少天即關閉該帳號;
-g<群組>:修改用戶所屬的群組;
-G<群組>;修改用戶所屬的附加群組;
-l<帳號名稱>:修改用戶帳號名稱;
-L:鎖定用戶密碼,使密碼無效;
-s:修改用戶登入后所使用的shell;
-u:修改用戶ID;
-U:解除密碼鎖定。
實例:
將hua2添加到組staff中:
usermod -G staff hua2
修改hua的用戶名為hua1:
usermod -l hua1 hua
鎖定賬號hua1:
usermod -L hua1
解除對hua1的鎖定:
usermod -U hua1
修改用戶的登陸shell:
usermod -s /sbin/nologin /*更改為nologin之后,用戶將無法登陸系統,這里僅作命令參考使用*/
(三)用戶密碼
passwd命令用于設置用戶的認證信息,包括用戶密碼、密碼過期時間等。系統管理者則能用它管理系統用戶的密碼。只有管理者可以指定用戶名稱,一般用戶只能變更自己的密碼。
命令格式: passwd (參數)
當然,如果你是管理員用戶,那么你想要更改一個用戶的密碼,只需要在passwd命令加上這個用戶的名字即可,
例如:
[root@localhost ~]# passwd harry Changing password for user harry. New password: BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word Retype new password: passwd: all authentication tokens updated successfully. [root@localhost ~]#
如果你是普通用戶,那么改密碼的時候直接輸入passwd,然后進入更改界面,輸入原來的密碼確認身份之后,再輸入兩次新的密碼即可。但是如果要更改密碼,那么密碼一定得遵循密碼復雜性要求,這個要求包括:大寫字母,小寫字母,數字,符號。并且長度到達七個字符。這樣的密碼在夠安全。
下面是樣例:
[harry@localhost ~]$ passwd Changing password for user harry. Changing password for harry. (current) UNIX password: New password: Retype new password: passwd: all authentication tokens updated successfully. [harry@localhost ~]$
還有一種修改用戶密碼的方式,這種方式用戶不會和系統產生交互,但是輸出的命令是明文的,相信你可以搞定。
命令格式: echo centos | passwd — stdin hua
命令解析: 將用戶 hua的密碼改為 centos。
(五)批量創建用戶
前邊說了創建用戶的命令與修改用戶的命令,個人覺得平時使用最多的也是這個,但是如果同時讓我們創建100個用戶呢,我們該怎么辦,總不把相同的命令重復100次把,所以這里就說下批量創建用戶與批量修改用戶密碼。
批量創建用戶: newusers (參數) /*通常是將存放用戶信息的文本導入,信息格式類似與"/etc/passwd的文本格式"*/
批量更改用戶密碼: chpasswd (參數) /*與上邊一樣,將一個文本導入*/
下邊來說下樣例:
[root@localhost home]# cd /tmp/ [root@localhost tmp]# ls kde-root pw.txt systemd-private-e44b82a255dd4335be8e8ea86bc3d325-colord.service-cszZnR user1.txt [root@localhost tmp]# cat user1.txt hua:x:1011:1011::/home/hua:/bin/bash hua1:x:1012:1012::/home/hua1:/bin/bash hua2:x:1013:1013::/home/hua2:/bin/bash hua3:x:1014:1014::/home/hua3:/bin/bash hua4:x:1015:1015::/home/hua4:/bin/bash hua5:x:1016:1016::/home/hua5:/bin/bash [root@localhost tmp]# cat pw.txt hua:centos hua1:centos hua2:centos hua3:centos hua4:centos hua5:centos [root@localhost tmp]# newusers user1.txt [root@localhost tmp]# chpasswd < pw.txt [root@localhost tmp]# cat /etc/passwd [root@localhost tmp]# [root@localhost tmp]# su - hua Last login: Thu Oct 13 00:24:40 CST 2016 on pts/0 su: failed to execute /bin/bash : No such file or directory [root@localhost tmp]# cd /home/hua [root@localhost hua]# ls -a . ..
這時候發現不能切換用戶,因為什么什么呢,進入hua用戶家目錄看完之后發現,用戶家目錄里沒有配置文件,
此時就需拷貝/etc/skel/目錄中的文件了。但是拷貝完文件之后還是進不去,找了許久,還是在別人的幫助下才發現錯到哪里了,我在編寫文檔的時候多敲了一個空格,在執行命令的時候,系統讀取不出來所以造成此結果,所以,再此我也不對這事進行隱瞞,意料之外的學習到了其他的東西。
#這里是拷貝用戶家目錄的命令:cp -r /etc/skel/.[^.]* /home/hua [hua@localhost ~]$ pwd /home/hua [hua@localhost ~]$ exit logout [root@localhost ~]# su - hua1 Last login: Thu Oct 13 00:55:45 CST 2016 on pts/0 [hua1@localhost ~]$ pwd /home/hua1
這些是把文檔中的空格完全刪除之后,切換用戶的效果。
(五)刪除用戶
上面我們講過了創建與修改用戶,在這里就來跟大家說以以下刪除用戶的命令。
刪除用戶需要用到“userdel”這個命令,
命令格式 : userdel (參數)
樣例:
[root@localhost ~]# getent passwd hua /*首先查看下用戶信息*/ hua:x:1011:1011::/home/hua:/bin/bash [root@localhost ~]# userdel hua /*在這里刪除用戶*/ [root@localhost ~]# [root@localhost ~]# getent passwd hua /*刪除完成之后使用該命令查詢,已經找不到原來的用戶了*/ [root@localhost ~]# [root@localhost ~]# cd /home /*進入用戶家目錄查看*/ [root@localhost home]# ls hua hua1 hua2 hua3 hua4 hua5 mageedu /*這里發現剛才被刪除的用戶家目錄還在*/
如果我們加上-r 這個選項,在我們刪除用戶的同時,也會把用戶的家目錄刪除掉。
[root@localhost home]# userdel -r hua1 [root@localhost home]# getent passwd hua1 [root@localhost home]#
(六)其他相關命令:
以下命令可以說是緊緊圍繞在用戶身旁,在工作中使用以下命令會使我們倍感愉快。
1)getent passwd:
這個命令在上邊文章中我已經多次使用,那這條命令的具體作用到底是什么呢,我在這里簡單說下。
命令格式: getent passwd (參數)
這里的參數可以指定為用戶,作用就是可以查看單個用戶的具體信息。
2)finger :
finger命令用于查找并顯示用戶信息。包括本地與遠端主機的用戶皆可,帳號名稱沒有大小寫的差別。單獨執行finger指令,它會顯示本地主機現在所有的用戶的登陸信息,包括帳號名稱,真實姓名,登入終端機,閑置時間,登入時間以及地址和電話。
命令格式:finger (選項) (參數)
命令樣式:
[root@localhost home]# finger hua2 Login: hua2 Name: Directory: /home/hua2 Shell: /bin/bash Never logged in. No mail. No Plan. [root@localhost home]# finger Login Name Tty Idle Login Time Office Office Phone Host root root tty1 2:01 Oct 12 12:23 root root pts/0 Oct 13 01:55 (172.16.252.142)
說了finger 命令,那就不得不說另外一個命令chfn。
chfn命令用來改變finger命令顯示的信息。這些信息都存放在/etc目錄里的passwd文件里。若不指定任何選項,則chfn命令會進入問答式界面。
命令語法:chfn (選項) (參數)
命令選項:
-f<真實姓名>或–full-name<真實姓名>:設置真實姓名;
-h<家中電話>或–home-phone<家中電話>:設置家中的電話號碼;
-o<辦公地址>或–office<辦公地址>:設置辦公室的地址;
-p<辦公電話>或–office-phone<辦公電話>:設置辦公室的電話號碼;
-u或–help:在線幫助;
-v或-version:顯示版本信息。
3)whoami:該命令可以顯示當前登陸的用戶名稱。
4) pwunconv:顯示passwd文件中用戶密碼的加密信息。
pwconv :隱藏加密信息。
關于用戶組的相關命令:
(一)創建用戶組:groupadd
groupadd命令用于創建一個新的工作組,新工作組的信息將被添加到系統文件中
命令語法:groupadd (選項) (參數)
相關選項:
-g:指定新建工作組的id;
-r:創建系統工作組,系統工作組的組ID小于500;
-K:覆蓋配置文件“/ect/login.defs”;
-o:允許添加組ID號不唯一的工作組。
在這里,命令的參數就是我們需要創建的組名。
命令樣例:
[root@localhost home]# groupadd -g 300 hkd /*創建一個名叫hkd的組,并指定組ID號*/
此時會在/etc/group文件中產生一個組ID(GID)是300的項目。
(二)更改組名與識別號(GID)
groupmod命令更改群組識別碼或名稱。需要更改群組的識別碼或名稱時,可用groupmod指令來完成這項工作。
命令語法:groupmod (選項) (參數)
相關選項:
-g<群組識別碼>:設置欲使用的群組識別碼;
-o:重復使用群組識別碼;
-n<新群組名稱>:設置欲使用的群組名稱。
參數: 指定需要修改的組名。
(三)刪除用戶組:
groupdel命令用于刪除指定的工作組,本命令要修改的系統文件包括/ect/group和/ect/gshadow。若該群組中仍包括某些用戶,則必須先刪除這些用戶后,方能刪除群組。
命令語法: groupdel (參數)
參數:指定需要刪除的組名。
(四)查看用戶組:
在這里要提到兩個命令,這兩個命令可以使我們在萬軍叢中智取敵將首級,一個可以查找用戶組里有那些用戶,另一個命令可以查看用戶在那個組。
先說第一個:groupmems
命令格式:groupmems -a user_name | -d user_name | [-g group_name] | -l | -p
參數 :
groupmems -g hua -a hua1 :這樣使用,可以將hua1添加到hua組。
groupmems -g hua -d hua1 :這樣使用,可以將hua1從hua組中刪除。
groupmems -g hua -l :這樣使用, 可以查看hua組中有那些成員。
groupmems -g hua -p :這樣使用,可以將hua組中的成員全部刪除
相對于第一個,第二個命令groups簡單的多。因為在我們創建用戶的同時,必將會生成一個組,這個命令就可以查看擁有該用戶的所有組。
命令格式: groups (參數)
這里的參數直接指定對應的用戶名即可。
好了就說到這里把,以后邊學變補充。信息量略大。
原創文章,作者:ly,如若轉載,請注明出處:http://www.www58058.com/53652