Linux學習筆記之常用用戶管理類命令

開始這個話題之前應該先了解下/etc/shadow這個文件中的構造,對於列所代表的意思大體有個瞭解,先以ftpuser賬戶來介紹:後邊會給出一些相應的例題來做使用說明補充(好吧我承認,這,又是一篇博客作業^_^萬惡的標題黨)。

ftpuser:$6$T9WUEls/$AK4hTO1bZ7MXW7VoMej8e7tVG1qqxPy5axVJAAIz4m6uuzZmoYDcQjUG2XlXx7klx/i8yJ1luZDtoKYwJAMa4.:16929:0:99999:7:5::

總共有9個字段被“:”隔開,每個字段的意義如下:

  1) ftpuser:第一個字段表示,賬戶名稱。

  2) 一大長串:第二個字段表示經過加密的密碼,沒有密碼是顯示爲"!!"號,如果是!!後跟一大長串則表示該賬戶已被鎖定。

  3) 16929:第三個字段表示最近一次修改密碼的時間,此數字是自1970年01月01日起到修改密碼日期的累計天數,設置爲0時,表示需要立即修改密碼。

  4) 0:第四個字段是密碼最短使用期限,這個是一個相對時長,從最近一次修改密碼時間算起往後推多少天,如果爲0時表示不設置最短使用期。

  5) 99999:第五個字段表示密碼最長使用期限,也是相對於最近一次修改密碼日期的天數(第三字段),默認爲可以用到死~~,設置爲-1時表示系統將不再檢查此賬戶密碼的有效性。

  6) 7:第六個字段表示密碼到達最長使用期限前的7天,開始向用戶發送密碼過期警告,提示用戶需要修改密碼。

  7) 5:第七個字段表示密碼過期後的寬限時間爲5天,即爲到達最長使用日期後的5天之內,每次登陸系統第一件事就是改密碼,否則無法登錄系統。

  8) 第八個地段表示賬戶失效日期:當該賬戶到達設置的失效日期之後,如果說密碼使用時間爲無限期那麼只要到了設定的失效日期,這個賬號也是game over了(看來用到死也是分跟誰比呀,這個字段就是“上帝”,你敢比他活的久麼= ̄ω ̄=)

  9) 第九字段爲系統保留字段,以備以後添加其他新的功能使用(沒準就是幹掉“上帝”(¬_¬) 趕緊跑)。

創建用戶命令:useradd

  useradd - create a new user or update default new user information

  格式:

  (1) useradd [options] LOGIN

  (2) useradd -D

  (3) useradd -D [options]

  使用useradd不加任何選項來創建用戶賬號時,默認的一些創建參數是通過/etc/login.defs來定義的,比如普通用戶的的ID範圍是1000~60000,系統賬戶的ID是201~999等等,具體可以通過查看/etc/login.defs文件來了解。

  常用選項:

  -d,--home-dir HOME_DIR:指定用戶家目錄的創建位置,創建的用戶家目錄不可以指定爲已經存在的目錄,否則將無法將/etc/skel模板複製到指定的用戶家目錄中。

  -c,--comment COMMENT:創建用戶是可以指定一些基本的描述信息。

  -u,--uid UID:指定用戶ID。

  -s,--shell SHELL:指定用戶登錄shell,如果是創建一些守護進程類的用戶,不允許其登錄系統,則選擇/sbin/nologin。

  -r,--system:加入此選項後將創建一個系統賬戶。

  -D,--defaults:通過useradd -D 可以查看默認的選項參數,也可以通過查看/etc/default/useradd文件達到相同的效果。如果需要修改相關默認參數,修改此文件中的內容即可。

  -g,--gid GROUP:指定用戶組ID,指定的組ID必須是已經存在的,否則將指定失敗。

  -G,--groups GROUP[,GROUP2,...]:指定用戶附加組可以指定多個,但指定的組ID必須是已經存在纔可以。

  -e,--expiredate EXPIRE_DATE:創建用戶時指定其失效時間,指定日期格式爲:“YYYY-MM-DD”,默認爲該新建賬戶可以使用到死~到死!

  -f,--inactive INACTIVE:指定賬戶密碼失效時間,設置爲-1時表示永遠不失效,0表示爲立即失效。

  該值的設定是相對於賬戶密碼最長使用期限來說,例如ftp用戶設置的最長使用期限爲2017年01月01日,此時將失效時間設置爲5即爲,當系統時間到達2017年01月02日時,每次登陸即會告知用戶需要更改密碼,否則無法進行其他操作,當到達1月7日時賬戶將會被鎖定而無法登錄。

修改用戶賬戶命令:usermod

   usermod - modify a user account

   格式:usermod [options] LOGIN

   常用選項:

   -c COMMENT:修改賬戶描述信息,如果描述信息中間有空格則需要使用雙引號""引起描述信息。

   -d HOME_DIR:修改用戶家目錄,如果指定的位置目錄不存在則家目錄無法創建,若想目錄不存在時創建則需要同時使用-m選項來創建家目錄。

注意:如果指定的家目錄是已經存在的目錄,則原來用戶家目錄中的內容將不會被複制到指定目錄中去,所以建議更改家目錄時儘量選擇-md來創建新的目錄。

     -g GROUP:修改用戶的基本組,指定的組ID必須是已經存在的組ID。

     -l NEW_LOGIN:修改用戶的用戶名。

       -s SHELL:修改用戶登錄shell。

       -u UID:修改用戶ID。

       -L:鎖定用戶,此時用戶將無法登錄系統。

     -U:將原先鎖定的用戶解鎖。

修改用戶密碼命令:passwd

passwd - update user's authentication tokens

格式:passwd [-l] [-u] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]

passwd 單獨使用時是修改當前用戶的密碼。

常用選項:

-l:鎖定用戶。

-u:解鎖用戶。

-f:讓指定用戶在下次登錄時,強制修改密碼。

-n DAYS:設置用戶最短使用期限,即在指定的時間裏無法修改密碼。

-x DAYS:設置用戶密碼最長使用期限。

-w DAYS:設置用戶密碼過期警告期限,此天數是相對於最長使用期限來說,即如果設置警告期限爲7,則當距離密碼最長使用期限的前7天,每天登陸時會提示用戶密碼即將過期。

-i DAYS:設置用戶非活動期限,也是相對於最長使用期限來說,要叫寬限期,超過最長使用期限後的指定的時間裏,還可以使用原來賬戶密碼登陸,但登陸後只能先修改密碼,而無法執行其他操作。

-S:可以查看指定用戶的一些簡單信息

修改用戶使用期限命令:chage

鑑於此命令主要是針對密碼時效性,所以以下所涉及到的日期,均按/etc/shadow中的字段號稱呼。

chage - change user password expiry information

格式:chage [options] LOGIN

常用選項:

-l :查看指定賬戶詳細信息。

-d LAST_DAY:指定賬戶最近修改密碼日期,格式爲“YYYY-MM-DD”,如果設置爲0則該賬戶下次登錄時立即修改密碼。第3字段

-m MIN_DAYS:修改賬戶最短使用期限,即在此時間段之內無法修改賬戶密碼,相對於第3字段的時長。

-M MAX_DAYS:修改賬戶最長使用期限,也是相對於第3字段時長。

-W WARN_DAYS:修改賬戶過期前的警告時間,相對於第5字段時長。

-I INACTIVE:修改賬戶非活動時間,相對於第5字段時長,即到達賬戶最長使用期限之後,還可以在設置的非活動時間之內登錄系統,但是,登錄系統的第一件事情就是改密碼,因爲你也幹不了別的,不信你試試~~!

-E EXPIRE_DATE:這個就厲害了,決定指定賬戶的“死亡”日期,也就是算着時間“過日子”吧,到日子就“死”╮(╯﹏╰)╭,指定格式爲“YYYY-MM-DD”,設置爲-1時表示取消失效時間,吶~指定賬戶又“復活”了!

創建用戶組命令:groupadd

格式:groupadd [options] group

常用選項:

-g:指定創建用戶組的組ID。

-r:使用此選項可以創建系統用戶組。

刪除用戶組命令:groupdel

格式:groupdel [options] GROUP

刪除命令比較簡單直接使用groupdel 後跟要刪除的組名即可。

====****我是分割線****========****我是分割線****====

1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。

使用who命令即可查看當前所有登錄系統的用戶,過濾重複登錄的用戶則使用cut命令現將用戶名取出,然後使用sort命令來將重複的過濾掉,如果想記錄每個用戶登錄的次數則可使用,uniq命令來實現。

~]# who |cut -d' ' -f1|sort -u
~]# who |cut -d' ' -f1|uniq -c  #可以記錄用戶登錄次數

2、取出當前系統上被用戶當做其默認shell最多的那個shell。

當前用戶相關信息存儲在/etc/passwd文件中,查看相關相關shell使用cut命令截取passwd中第七個字段,然後使用sort命令進行排序,使用uniq命令“-c”參數對其進行統計獲取每個shell被使用的次數,最後再通過sort進行逆序排序後,通過head將默認shell最多的顯示出來。

~]# cat /etc/passwd|cut -d: -f7|sort|uniq -c|sort -n -r|awk 'NR==1{print $NF}'

3、將/etc/passwd中的第三個字段數值最大的後10個用戶的信息全部改爲大寫後保存至/tmp/maxuser.txt中。

sort命令可以按列來進行排序,排序完成之後使用tail命令取出數值最大的10個用戶,最後使用tr命令將輸出的信息轉換爲大寫然後將轉換後的內容使用重定向至/tmp/maxuser.txt文件中。

~]#cat /etc/passwd |sort -t: -k3 -n|tail -10|tee /tmp/maxuser.txt    #使用tee命令是將內容重定向至文件中的同時再向屏幕輸出一份,以便觀察。

4、取出當前主機IP地址,提示:對ifconfig命令的結果進行切分。

ifconfig命令是查看當前主機網絡相關信息的命令,觀察輸出的內容不難發現IP地址在多個空格開頭後跟inet的行中,中間包含了IP地址、子網掩碼、廣播地址。

其中獲取到的IP地址還會包含了本地迴環地址,可以將其使用grep 過濾掉,最後awk命令取出本機IP地址。

~]# ifconfig |grep -o 'inet .*'|tr -d "addr:"|awk '{printf "IP: %s\n",$2}'grep -v "127"    #本次測試是在centos 7系統下完成,其中tr -d 是爲了兼容cenots6.7中獲取到的數據會有“addr:”,所以要將其刪除後顯示。

方法二、目前ifconfig命令已逐漸退出歷史舞臺,在centos7中默認都不會安裝此命令,現在推薦使用功能更強大的IP命令,在Centos6中也是支持此命令的,現在使用IP命令配合相關命令來獲取本機IP地址來看看其區別。

~]# ip addr show|grep -o "inet .*"|grep -E -o "^[^/]+\>"|grep -v "127"|awk '{printf "IP: %s\n",$2}'   #相對來說更方便一點

5、顯示/var目錄下一級子目錄或文件的總個數。

統計目錄個數使用wc命令,wc命令不止可以統計行數,還可以統計字符數以及文件大小,本題是通過管道將ls命令輸出的內容傳給wc命令來統計個數。

~]# ls /var|wc -l

6、取出/etc/group文件中第三個字段數值最小的10個組的名字。

本題的方法與題3類似,只是取完內容之後通過cut命令獲得組名。

~]# cat /etc/group |sort -t: -k3 -n|head -10|cut -d: -f1

7、將/etc/fstab和/etc/issue文件的內容合併爲同一個後保存至/tmp/etc.test文件中。

通過cat命令讀入兩個文件,然後通過輸出重定向來將內容存儲在/tmp/etc.test中。

~]# cat /etc/fstab /etc/issue >/tmp.etc.test

8、請總結描述用戶和組管理類命令的使用方法並完成以下練習:

總結開篇已經給出,請參照開篇描述~~

(1) 創建組distro,其GID爲2016;

~]# groupadd -g 2016 distro

(2) 創建用戶mandriva,其ID號爲10005;基本組爲distro;

~]# useradd -u 10005 -g 2016 mandriva

(3) 創建用戶megeia,其ID號爲1100,家目錄爲/home/linux;

~]# useradd -u 1100 -d /home/linux megeia

(4) 給用戶mageia添加密碼,密碼爲mageedu;

~]# echo "mageedu"|passwd --stdin mageia

(5) 刪除mandriva,但保留其家目錄;

~]# userdel mandriva

(6) 創建用戶slackware,其ID號爲2002,基本組distro,附加組peguin;

~]# groupadd peguin
~]# useradd -u 2002 -g 2016 -aG peguin slackware

(7) 修改slackware的默認shell爲/bin/tcsh;

~]# usermod -s /bin/tcsh

(8) 爲用戶slackware新增附加組admins;

~]# groupadd -r admins
~]# usermod -aG admins slackware

(9) 爲用戶slackware添加密碼,且要求密碼最短使用期限爲3天,最長爲180天,警告爲3天;

~]# echo "slackpwd" |passwd --stdin slackware -n 3 -x 180 -w 3

方法二修改完密碼後使用chage命令進行使用日期修改

~]# chage -m 3 -M 180 -W 3 slackware

(10) 添加用戶openstack,其ID號爲3003,基本組爲clouds,附加組爲peguin和nova;

~]# groupadd clouds
~]# groupadd nova
~]# useradd -u 3003 -g clouds -G peguin,nova

(11) 添加系統用戶mysql,要求其shell爲/sbin/nologin;

~]# useradd -r -s /sbin/nologin mysql

(12) 使用echo用命令,非交互式爲openstack添加密碼;

~]# echo "openstackpwd" |passwd --stdin openstack

9、複製/etc/skel目錄爲/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒有任何訪問權限。

~]# cp -r /etc/skel /home/tuser1
~]# chmod -R go=--- /home/tuser1

10、顯示/proc/meminfo文件中以大寫或小寫S開頭的行,用兩種方式;

~]# grep -i "s" /proc/meminfo
~]# grep "^[sS]" /proc/meminfo

11、顯示/etc/passwd文件中其默認shell爲非/sbin/nologin的用戶;

~]# grep -v "/sbin/nologin" /etc/passwd

12、顯示/etc/passwd文件中其默認shell爲bin/bash的用戶;

~]# grep "bin/bash" /etc/passwd

13、找出/etc/passwd文件中的一位數或兩位數;

~]# grep -E "[0-9]{1,2}" /etc/passwd

14、顯示/etc/rc.d/rc.sysinit文件中以#開頭,後面跟至少一個空白字符,而後又有至少一個非空白字符的行;

~]# grep -E "^#[[:space:]]+[^[:space:]].*" /etc/rc.d/rc.sysinit

15、打出netstat -tan命令執行結果以'LISTEN',後跟空白字符結尾的行;

~]# netstat -tan |grep -E "LISTEN[[:space:]]{0,}$"

16、添加用戶bash,testbash,basher,nologin(此一個用戶的shell爲/sbin/nologin),而後找出當前系統上其用戶名和默認shell相同的用戶的信息;

~]# useradd bash
~]# useradd testbash
~]# useradd basher
~]# useradd -s /sbin/nologin nologin 
~]# grep -E "^([[:alnum:]]+)\>.*\1$" /etc/passwd


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章