一、Linux 用戶管理
通過第一節(jié)課程的學習,你應該已經(jīng)知道,Linux 是一個可以實現(xiàn)多用戶登陸的操作系統(tǒng),比如“李雷”和“韓梅梅”都可以同時登陸同一臺主機,他們共享一些主機的資源,但他們也分別有自己的用戶空間,用于存放各自的文件。但實際上他們的文件都是放在同一個物理磁盤上的甚至同一個邏輯分區(qū)或者目錄里,但是由于 Linux 的 用戶管理 和 權(quán)限機制,不同用戶不可以輕易地查看、修改彼此的文件。
下面我們就來學習一下 Linux 下的賬戶管理的基礎(chǔ)知識。
1.1 查看用戶
請打開終端,輸入命令:
$ who am i
或者
$ who mom likes
輸出的第一列表示打開當前偽終端的用戶的用戶名(要查看當前登錄用戶的用戶名,去掉空格直接使用 whoami 即可),第二列的 pts/0 中 pts 表示偽終端,所謂偽是相對于 /dev/tty 設(shè)備而言的,還記得上一節(jié)講終端時的那七個使用 [Ctrl]+[Alt]+[F1]~[F7] 進行切換的 /dev/tty 設(shè)備么,這是“真終端”,偽終端就是當你在圖形用戶界面使用 /dev/tty7 時每打開一個終端就會產(chǎn)生一個偽終端, pts/0 后面那個數(shù)字就表示打開的偽終端序號,你可以嘗試再打開一個終端,然后在里面輸入 who am i ,看第二列是不是就變成 pts/1 了,第三列則表示當前偽終端的啟動時間。
who 命令其它常用參數(shù)
參數(shù) 說明
-a 打印能打印的全部
-d 打印死掉的進程
-m 同am i,mom likes
-q 打印當前登錄用戶數(shù)及用戶名
-u 打印當前登錄用戶登錄信息
-r 打印運行等級
1.2 創(chuàng)建用戶
在 Linux 系統(tǒng)里, root 賬戶擁有整個系統(tǒng)至高無上的權(quán)利,比如 新建/添加 用戶。
root 權(quán)限,系統(tǒng)權(quán)限的一種,與 SYSTEM 權(quán)限可以理解成一個概念,但高于 Administrator 權(quán)限,root 是 Linux 和 UNIX 系統(tǒng)中的超級管理員用戶帳戶,該帳戶擁有整個系統(tǒng)至高無上的權(quán)力,所有對象他都可以操作,所以很多黑客在入侵系統(tǒng)的時候,都要把權(quán)限提升到 root 權(quán)限,用 Windows 的方法理解也就是將自己的非法帳戶添加到 Administrators 用戶組。更比如安卓操作系統(tǒng)中(基于 Linux 內(nèi)核)獲得 root 權(quán)限之后就意味著已經(jīng)獲得了手機的最高權(quán)限,這時候你可以對手機中的任何文件(包括系統(tǒng)文件)執(zhí)行所有增、刪、改、查的操作。
我們一般登錄系統(tǒng)時都是以普通賬戶的身份登錄的,要創(chuàng)建用戶需要 root 權(quán)限,這里就要用到 sudo 這個命令了。不過使用這個命令有兩個大前提,一是你要知道當前登錄用戶的密碼,二是當前用戶必須在 sudo 用戶組。shiyanlou 用戶也屬于 sudo 用戶組(稍后會介紹如何查看和添加用戶組)。
su,su- 與 sudo
su <user> 可以切換到用戶 user,執(zhí)行時需要輸入目標用戶的密碼,sudo <cmd> 可以以特權(quán)級別運行 cmd 命令,需要當前用戶屬于 sudo 組,且需要輸入當前用戶的密碼。su - <user> 命令也是切換用戶,同時環(huán)境變量也會跟著改變成目標用戶的環(huán)境變量。
現(xiàn)在我們新建一個叫 hanmei的用戶:
$ sudo adduser hanmei
實驗樓的環(huán)境目前設(shè)置為 shiyanlou 用戶執(zhí)行 sudo 不需要輸入密碼,通常此處需要按照提示輸入 shiyanlou 密碼(Linux 下密碼輸入是不顯示任何內(nèi)容的),shiyanlou 用戶密碼在左邊實驗文檔最上方。然后是給 lilei 用戶設(shè)置密碼,后面的選項的一些內(nèi)容你可以選擇直接回車使用默認值:
這個命令不但可以添加用戶到系統(tǒng),同時也會默認為新用戶創(chuàng)建 home 目錄:
$ ls /home
現(xiàn)在你已經(jīng)創(chuàng)建好一個用戶,并且你可以使用你創(chuàng)建的用戶登錄了,使用如下命令切換登錄用戶:
$ su -l hanmei
輸入剛剛設(shè)置的 lilei 的密碼:
退出當前用戶跟退出終端一樣可以使用 exit命令或者使用快捷鍵 Ctrl+d。
1.3 用戶組
在 Linux 里面每個用戶都有一個歸屬(用戶組),用戶組簡單地理解就是一組用戶的集合,它們共享一些資源和權(quán)限,同時擁有私有資源,就跟家的形式差不多,你的兄弟姐妹(不同的用戶)屬于同一個家(用戶組),你們可以共同擁有這個家(共享資源),爸媽對待你們都一樣(共享權(quán)限),你偶爾寫寫日記,其他人未經(jīng)允許不能查看(私有資源和權(quán)限)。當然一個用戶是可以屬于多個用戶組的,正如你既屬于家庭,又屬于學?;蚬?。
在 Linux 里面如何知道自己屬于哪些用戶組呢?
方法一:使用 groups 命令
$ groups hanmei
其中冒號之前表示用戶,后面表示該用戶所屬的用戶組。這里可以看到 shiyanlou 用戶屬于 shiyanlou 用戶組,每次新建用戶如果不指定用戶組的話,默認會自動創(chuàng)建一個與用戶名相同的用戶組(差不多就相當于家長的意思,或者說是老總)。默認情況下在 sudo 用戶組里的可以使用 sudo 命令獲得 root 權(quán)限。shiyanlou 用戶也可以使用 sudo 命令,為什么這里沒有顯示在 sudo 用戶組里呢?可以查看下 /etc/sudoers.d/shiyanlou 文件,我們在 /etc/sudoers.d 目錄下創(chuàng)建了這個文件,從而給 shiyanlou 用戶賦予了 sudo 權(quán)限
方法二:查看 /etc/group 文件
$ cat /etc/group | sort
這里 cat 命令用于讀取指定文件的內(nèi)容并打印到終端輸出,后面會詳細講它的使用。 | sort 表示將讀取的文本進行一個字典排序再輸出,然后你將看到如下一堆輸出,你可以在最下面看到hanmei的用戶組信息:
沒找到,沒關(guān)系,你可以使用命令過濾掉一些你不想看到的結(jié)果:
$ cat /etc/group | grep -E "hanmei"
文件格式說明/etc/group 的內(nèi)容包括
①用戶組(Group)、② 用戶組口令、③ GID 及該用戶組所包含的用戶(User),每個用戶組一條記錄。格式如下:
group_name:password:GID:user_list
你看到上面的password 字段為一個 x 并不是說密碼就是它,只是表示密碼不可見而已.
將其它用戶加入 sudo 用戶組
默認情況下新創(chuàng)建的用戶是不具有 root 權(quán)限的,也不在 sudo 用戶組,可以讓其加入 sudo 用戶組從而獲取 root 權(quán)限:
$ su -l lilei
$ sudo ls
會提示 lilei 不在 sudoers 文件中,意思就是 lilei 不在 sudo 用戶組中,至于 sudoers 文件(/etc/sudoers)你現(xiàn)在最好不要動它,操作不慎會導致比較麻煩的后果。
使用usermod 命令可以為用戶添加用戶組,同樣使用該命令你必需有 root 權(quán)限,你可以直接使用 root 用戶為其它用戶添加用戶組,或者用其它已經(jīng)在 sudo 用戶組的用戶使用 sudo 命令獲取權(quán)限來執(zhí)行該命令。
使用 shiyanlou 用戶執(zhí)行 sudo 命令將 lilei 添加到 sudo 用戶組,讓它也可以使用 sudo 命令獲得 root 權(quán)限:
$ su shiyanlou # 此處需要輸入shiyanlou用戶密碼,可以點擊右側(cè)工具欄中的“SSH直連”查看
$ groups lilei
$ sudo usermod -G sudo lilei
$ groups lilei
usermod命令用于修改用戶的基本信息。
usermod命令不允許你改變正在線上的使用者帳號名稱。
當usermod命令用來改變user id,必須確認這名user沒在電腦上執(zhí)行任何程序。
你需手動更改使用者的crontab檔。也需手動更改使用者的at工作檔。
采用NIS server須在server上更動相關(guān)的NIS設(shè)定。
語法 usermod(選項)(參數(shù)) 選項
-c<備注>:修改用戶帳號的備注文字;
-d<登入目錄>:修改用戶登入時的目錄;
-e<有效期限>:修改帳號的有效期限;
-f<緩沖天數(shù)>:修改在密碼過期后多少天即關(guān)閉該帳號;
-g<群組>:修改用戶所屬的群組;
-G<群組>;修改用戶所屬的附加群組;
-l<帳號名稱>:修改用戶帳號名稱;
-L:鎖定用戶密碼,使密碼無效;
-s:修改用戶登入后所使用的shell;
-u:修改用戶ID;
然后你再切換回 lilei 用戶,現(xiàn)在就可以使用 sudo 獲取 root 權(quán)限了。
1.4 刪除用戶
刪除用戶是很簡單的事:
$ sudo deluser lilei --remove-home
二、Linux 文件權(quán)限
2.1 查看文件權(quán)限
我們之前已經(jīng)很多次用到 ls 命令了,如你所見,我們用它來列出并顯示當前目錄下的文件,當然這是在不帶任何參數(shù)的情況下,它能做的當然不止這么多,現(xiàn)在我們就要用它來查看文件權(quán)限。
使用較長格式列出文件:
$ ls -l
你可能除了知道最后面那一項是文件名之外,其它項就不太清楚了,那么到底是什么意思呢:
可能你還是不太明白,比如第一項文件類型和權(quán)限那一堆東西具體指什么,鏈接又是什么,何為最后修改時間,下面一一道來:
文件類型
關(guān)于文件類型,這里有一點你必需時刻牢記 Linux 里面一切皆文件,正因為這一點才有了設(shè)備文件( /dev 目錄下有各種設(shè)備文件,大都跟具體的硬件設(shè)備相關(guān))這一說。 socket:網(wǎng)絡(luò)套接字,具體是什么,感興趣的用戶可以自己去了解或期待實驗樓的后續(xù)相關(guān)課程。pipe 管道,這個東西很重要,我們以后將會討論到,這里你先知道有它的存在即可。軟鏈接文件:鏈接文件是分為兩種的,另一種當然是“硬鏈接”(硬鏈接不常用,具體內(nèi)容不作為本課程討論重點,而軟鏈接等同于 Windows 上的快捷方式,你記住這一點就夠了)。
文件權(quán)限
讀權(quán)限,表示你可以使用 cat <file name> 之類的命令來讀取某個文件的內(nèi)容;
寫權(quán)限,表示你可以編輯和修改某個文件;
執(zhí)行權(quán)限
通常指可以運行的二進制程序文件或者腳本文件,如同 Windows 上的 exe 后綴的文件,不過 Linux 上不是通過文件后綴名來區(qū)分文件的類型。你需要注意的一點是,一個目錄同時具有讀權(quán)限和執(zhí)行權(quán)限才可以打開并查看內(nèi)部文件,而一個目錄要有寫權(quán)限才允許在其中創(chuàng)建其它文件,這是因為目錄文件實際保存著該目錄里面的文件的列表等信息。
所有者權(quán)限
這一點相信你應該明白了,至于所屬用戶組權(quán)限,是指你所在的用戶組中的所有其它用戶對于該文件的權(quán)限,比如,你有一個艾派德,那么這個用戶組權(quán)限就決定了你的兄弟姐妹有沒有權(quán)限使用它破壞它和占有它。
鏈接數(shù)
鏈接到該文件所在的 inode 結(jié)點的文件名數(shù)目
以 inode 結(jié)點大小為單位來表示的文件大小,你可以給 ls 加上 -lh 參數(shù)來更直觀的查看文件的大小。
明白了文件權(quán)限的一些概念,我們順帶補充一下關(guān)于 ls 命令的一些其它常用的用法:
顯示除了 .(當前目錄)和 ..(上一級目錄)之外的所有文件,包括隱藏文件
(Linux 下以 . 開頭的文件為隱藏文件)。
$ ls -A
當然,你可以同時使用 -A 和 -l 參數(shù):
$ ls -Al
查看某一個目錄的完整屬性,而不是顯示目錄里面的文件屬性:
$ ls -dl <目錄名>
顯示所有文件大小,并以普通人類能看懂的方式呈現(xiàn):
$ ls -AsSh
其中小 s 為顯示文件大小,大 S 為按文件大小排序,若需要知道如何按其它方式排序,請使用“man”命令查詢。
2.2 變更文件所有者
假設(shè)目前是 lilei 用戶登錄,新建一個文件,命名為 “ iphone6 ”:
$ touch iphone6
可見文件所有者是 lilei :
現(xiàn)在,換回到 shiyanlou 用戶身份,使用以下命令變更文件所有者為 shiyanlou :
$ cd /home/lilei
$ ls iphone6
$ sudo chown shiyanlou iphone6
現(xiàn)在查看,發(fā)現(xiàn) 文件所有者成功修改為 shiyanlou :
2.3 修改文件權(quán)限
如果你有一個自己的文件不想被其他用戶讀、寫、執(zhí)行,那么就需要對文件的權(quán)限做修改,這里有兩種方式:
方式一:二進制數(shù)字表示
每個文件的三組權(quán)限(擁有者,所屬用戶組,其他用戶,記住這個順序是一定的)對應一個 " rwx ",也就是一個 “ 7 ” ,所以如果我要將文件“ iphone6 ”的權(quán)限改為只有我自己可以用那么就這樣:
$ chmod 700 iphone6
現(xiàn)在,其他用戶已經(jīng)不能讀這個“ iphone6 ”文件了:
方式二:加減賦值操作
完成上述相同的效果,你可以:
$ chmod go-rw iphone6
g、o 還有 u 分別表示 group、others 和 user,+ 和 - 分別表示增加和去掉相應的權(quán)限。
三、更多
adduser 和 useradd 的區(qū)別是什么?
答:useradd 只創(chuàng)建用戶,創(chuàng)建完了用 passwd lilei 去設(shè)置新用戶的密碼。adduser 會創(chuàng)建用戶,創(chuàng)建目錄,創(chuàng)建密碼(提示你設(shè)置),做這一系列的操作。其實 useradd、userdel 這類操作更像是一種命令,執(zhí)行完了就返回。而 adduser 更像是一種程序,需要你輸入、確定等一系列操作。
擴展:在Ubuntu中以root身份新增了一個用戶,passwd設(shè)置了登錄密碼,開機登錄時(unity界面),輸入密碼,屏幕閃了一下,立刻又回到登錄界面了,以為密碼錯了,可是ctrl+alt+f1進入命令行l(wèi)ogin時輸入之后就進去了。不知道哪里出了問題,查了資料后有的說顯卡不支持unity默認圖形界面,覺得不太可能。晚上回來又找了找,發(fā)現(xiàn)是命令用的不合適,我用的是useradd xxx,實際上應該用adduser xxx(或者用系統(tǒng)提供的圖形界面創(chuàng)建用戶賬號),否則不能創(chuàng)建/home下的用戶文件夾,就無法登錄圖形界面。
Linux 還有一些關(guān)于隱藏權(quán)限和特殊權(quán)限的內(nèi)容,想全面了解 Linux 權(quán)限管理這部分內(nèi)容的用戶可以通過其它方式學習。
四、作業(yè)
添加一個用戶 loutest,使用 sudo 創(chuàng)建文件 /opt/forloutest,設(shè)置成用戶 loutest 可以讀寫。截圖并把操作過程寫入實驗報告。
提示: 如何創(chuàng)建一個文件呢?可以考慮 touch 命令,這個命令可以創(chuàng)建一個空文件。