簡介
本手冊的目的
本手冊主要用來學(xué)習(xí)linux的,對于linux的學(xué)習(xí)開始于我的大學(xué)時代,剛開始的目的僅僅是為了不玩游戲而想要拋棄windows陣營,但在office、學(xué)校管理系統(tǒng)、CAD尤其是騰訊系軟件等在linux系統(tǒng)下的糟糕體驗(yàn)而最終沒有堅持下來。
這一次重新檢起linux的學(xué)習(xí),希望在學(xué)習(xí)的同時將其整理成手冊以便以后查閱以及督促自己的學(xué)習(xí)。
發(fā)行版的選擇
首先我們給出一個發(fā)行版的時間線:

發(fā)行版時間線圖表網(wǎng)站
發(fā)行版介紹
從上面的圖表中可以看到,發(fā)行版實(shí)在太多了。你可以在DistroWatch.com網(wǎng)站上查詢到幾百個不同的發(fā)行版。
但是我們還可以發(fā)現(xiàn)linux發(fā)行版可以分為三個主要的分支:RedHat、Slackware和Debian。每一個分支下都擁有一個最具代表性的商業(yè)服務(wù)器級的發(fā)行版。分別對應(yīng)的是Red Hat Enterprise Linux簡稱RHEL,SUSE Linux Enterprise簡稱SUSE,以及Ubuntu。接下來我們來分別介紹下這幾個發(fā)行版:
- RedHat: 其本身是一個收費(fèi)的發(fā)行版,當(dāng)然也可以免費(fèi)使用,但是你將得不到任何系統(tǒng)升級服務(wù),也得不到任何技術(shù)支持。其包管理方式采用基于RPM包的YUM包管理方式。其重點(diǎn)在穩(wěn)定性而非持續(xù)跟新上,所以其軟件倉庫中的軟件比較少而且都相對比較老。通常被用于服務(wù)器端。
- CentOS:該發(fā)行版是利用完全免費(fèi)的RHEL的源代碼重新編譯而成的,免費(fèi)提供給大家使用,所以本質(zhì)上與RHEL沒有什么區(qū)別。唯一的區(qū)別就是更新的頻率沒有RHEL快。
- Fedora:可以說是RHEL的試驗(yàn)田,RedHat將一些新的技術(shù)應(yīng)用到該發(fā)行版中,以便觀察是否穩(wěn)定,當(dāng)該技術(shù)穩(wěn)定后會加入到下一版的RHEL中,所以通常fedora穩(wěn)定性會比較差,最好只用于桌面系統(tǒng)。
- Debian: 是社區(qū)Linux的典范,是迄今為止最遵循GNU規(guī)范的Linux發(fā)行版。其包管理采用apt/dpkg的方式,采用DEB包形式。其分為三個版本分支:stable為最穩(wěn)定最安全版本通常用于服務(wù)器,unstable為最新的測試版本,包含最新的軟件包,相對的也具有最多的bug。testing版本都經(jīng)過unstable中的測試,相對比較穩(wěn)定也支持不少新技術(shù),一般用于桌面。
- Ubuntu: 基于Debian的unstable版本加強(qiáng)而來。繼承了Debian的優(yōu)點(diǎn),并且擁有自己獨(dú)特的優(yōu)勢??梢哉f是擁有最多使用人群的linux發(fā)行版本。
- Elementary OS: 基于Ubuntu而來,被譽(yù)為最美linux發(fā)行版。其桌面環(huán)境稱為Pantheon基于Gnome構(gòu)建。
- Deepin: 基于Ubuntu而來,專為國人打造的Linux發(fā)行版。由深度科技開發(fā),其中集成了深度音樂、深度截圖、深度視頻等程序。并且其應(yīng)用程序倉庫中包含QQ、阿里旺旺等國人必不可少的程序。
- Linux Mint: 提供了經(jīng)典桌面配置的現(xiàn)代發(fā)行版,如果是從windows轉(zhuǎn)換過來的新手,可以使用這個發(fā)行版本,他提供了普通家庭日常所需的幾乎所有的應(yīng)用。
- Ubuntu: 基于Debian的unstable版本加強(qiáng)而來。繼承了Debian的優(yōu)點(diǎn),并且擁有自己獨(dú)特的優(yōu)勢??梢哉f是擁有最多使用人群的linux發(fā)行版本。
- Slackware: 與其他開發(fā)版不同,它堅持KISS(Keep It Simple Stupid)原則,也就是說沒有任何配置系統(tǒng)的圖形界面工具。在一開始使用的時候會相對困難些,但是會更加的靈活和透明。Slackware沒有如RPM DEB之類的軟件包管理方式。其軟件包都是通常的tgz格式文件再加上安裝腳本來完成的。
- openSUSE: 由德國一家公司開發(fā)的發(fā)行版。以Slackware為基礎(chǔ),并提供了完整的桌面環(huán)境和圖形程序支持。
- Arch Linux: 該發(fā)行版本采用滾動升級的策略,其盡力保持軟件處于最新的穩(wěn)定版本,只要不出現(xiàn)系統(tǒng)軟件包破損都盡量使用最新的版本。所以他的軟件倉庫也包含最全的軟件。其倉庫中即提供開源、自由的軟件,也包含閉源軟件。其宗旨是實(shí)用性大于意識形態(tài)。Arch采用Pacman包管理系統(tǒng)。而且其官方Wiki以及社區(qū)我感覺是最好的。
- manjaro: 該發(fā)行版基于Arch創(chuàng)建,其提供了一個更簡單的方法來安裝和使用基于Arch的發(fā)行版。Arch雖然是一個前瞻性很強(qiáng)的Linxu發(fā)行版,但對于新手并不太友好,而Manjaro就是為了解決這個問題而出現(xiàn)的。
本手冊使用的發(fā)行版
看似很難抉擇,但實(shí)際上沒有什么,不管是誰家的發(fā)行版,其本質(zhì)都是一樣的。使用的都是linux內(nèi)核。所謂的發(fā)行版只不過是給這個內(nèi)核加上一堆應(yīng)用程序而組成一個操作系統(tǒng)而已。而這些應(yīng)用程序很大一部分都是來源于GNU社區(qū),代碼都是一樣的,所以其內(nèi)在并沒有多大的差別。
其主要的差別體現(xiàn)在管理工具的選用上。不同的發(fā)行版可能對某種特性有不同的偏好。尤其是包管理的不同。目前比較主流的包管理有YUM紅帽系,APT debian系以及pacman Arch系。
所以針對于桌面系統(tǒng):yum系使用fedora,apt系使用ubuntu、elementary OS、Deepin等,pacman系使用manjaro。而針對與服務(wù)器可以使用centos ubuntu server等。
本手冊采用manjaro作為學(xué)習(xí)機(jī),具體為manjaro18.1.5版本。之所以采用該發(fā)行版純粹是因?yàn)楹每?,并且pacman實(shí)在太好用了,也不能說pacman好用而是社區(qū)的力量是強(qiáng)大的,提供了諸多軟件供pacman使用。
安裝系統(tǒng)
參看我其他的博文
圖形界面
linux內(nèi)核本身是沒有圖形界面的。實(shí)際上linux只是一個內(nèi)核。而我們之所以能通過圖形用戶界面來使用linux,是因?yàn)橐粋€軟件提供了該功能。
其中圖形界面有幾個概念經(jīng)?;煜?X/X11 XFree86/Xorg KDE/GNOME。我們通過對這三個概念的解釋來說明linux的圖形界面是什么。
X不是程序而是協(xié)議
X是一個協(xié)議,就像HTTP協(xié)議、IP協(xié)議一樣。一個基于X協(xié)議的應(yīng)用程序需要運(yùn)行并顯示內(nèi)容時他就連接到X服務(wù)器,開始用X協(xié)議與服務(wù)器交談。比如一個X應(yīng)用程序要在屏幕上輸出一個圓,他就用X協(xié)議告訴X服務(wù)器。
而X11 代表的是X協(xié)議的第十一個版本。類似于HTTP 1.1
XFree86是一個實(shí)現(xiàn)了X協(xié)議的服務(wù)器軟件
XFree86是一個軟件,他具體實(shí)現(xiàn)了X協(xié)議。就相當(dāng)于Apache實(shí)現(xiàn)了HTTP協(xié)議一樣。起初XFree86是以GPL許可發(fā)行的,后來開發(fā)商更改了許可協(xié)議,這就引起了GNU社區(qū)的不滿,于是從XFree86 4.4 RC2衍生出了xorg。目前幾乎所有開源的類Unix系統(tǒng)都使用xorg。
有了服務(wù)器還需要有X客戶端程序
類似于Apache實(shí)現(xiàn)了HTTP協(xié)議的服務(wù)器軟件,而瀏覽器就是一個客戶端程序。同理xorg是一個實(shí)現(xiàn)了X協(xié)議的服務(wù)端軟件,也就是需要一個客戶端軟件通常我們稱之為窗口管理器(window manager WM)。其顯見的作用就是繪制鼠標(biāo)位置、應(yīng)用程序的移動、最小化、最大化等。
圖形界面操作環(huán)境是一系列軟件的集和
KDE/GNOME是linux的圖形界面操作環(huán)境。他們不僅有一個窗口管理器(KDE的WM是KWin,GNOME的WM是Metacity),還有很多配套的應(yīng)用軟件和方便使用的桌面環(huán)境,比如任務(wù)欄、開始菜單、桌面圖標(biāo)等。
DM又是什么鬼
對于那些默認(rèn)使用圖形用戶界面的Linux系統(tǒng),還有一個十分重要的X客戶端需要啟動,就是顯示管理器(Display Manager DM)。這個是專門負(fù)責(zé)圖形界面的用戶登陸問題的。也就是說,系統(tǒng)啟動之后第一個要啟動的X客戶端程序就應(yīng)該是DM,而且沒有人可以關(guān)閉它。
linux用戶和用戶組管理
多用戶多任務(wù)分時操作系統(tǒng)
- 多用戶:可以讓多個人使用同一臺電腦而且不能互相窺探對方的秘密。
- 多任務(wù):當(dāng)你使用電腦的時候可以一邊聽音樂一邊玩游戲。
- 分時:將電腦的時間資源適當(dāng)分配給所有使用者身上,讓所有使用者有獨(dú)占機(jī)器的感覺。
通常我們說一個操作系統(tǒng)會說他支持多用戶多任務(wù)。這是因?yàn)橐粋€分時系統(tǒng),支持多任務(wù)是其與生俱來的本質(zhì)。
用戶的身份
Linux從誕生之日起就是多用戶的,而對多用戶的管理簡單來說就是管理用戶的等級以及用戶對文件的訪問權(quán)限。
Linux下用戶等級分為兩個等級:root和非root。root用戶在linux下?lián)碛兄粮邿o上的權(quán)力,所以一個系統(tǒng)只能有一個root用戶其用戶名就是root。而非root用戶的權(quán)力是受限的,只能訪問由root規(guī)定的文件或者自己的文件。
理解用戶角色
linux是一個多用戶操作系統(tǒng),所以可以在linux中添加n多的用戶,具體n的數(shù)字為2的32次方個。
在linux系統(tǒng)中還有一些用戶是用來完成特定任務(wù)的,比如nobody、admin、ftp等。需要注意的是在Linux系統(tǒng)中無論這些用戶多么厲害多么特殊,主要不是root,他就一定是普通用戶,權(quán)力大小都是相同的。
雖然用戶角色不能更權(quán)限靠上關(guān)系,但是不同的角色還是有待遇區(qū)別的,所謂的待遇就是是否擁有密碼、home目錄以及shell這些資源。例如nobody用戶可以用于Nginx的工作進(jìn)程。對于這類用戶一般是不分配密碼和shell的。甚至連home目錄都沒有。究其原因就是很多服務(wù)程序默認(rèn)使用這些用戶,如果設(shè)置了密碼,程序就無法自動運(yùn)行了。其次因?yàn)椴粫腥耸褂眠@個用戶登陸系統(tǒng)也就沒有必要分配shell以及設(shè)置home目錄了。
/etc/passwd文件查看用戶
該文件是系統(tǒng)用戶配置文件,存儲了系統(tǒng)中所有用戶的基本信息。并且所有用戶都可以對此文件執(zhí)行讀操作。
[hncjygd@hncjygd-pc ~]$ cat /etc/passwd
root:x:0:0::/root:/bin/bash
nobody:x:65534:65534:Nobody:/:/usr/bin/nologin
dbus:x:81:81:System Message Bus:/:/usr/bin/nologin
bin:x:1:1::/:/usr/bin/nologin
daemon:x:2:2::/:/usr/bin/nologin
mail:x:8:12::/var/spool/mail:/usr/bin/nologin
ftp:x:14:11::/srv/ftp:/usr/bin/nologin
http:x:33:33::/srv/http:/usr/bin/nologin
systemd-journal-remote:x:982:982:systemd Journal Remote:/:/usr/bin/nologin
systemd-network:x:981:981:systemd Network Management:/:/usr/bin/nologin
systemd-resolve:x:980:980:systemd Resolver:/:/usr/bin/nologin
...
tss:x:967:967:tss user for tpm2:/:/usr/bin/nologin
usbmux:x:140:140:usbmux user:/:/usr/bin/nologin
hncjygd:x:1000:1000:hncjygd:/home/hncjygd:/bin/bash
可以看到,passwd文件中的內(nèi)容非常規(guī)律,每一行對應(yīng)一個用戶。默認(rèn)情況下Linux系統(tǒng)有非常多的用戶,這些用戶中的絕大多數(shù)是系統(tǒng)或服務(wù)正常運(yùn)行所必須的用戶通常被稱為系統(tǒng)用戶或偽用戶。這些用戶無法登陸也不能刪除,一旦刪除依賴于這些用戶的服務(wù)或程序就不能正常運(yùn)行了。
每一行表示一個用戶其具體含義如下:
用戶名:密碼:UID:GID:描述性信息:家目錄:默認(rèn)shell
- 用戶名:一串代表用戶身份的字符串
- 密碼:全部都是x表示,并不是真正的密碼,真正的密碼保存在/etc/shadow文件中。雖然x并不代表真正的密碼,但是也不能刪除,如果刪除了x那么系統(tǒng)會認(rèn)為這個用戶沒有密碼,從而導(dǎo)致只輸入用戶名而不用輸入密碼就可以登陸。
- UID:這是用戶ID,每個用戶都有唯一的UID,Linux系統(tǒng)通過UID來識別不同的用戶。實(shí)際上UID就是一個0~65535之間的數(shù)。其中有一些約定俗成的規(guī)定:
- 0:超級用戶即root的UID
- 1~999:系統(tǒng)用戶,此范圍的UID保留給系統(tǒng)使用。每個發(fā)行版可能不一樣
- 1000~65535:普通用戶,例如你新建的第一個用戶的UID就是1000.
- GID:用戶組ID。其也是一個0~65535之間的數(shù)。其規(guī)定與UID差不多。但是還有一些不同的概念:
- 初始組:在建立一個新用戶的時候通常用該用戶的用戶名創(chuàng)建一個以該用戶名相同的組名作為該用戶的初始組。每個用戶的初始組只能有一個
- 附加組:指用戶可以加入多個其他的用戶組,附加組可以有多個
- passwd文件中的GID是用戶初始組的GID
- 描述性信息:這個字段沒有什么重要的用途,默認(rèn)與用戶名相同。
- 家目錄:默認(rèn)情況下為/home/[userName]
- 默認(rèn)的Shell:shell就是Linux的命令解釋器,是用戶和Linux內(nèi)核之間溝通的橋梁。通常你新建的用戶使用linux系統(tǒng)默認(rèn)使用的命令解釋器bash(/bin/bash),當(dāng)然也可以使用sh、csh等。我們也可以將這個字段更改為其他程序:
- /bin/bash 表示該用戶可以使用普通用戶的所有權(quán)限
- /sbin/nologin 改為此表示用戶不能登陸
- /usr/bin/passwd 表示用戶可以登陸,但登陸后只能修改自己的密碼
- 這里并不能隨便寫入和登陸沒有關(guān)系的命令例如寫成 /bin/ls ,系統(tǒng)并不能識別這個命令,同時也就意味著這個用戶不能登陸
/etc/shadow文件
/etc/shawdow文件,用于存儲linux系統(tǒng)中用戶的密碼信息,又稱為影子文件。
在以前密碼是存放在/etc/passwd文件,由于該文件允許所有用戶讀取,容易導(dǎo)致用戶密碼泄露。因此Linux系統(tǒng)將用戶的密碼信息從passwd文件中分離出來,并單獨(dú)放到了此文件中。而/etc/shadow文件只有root用戶才擁有讀權(quán)限。
[hncjygd@hncjygd-pc ~]$ sudo cat /etc/shadow
root:$6$2sICgKsL37jQyg5b$Kz.Np6BqqUjMlY60tPsdxkCMxUpmCGbArH4nr/eueEJ053XpdCI3q4zTj6.1h6d31rjAIv4JthcVoeUVjXheS/:18277::::::
nobody:!!:18259::::::
dbus:!!:18259::::::
bin:!!:18259::::::
daemon:!!:18259::::::
mail:!!:18259::::::
ftp:!!:18259::::::
...
tss:!!:18259::::::
usbmux:!!:18259::::::
hncjygd:$6$KBiD/hKgfEtp33Ak$Dtu6nnp0X87ysZfA6CSVHL5RyK/VAYfjLnul7Mhh/xXtS0JxWPaM8R0RhFhmy90fs9/zH1LeB3G7ydwTiIgm01:18277:0:99999:7:::
其每行也代表一個用戶,其具體信息為:
用戶名:加密密碼:最后一次修改時間:最小修改時間間隔:密碼有效期:密碼需要變更前的警告天數(shù):密碼過期后的寬限時間:帳號失效時間:保留字段
- 用戶名:與/etc/passwd文件相同
- 加密密碼:目前l(fā)inux使用SHA512加密密碼。一些系統(tǒng)用戶的密碼是!!或*,這代表沒有密碼。如果你在創(chuàng)建用戶時不設(shè)置密碼的情況下該字段也為!!
- 最后一次修改時間:表示最后一次修改密碼的時間。在linux中計算日期的時間是以1970年1月1日作為1不斷累計得到的時間。到了1971年1月1日則為366。
- 最小修改時間間隔:該字段規(guī)定從最后一次修改時間算起,多長時間不能修改密碼,如果是0就表示密碼隨時可以修改,如果是10則表示10天后才能修改密碼。
- 密碼有效期: 表示在最后一次修改時間算起多長時間內(nèi)需要再次變更密碼。默認(rèn)為999999也就是273年,可以認(rèn)為永久生效。管理服務(wù)器時,通過這個字段強(qiáng)制用戶定期修改密碼。
- 密碼需要變更前的警告天數(shù):當(dāng)帳號密碼有效期快到時,系統(tǒng)會發(fā)出警告信息告訴該賬戶需要修改密碼
- 密碼過期后的寬限天數(shù):如果密碼過期后沒有被修改,允許寬限的天數(shù)。如果還沒有修改系統(tǒng)將不再讓此賬戶登陸。
- 帳號失效時間:同第三個字段相同,使用自1970年1月1日以來的總天數(shù)作為帳號的失效時間,該字段表示,帳號在此字段規(guī)定的時間之外,不論你的密碼是否過期,都將無法使用。該字段通常被使用在具有收費(fèi)服務(wù)的系統(tǒng)中。
- 保留:這個字段目前沒有使用
/etc/group
該文件時用戶組配置文件。對應(yīng)于/etc/passwd文件中每行用戶的GID。
[hncjygd@hncjygd-pc ~]$ cat /etc/group
root:x:0:root
adm:x:999:daemon
wheel:x:998:hncjygd
kmem:x:997:
tty:x:5:
utmp:x:996:
audio:x:995:
...
sddm:x:968:
tss:x:967:
usbmux:x:140:
hncjygd:x:1000:
可以看到,每一行代表一個用戶組。其含義為:
組名:密碼:GID:該用戶組中的用戶列表
- 組名:用戶組的名稱
- 組密碼:x僅僅是作為表示,具體密碼位于/etc/gshadow文件中。這個密碼主要用來指定組管理員的,由于系統(tǒng)中的帳號非常多,root用戶可能沒有時間進(jìn)行用戶的組調(diào)整,這時可以給用戶組指定管理員,如果有用戶需要加入或退出某個用戶組,可以由該組管理員替代root進(jìn)行管理。這個功能目前很少使用了,也就很少在設(shè)置組密碼了。如果需要賦予某個用戶調(diào)整某個用戶組的權(quán)限,可以使用sudo命令替代。
- GID:組的ID.Linux系統(tǒng)是通過GID識別組的,而組名只是為了便于管理員記憶。
- 組中的用戶:此字段列出了每個組中的用戶。需要注意的是如果該用戶是這個用戶的初始組,則該用戶不會寫入這個字段。多個用戶是用逗號隔開的。
/etc/gshadow文件
該文件存儲了組用戶的密碼信息。
[hncjygd@hncjygd-pc ~]$ sudo cat /etc/gshadow
root:::root
adm:!!::daemon
wheel:!!::hncjygd
kmem:!!::
tty:!!::
...
sddm:!!::
tss:!!::
usbmux:!!::
hncjygd:!::
其每行代表一個組用戶的密碼信息:
組名:加密密碼:組管理員:組附加用戶列表
- 組名:同/etc/group
- 加密密碼:通常不是組密碼,該這段通常為空。有時也為!指該群組沒有組密碼也不設(shè)置管理員。
- 組管理員:從系統(tǒng)管理員的角度來說,該文件最大的功能就是創(chuàng)建群組管理員。群組管理員的作用就是分擔(dān)root任務(wù),當(dāng)某個用戶想要加入某群組的時候,root來不及回應(yīng)的時候可以讓群組管理員來管理。在目前由于sudo的使用,該功能已經(jīng)很少被提及了。
- 組中的附加用戶:與/etc/group相同
管理用戶和組
linux系統(tǒng)為用戶和組的增刪改查提供了一些基本的命令。這些命令的作用機(jī)制就是對/etc/passwd /etc/group則兩個文件進(jìn)行增刪改查來完成的。外加一個/etc/shadow /etc/gshadow兩個文件來專門保存相關(guān)的密碼。
管理用戶
useradd添加用戶
adduser/useradd 這兩個命令都可以。通常我們使用useradd
基本格式: useradd [選項] 用戶名
| 選項 | 含義 |
|---|---|
| -u | 手動指定用戶的UID |
| -d | 手動指定用戶的主目錄 |
| -c | 手動指定用戶說明信息 |
| -g | 手動指定初始組 |
| -G | 指定用戶的附加組 |
| -s | 手動指定用戶的shell,默認(rèn)為/bin/bash |
| -e | 指定用戶的失效日期,格式為YYYY-MM-DD |
| -m | 建立用戶時強(qiáng)制建立用戶的家目錄,在建立系統(tǒng)用戶時,該選項時默認(rèn)的 |
| -r | 創(chuàng)建系統(tǒng)用戶,也就是UID在1~999之間,公系統(tǒng)程序使用,該參數(shù)默認(rèn)不會創(chuàng)建家目錄 |
useradd usertest #以默認(rèn)設(shè)置創(chuàng)建用戶
useradd -u 1100 -g usertest -c "test user" usertest1 #設(shè)置相應(yīng)的參數(shù)來創(chuàng)建一個用戶
默認(rèn)參數(shù)由useradd的兩個配置文件中定義:/etc/default/useradd文件以及/etc/login.defs文件
/etc/default/useradd文件
其中
# useradd defaults file for ArchLinux
# original changes by TomK
GROUP=users
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no
我們來逐一介紹:
- GROUP=users:這個選項用于建立用戶的默認(rèn)組。也就是說,在添加每個用戶時,用戶的創(chuàng)建與用戶名相同的組來作為用戶的初始組(Linux中默認(rèn)用戶組有兩種機(jī)制:一種私有用戶組機(jī)制,即manjaro這種,另一種就是公共用戶組機(jī)制例如設(shè)置GRPUP=200,那么新建的用戶的初始組ID都是200)
- HOME=/home:指定用戶主目錄的默認(rèn)位置,所有新建用戶的主目錄默認(rèn)都在/home下
- INACTIVE=-1:指的是密碼過期后的寬限天數(shù),也就是/etc/shadow文件的第七個字段,默認(rèn)-1,代表所有新建的用戶密碼永遠(yuǎn)不會失效
- EXPIRE= :表示密碼失效時間,也就是/etc/shadow文件的第八個字段,默認(rèn)為空,代表永久有效
- SHELL=/bin/bash:表示新建的用戶默認(rèn)的Shell
- SKEL=/etc/skel:在創(chuàng)建一個新用戶后,你會發(fā)現(xiàn),該用戶主目錄并不是空目錄,而是有.bash_profile .bashrc等文件,這些文件都是從/etc/skel目錄中自動復(fù)制過來的
- CREATE_MAIL_SPOOL=no:指的是給新建用戶建立郵箱,默認(rèn)是不創(chuàng)建。如果是yes對于所有新建用戶系統(tǒng)都會在/var/spool/mail/目錄下創(chuàng)建和用戶名相同的郵箱。
要想更改這個文件的內(nèi)容,除了直接使用vim來改寫這個文件,linux也為用戶提供了useradd -D參數(shù)來修改這個文件中的內(nèi)容。
| 選項 | 含義 |
|---|---|
| -b | 設(shè)置HOME=的內(nèi)容 |
| -e | 設(shè)置EXPIRE=的內(nèi)容,參數(shù)格式為YYYY-MM-DD |
| -f | 設(shè)置INACTIVE=的內(nèi)容,參數(shù)為整數(shù) |
| -g | 設(shè)置GROUP=可以是UID也可以是組名 |
| -s | 設(shè)置SHELL= 的內(nèi)容 |
/etc/login.defs文件
該文件是shadow密碼套件配置。也是創(chuàng)建用戶時對一些基本屬性作默認(rèn)設(shè)置。
#
# /etc/login.defs - Configuration control definitions for the login package.
#
# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH.
# If unspecified, some arbitrary (and possibly incorrect) value will
# be assumed. All other items are optional - if not specified then
# the described action or option will be inhibited.
#
# Comment lines (lines beginning with "#") and blank lines are ignored.
#
# Modified for Linux. --marekm
#
# Delay in seconds before being allowed another attempt after a login failure
#
FAIL_DELAY 3
#
# Enable display of unknown usernames when login failures are recorded.
#
LOG_UNKFAIL_ENAB no
#
# Enable logging of successful logins
#
LOG_OK_LOGINS no
#
# Enable "syslog" logging of su activity - in addition to sulog file logging.
# SYSLOG_SG_ENAB does the same for newgrp and sg.
#
SYSLOG_SU_ENAB yes
SYSLOG_SG_ENAB yes
#
# If defined, either full pathname of a file containing device names or
# a ":" delimited list of device names. Root logins will be allowed only
# upon these devices.
#
CONSOLE /etc/securetty
#CONSOLE console:tty01:tty02:tty03:tty04
#
# If defined, all su activity is logged to this file.
#
#SULOG_FILE /var/log/sulog
#
# If defined, file which maps tty line to TERM environment parameter.
# Each line of the file is in a format something like "vt100 tty01".
#
#TTYTYPE_FILE /etc/ttytype
#
# If defined, the command name to display when running "su -". For
# example, if this is defined as "su" then a "ps" will display the
# command is "-su". If not defined, then "ps" would display the
# name of the shell actually being run, e.g. something like "-sh".
#
SU_NAME su
#
# *REQUIRED*
# Directory where mailboxes reside, _or_ name of file, relative to the
# home directory. If you _do_ define both, MAIL_DIR takes precedence.
# QMAIL_DIR is for Qmail
#
#QMAIL_DIR Maildir
MAIL_DIR /var/spool/mail
#
# If defined, file which inhibits all the usual chatter during the login
# sequence. If a full pathname, then hushed mode will be enabled if the
# user's name or shell are found in the file. If not a full pathname, then
# hushed mode will be enabled if the file exists in the user's home directory.
#
HUSHLOGIN_FILE .hushlogin
#HUSHLOGIN_FILE /etc/hushlogins
#
# *REQUIRED* The default PATH settings, for superuser and normal users.
#
# (they are minimal, add the rest in the shell startup files)
ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/bin
ENV_PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/bin
#
# Terminal permissions
#
# TTYGROUP Login tty will be assigned this group ownership.
# TTYPERM Login tty will be set to this permission.
#
# If you have a "write" program which is "setgid" to a special group
# which owns the terminals, define TTYGROUP to the group number and
# TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign
# TTYPERM to either 622 or 600.
#
TTYGROUP tty
TTYPERM 0600
#
# Login configuration initializations:
#
# ERASECHAR Terminal ERASE character ('\010' = backspace).
# KILLCHAR Terminal KILL character ('\025' = CTRL/U).
# UMASK Default "umask" value.
#
# The ERASECHAR and KILLCHAR are used only on System V machines.
# The ULIMIT is used only if the system supports it.
# (now it works with setrlimit too; ulimit is in 512-byte units)
#
# Prefix these values with "0" to get octal, "0x" to get hexadecimal.
#
ERASECHAR 0177
KILLCHAR 025
UMASK 077
#
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_WARN_AGE 7
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN 1000
UID_MAX 60000
# System accounts
SYS_UID_MIN 500
SYS_UID_MAX 999
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 1000
GID_MAX 60000
# System accounts
SYS_GID_MIN 500
SYS_GID_MAX 999
#
# Max number of login retries if password is bad
#
LOGIN_RETRIES 5
#
# Max time in seconds for login
#
LOGIN_TIMEOUT 60
#
# Which fields may be changed by regular users using chfn - use
# any combination of letters "frwh" (full name, room number, work
# phone, home phone). If not defined, no changes are allowed.
# For backward compatibility, "yes" = "rwh" and "no" = "frwh".
#
CHFN_RESTRICT rwh
#
# List of groups to add to the user's supplementary group set
# when logging in on the console (as determined by the CONSOLE
# setting). Default is none.
#
# Use with caution - it is possible for users to gain permanent
# access to these groups, even when not logged in on the console.
# How to do it is left as an exercise for the reader...
#
#CONSOLE_GROUPS floppy:audio:cdrom
#
# Should login be allowed if we can't cd to the home directory?
# Default in no.
#
DEFAULT_HOME yes
#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD /usr/sbin/userdel_local
#
# Enable setting of the umask group bits to be the same as owner bits
# (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is
# the same as gid, and username is the same as the primary group name.
#
# This also enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes
#
# Controls display of the motd file. This is better handled by pam_motd.so
# so the declaration here is empty is suppress display by readers of this
# file.
#
MOTD_FILE
#
# Hash shadow passwords with SHA512.
#
ENCRYPT_METHOD SHA512
| 設(shè)置項 | 含義 |
|---|---|
| MAIL_DIR /var/spool/mail | 創(chuàng)建用戶郵箱的位置 |
| PASS_MAX_DAYS 99999 | 密碼有效期,99999默認(rèn)273年即永久有效 |
| PASS_MIN_DAYS 0 | 自上次修改密碼以來最少相隔多少天才能再次修改密碼 |
| PASS_MIN_LEN 5 | 指定密碼的最小長度,默認(rèn)為5位,但是現(xiàn)在用戶登陸時驗(yàn)證已經(jīng)被PAM模塊取代,所以該選項并不生效 |
| PASS_WARN_AGE 7 | 指定密碼到期前多少天,系統(tǒng)開始通知用戶密碼將到期 |
| UID_MIN 1000 | 指定最小UID為1000,也就是說添加用戶時默認(rèn)UID從1000開始。注意:如果手動指定一個用戶UID時1100,那么下一個創(chuàng)建的用戶的UID會從1101開始,哪怕1000~1099是空的。 |
| UID_MAX 60000 | 指定用戶最大的UID為60000 |
| GID_MIN 1000 | 指定GID最小值為500 |
| GID_MAX 60000 | 指定GID最大值為60000 |
| CREATE_HOME yes | 指定在創(chuàng)建用戶時,是否同時創(chuàng)建用戶的主目錄,yes表示創(chuàng)建,no表示不創(chuàng)建 |
| USERGROUPS_ENAB yes | 指定刪除用戶的時候是否同時刪除由該用戶初始化的用戶組 |
| ENCRYPT_METHOD SHA512 | 指定用戶密碼的加密規(guī)則,默認(rèn)采用SHA512 |
當(dāng)我們執(zhí)行了useradd命令后系統(tǒng)到底執(zhí)行了什么?
useradd usertest
1.在/etc/passwd 文件中創(chuàng)建一行數(shù)據(jù)(這也是為什么非root用戶無法使用useradd的原因其對passwd文件沒有寫權(quán)限):
usertest:x:1001:1001::/home/usertest:/bin/bash
2.在/etc/shadow文件中創(chuàng)建一行有關(guān)usertest的數(shù)據(jù):
usertest:!!:18202:0:99999:7:::
3.在/etc/group文件中創(chuàng)建一行關(guān)于usertest的用戶組數(shù)據(jù):
usertest:x:1001:
4.在/etc/gshadow文件增加一行關(guān)于group密碼的數(shù)據(jù):
usertest:!::
5.創(chuàng)建用戶的主目錄和郵箱(如果要求):
/home/usertest/
/var/spool/mail/usertest
6.將/etc/skel目錄中的配置文件復(fù)制到新用戶的主目錄中
以上就時useradd命令的全過程,如果你不想使用useradd命令,完全可以根據(jù)這個過程手動創(chuàng)建用戶。
passwd修改用戶密碼
通過useradd命令創(chuàng)建了linux用戶后。并沒有設(shè)置用戶的密碼,表現(xiàn)就在/etc/shadow中密碼列為!!,此時無法用該用戶登陸系統(tǒng),需要使用passwd來設(shè)置密碼后才可以登陸。
passwd [選項] 用戶名
從下面的選項可以看出,每個選項對應(yīng)的都是對/etc/shadow中各個字段的修改,其實(shí)直接使用vim修改shadow文件可能會跟簡單寫但也相對危險一些
普通用戶只能使用passwd修改自己的密碼,而不能修改其他用戶的密碼
還要注意如果使用普通用戶修改自己的密碼的時候時需要被驗(yàn)證的即123這樣的密碼時無法被認(rèn)可的。但是如果使用root用戶修改密碼,雖然依然無法通過驗(yàn)證但是可以強(qiáng)制修改為123這樣的弱密碼。
| 選項 | 意義 |
|---|---|
| -S | 查詢用戶的密碼狀態(tài),其實(shí)就是查詢shadow文件中此用戶的密碼內(nèi)容 |
| -l | 暫時鎖定用戶,該選項會在shadow文件中指定用戶的加密密碼前添加!,使密碼失效 |
| -u | 解鎖用戶,與-l選項相對應(yīng) |
| --stdin | 可以通過管道符輸出的數(shù)據(jù)作為用戶的密碼,主要在批量添加用戶時使用 |
| -n | 設(shè)置該用戶修改密碼后,多長時間不能再次修改密碼 |
| -x | 設(shè)置該用戶的密碼有效期 |
| -w | 設(shè)置用戶密碼過期前的警告天數(shù) |
| -i | 設(shè)置用戶密碼失效日期 |
如果忘記密碼了怎么辦?
對于非root用戶,如果忘記密碼了,直接可以讓root用戶通過passwd命令來更改該用戶密碼。
而對于root用戶丟失了密碼就需要一些特殊的方法了。
usermod修改用戶信息
通過useradd命令添加用戶后,如果不小心添加錯用戶信息了,或者對默認(rèn)的用戶信息不滿意時,后期可以通過usermod命令來修改這些信息。
usermod [選項] 用戶名
根據(jù)下面的選項可以看到基本上與useradd的參數(shù)設(shè)定差不多,但是一個是創(chuàng)建時設(shè)置,一個是創(chuàng)建后修改,其本質(zhì)都是對/etc/passwd /etc/shadow文件的修改
| 選項 | 說明 |
|---|---|
| -c | 修改用戶說明信息 |
| -d | 修改用戶主目錄 |
| -e | 修改用戶的失效日期 YYYY-MM-DD |
| -g | 修改用戶的初始組 |
| -u | 修改用戶的UID |
| -G | 修改用戶的附加組 |
| -l | 修改用戶的用戶名 |
| -L | 臨時鎖定用戶 |
| -U | 解鎖用戶與-L相對 |
| -s | 修改用戶的登陸shell |
chage修改用戶密碼狀態(tài)
chage [選項] 用戶名
| 選項 | 含義 |
|---|---|
| -l | 列出用戶的詳細(xì)密碼狀態(tài) |
| -d | 修改 /etc/shadow 文件中指定用戶密碼信息的第 3 個字段,也就是最后一次修改密碼的日期,格式為 YYYY-MM-DD |
| -m | 修改密碼最短保留的天數(shù),也就是 /etc/shadow 文件中的第 4 個字段 |
| -M | 修改密碼的有效期,也就是 /etc/shadow 文件中的第 5 個字段 |
| -W | 修改密碼到期前的警告天數(shù),也就是 /etc/shadow 文件中的第 6 個字段 |
| -i | 修改密碼過期后的寬限天數(shù),也就是 /etc/shadow 文件中的第 7 個字段 |
| -E | 修改賬號失效日期,格式為 YYYY-MM-DD,也就是 /etc/shadow 文件中的第 8 個字段 |
在實(shí)際應(yīng)用中,如果你需要修改用戶的密碼信息,直接修改/etc/shadow文件可能更加方便。但是chage也是有其使用環(huán)境的。尤其是通過修改最后一次修改密碼的日期即-d選項來強(qiáng)制讓用戶在首次登陸帳號時先修改密碼。例如:chage -d 0 usertest #通過chage命令設(shè)置此帳號的密碼創(chuàng)建的日期為1970年1月1日,這樣用戶在登陸后就必須先修改密碼才能干別的。
實(shí)際使用:如果一些學(xué)校要給學(xué)生發(fā)放一批用戶,以學(xué)號作為用戶名以及密碼交給學(xué)生,并且設(shè)置change -d 0 學(xué)號 來讓每個學(xué)生在第一次登陸時更改密碼。
userdel刪除用戶
通過上面的學(xué)習(xí)我們知道,用戶的相關(guān)數(shù)據(jù)包含在如下文件中:
- 用戶基本信息:/etc/passwd
- 用戶密碼信息:/etc/shadow
- 用戶組基本信息:/etc/group
- 用戶組密碼信息:/etc/gshadow
- 用戶家目錄:/home/[username]
- 用戶郵箱:/var/spool/mail/[username]
而對于userdel命令的作用就是從以上文件中刪除指定用戶的數(shù)據(jù)信息。
userdel -r 用戶名
-r選項表示在刪除用戶的同時刪除用戶的家目錄以及郵箱
你也可以手動刪除指定用戶,即通過對上面文件的修改來刪除用戶,但是這樣作沒什么意義錯非你為了加深對userdel命令的理解。
如果要刪除的用戶已經(jīng)使用系統(tǒng)一段時間了,那么用戶可能在系統(tǒng)的其他位置留有其他文件,僅僅使用userdel命令時無法刪除該用戶的使用痕跡的,這是你可以在使用userdel命令前,通過find -user 用戶名 命令來查出那些文件屬于該用戶一并刪除后在使用userdel命令刪除用戶。(find 默認(rèn)搜索當(dāng)前目錄下,所以要搜索整個電腦可以切換到根目錄搜索)
管理組
管理組與管理用戶差不多,只是其中的user改為group即可。其本質(zhì)也是對/etc/group /etc/gshadow文件的修改。
- groupadd [選項] 組名 添加用戶組
- -g 指定組ID
- groupmod [選項] 組名 修改用戶組
- -g 修改組ID
- -n 修改組名
- groupdel 組名 刪除組
- 其本質(zhì)就是刪除/etc/group /etc/gshadow中組相應(yīng)的行。此命令僅僅適用于刪除那些不是任何用戶初始組的群組,否則無法成功。除非你使用usermod -g更改用戶的初始組,或者刪除用戶。
gpasswd將用戶加入群組或從組中刪除
使用gpasswd命令可以為群組添加密碼,設(shè)置群組管理員以及將用戶加入群組或從組內(nèi)刪除。
gpasswd [選項] 組名
| 選項 | 功能 |
|---|---|
| 空 | 選項為空時,表示給群組設(shè)置密碼,僅 root 用戶可用。 |
| -A user1,... | 將群組的控制權(quán)交給 user1,... 等用戶管理,也就是說,設(shè)置 user1,... 等用戶為群組的管理員,僅 root 用戶可用。 |
| -M user1,... | 將 user1,... 加入到此群組中,僅 root 用戶可用。 |
| -r | 移除群組的密碼,僅 root 用戶可用。 |
| -R | 讓群組的密碼失效,僅 root 用戶可用。 |
| -a user | 將 user 用戶加入到群組中。 |
| -d user | 將 user 用戶從群組中移除。 |
注意:我們可以使用usermod -G命令將用戶加入一個群組,但是同時會產(chǎn)生一個副作用,即使用該命令后會將用戶以前加入的群組都清空(初始組除外)
而使用gpasswd命令則不會出現(xiàn)問題,所以將用戶加入某個群組最好使用gpasswd命令
newgrp切換用戶的有效組
用戶在創(chuàng)建文件的時候,該文件默認(rèn)會有組權(quán)限,而這個文件所屬的組由用戶的有效組決定。而用戶的有效組默認(rèn)情況下就是用戶的初始組。而newgrp命令可以從用戶的附加組中選擇一個群組作為用戶新的有效組。這種切換是臨時的,在關(guān)閉終端后重新開啟終端其有效組還是初始組。
su root #切換到root用戶
groupadd grouptest #新建組
gpasswd -a usertest grouptest #將usertest添加到grouptest組中
exit #退出root
touch test1 #新建一個test1文件
ls -al
-rw-rw-r--. 1 usertest usertest 0 11月 2 22:09 test1
newgrp grouptest #切換有效組
touch test2
ls -al
-rw-rw-r--. 1 usertest usertest 0 11月 2 22:09 test1
-rw-rw-r--. 1 usertest grouptest 0 11月 2 22:10 test2
exit #關(guān)閉終端
touch test3
-rw-rw-r--. 1 usertest usertest 0 11月 2 22:09 test1
-rw-rw-r--. 1 usertest grouptest 0 11月 2 22:10 test2
-rw-rw-r--. 1 usertest usertest 0 11月 2 22:13 test3
# 可見切換是臨時的
總結(jié):
- 默認(rèn)情況下有效組就是初始組
- 通過newgrp可以臨時切換有效組,前提是只能選擇附加組中的組
- 要想永久切換有效組,可是使用 usermod -g 修改用戶的初始組
其他有關(guān)命令
id查詢用戶的UID和GID
id 用戶名
uid=1001(usertest) gid=1001(usertest) groups=1001(usertest),1002(grouptest)
uid表示用戶id,gid是初始組id,groups是附加組列表
su臨時切換用戶命令
su是最簡單的用戶切換命令,通過該命令可以實(shí)現(xiàn)任何身份的切換。
注意:普通用戶到任何用戶切換都需要知曉對方的密碼,而root用戶到任何用戶的切換不需要對方密碼直接切換成功。
su [選項] 用戶名
| 選項 | 含義 |
|---|---|
| - | 當(dāng)前用戶不僅切換為指定用戶的身份,同時所用的工作環(huán)境也切換為此用戶的環(huán)境(包括 PATH 變量、MAIL 變量等),使用 - 選項可省略用戶名,默認(rèn)會切換為 root 用戶 |
| -l | 同 - 的使用類似,也就是在切換用戶身份的同時,完整切換工作環(huán)境,但后面需要添加欲切換的使用者賬號 |
| -p | 表示切換為指定用戶的身份,但不改變當(dāng)前的工作環(huán)境(不使用切換用戶的配置文件) |
| -m | 和 -p 一樣 |
| -c | 僅切換用戶執(zhí)行一次命令,執(zhí)行后自動切換回來,該選項后通常會帶有要執(zhí)行的命令 |
除了使用-c選項外,其他切換用戶的方式不會自動切換回來,需要exit命令來退出。
注意:
su和su - 區(qū)別是非常大的
如果不切換用戶環(huán)境例如使用su切換,可能導(dǎo)致很多命令無法執(zhí)行。例如雖然普通用戶可以使用su切換到root,但是使用的配置文件依然是普通用戶的,其環(huán)境變量中不包含/sbin /usr/sbin等root用戶命令的保存路徑,這就導(dǎo)致你無法使用這里的命令除非全路徑調(diào)用。
簡單的理解就是su切換的不徹底,而su - 切換的徹底就好了。
whoami和who am i命令用于打印用戶名時的區(qū)別
whoami:用于打印當(dāng)前執(zhí)行操作的用戶名
who am i:用于打印登陸當(dāng)前l(fā)inux系統(tǒng)的用戶名
加入我們使用usertest登陸了linux系統(tǒng),在終端中使用su切換到root命令。此時執(zhí)行whoami顯示的就是root。而使用who am i顯示的則是:usertest pts/0 2019-11-02 22:17 (:0)
對于:whoami等價于 id -un 命令 而who am i 等價于 who -m 命令。
sudo命令詳解
linux的用戶除了root就是普通用戶,而普通用戶的權(quán)限非常的低,甚至連安裝軟件的權(quán)力都沒有。很多時候系統(tǒng)管理員為了能讓普通用戶具備一些root用戶的特權(quán),就需要賦予他們相應(yīng)的權(quán)限。使用su命令是一個方法,但是該命令需要告訴使用人管理員密碼,并且root賬戶太過強(qiáng)大。因此賦予權(quán)限的就交給了一個叫做sudo的命令了。
但是并非任何普通用戶都擁有sudo特權(quán)。對于一些面向桌面的發(fā)行版,比如manjaro Ubuntu Fedora等,他們的設(shè)計理念就是日常應(yīng)用,比較偏向賦予普通用戶相對較為寬泛的權(quán)力,所以在系統(tǒng)的配置中,會給一類基于普通用戶的管理員角色,這類角色被賦予了sudo特權(quán)。而對于CentOS這樣用于服務(wù)器的,強(qiáng)調(diào)的是安全可靠,所以在系統(tǒng)的配置中,除非root用戶指定,否則不會讓普通用戶具有sudo特權(quán)。
而給某個用戶賦予sudo特權(quán),實(shí)際上就是更改/etc/sudoers文件中的內(nèi)容。
sudo [-b] [-u 新使用者帳號] 要執(zhí)行的命令
-b: 將后續(xù)的命令放到背景中讓系統(tǒng)自動運(yùn)行,不對但前的shell環(huán)境產(chǎn)生影響
-u: 后面可以接需要切換的用戶名,若無此項則代表切換身份為root
-l:用于顯示當(dāng)前用戶可以用sudo執(zhí)行那些命令
/etc/sudoers文件
首先讓我們看看該文件中包含那些內(nèi)容:
## sudoers file.
##
## This file MUST be edited with the 'visudo' command as root.
## Failure to use 'visudo' may result in syntax or file permission errors
## that prevent sudo from running.
##
## See the sudoers man page for the details on how to write a sudoers file.
##
##
## Host alias specification
##
## Groups of machines. These may include host names (optionally with wildcards),
## IP addresses, network numbers or netgroups.
# Host_Alias WEBSERVERS = www1, www2, www3
##
## User alias specification
##
## Groups of users. These may consist of user names, uids, Unix groups,
## or netgroups.
# User_Alias ADMINS = millert, dowdy, mikef
##
## Cmnd alias specification
##
## Groups of commands. Often used to group related commands together.
# Cmnd_Alias PROCESSES = /usr/bin/nice, /bin/kill, /usr/bin/renice, \
# /usr/bin/pkill, /usr/bin/top
# Cmnd_Alias REBOOT = /sbin/halt, /sbin/reboot, /sbin/poweroff
##
## Defaults specification
##
## You may wish to keep some of the following environment variables
## when running commands via sudo.
##
## Locale settings
# Defaults env_keep += "LANG LANGUAGE LINGUAS LC_* _XKB_CHARSET"
##
## Run X applications through sudo; HOME is used to find the
## .Xauthority file. Note that other programs use HOME to find
## configuration files and this may lead to privilege escalation!
# Defaults env_keep += "HOME"
##
## X11 resource path settings
# Defaults env_keep += "XAPPLRESDIR XFILESEARCHPATH XUSERFILESEARCHPATH"
##
## Desktop path settings
# Defaults env_keep += "QTDIR KDEDIR"
##
## Allow sudo-run commands to inherit the callers' ConsoleKit session
# Defaults env_keep += "XDG_SESSION_COOKIE"
##
## Uncomment to enable special input methods. Care should be taken as
## this may allow users to subvert the command being run via sudo.
# Defaults env_keep += "XMODIFIERS GTK_IM_MODULE QT_IM_MODULE QT_IM_SWITCHER"
##
## Uncomment to use a hard-coded PATH instead of the user's to find commands
# Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
##
## Uncomment to send mail if the user does not enter the correct password.
# Defaults mail_badpass
##
## Uncomment to enable logging of a command's output, except for
## sudoreplay and reboot. Use sudoreplay to play back logged sessions.
# Defaults log_output
# Defaults!/usr/bin/sudoreplay !log_output
# Defaults!/usr/local/bin/sudoreplay !log_output
# Defaults!REBOOT !log_output
##
## Runas alias specification
##
##
## User privilege specification
##
root ALL=(ALL) ALL
## Uncomment to allow members of group wheel to execute any command
# %wheel ALL=(ALL) ALL
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
## Uncomment to allow members of group sudo to execute any command
# %sudo ALL=(ALL) ALL
## Uncomment to allow any user to run sudo if they know the password
## of the user they are running the command as (root by default).
# Defaults targetpw # Ask for the password of the target user
# ALL ALL=(ALL) ALL # WARNING: only use this together with 'Defaults targetpw'
## Read drop-in files from /etc/sudoers.d
## (the '#' here does not indicate a comment)
#includedir /etc/sudoers.d
要修改/etc/sudoers中的內(nèi)容,不建議直接使用vim,包括在/etc/sudoers中也有明確要求使用visudo命令來修改sudoers文件,其實(shí)visudo的實(shí)際操作與vim一樣,使用visudo的好處在于當(dāng)修改完畢后在離開修改后的頁面時系統(tǒng)會自動檢驗(yàn)/etc/sudoers文件的語法正確性。
其中有兩條沒有被注釋,我們來分析:
root ALL=(ALL) ALL 和 %wheel ALL=(ALL) ALL
用戶名/群組名 被管理主機(jī)的地址(可使用的身份) 授權(quán)的命令
用戶名/群組名:表示系統(tǒng)中的那個用戶或群組可以使用sudo,群組前要加百分號以與用戶名區(qū)別
被管理主機(jī)的地址:用戶可以指定IP地址的服務(wù)器。ALL表示可以管理任何主機(jī)。如果寫固定IP表示用戶可以管理指定的服務(wù)器。如果寫本機(jī)的IP代表指定用戶可以從任何IP地址來管理當(dāng)前服務(wù)器。
可使用的身份:就是來源用戶可以切換成什么身份也就是sudo -u后面可以接誰,ALL指代任意
授權(quán)命令:表示將什么命令授權(quán)給用戶ALL表示所有命令,要寫命令的全路徑
我們使用幾個具體的例子來解釋如何編寫sudoers文件:
# 賦予usertest sudo的所有權(quán)限
usertest ALL=(ALL) ALL
# 賦予usertest 組 sudo的所有權(quán)限
%usertest ALL=(ALL) ALL
# 賦予usertest1 sudo的所有權(quán)限并且在執(zhí)行sudo時不需要密碼
usertest1 ALL=(ALL) NOPASSWD:ALL
# 賦予usertest1 組 sudo的部分權(quán)限
# 即usertest1群組成員可以執(zhí)行
#sudo mount /mnt/cdrom
#sudo unmount /mnt/cdrom
#其余命令不可以執(zhí)行
%usertest1 ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
# 賦予usertest2組sudo除了adduser useradd權(quán)限外的所有權(quán)限
%usertest2 ALL=(ALL) ALL,!/user/sbin/adduser, !/user/sbin/useradd
使用/etc/sudoers.d文件夾
sudo可用解析/etc/sudoers.d/目錄中的文件,這樣就不需要編輯單一的/etc/sudoers文件了,可用單獨(dú)修改一個設(shè)置然后放入這個目錄中,目錄中的配置格式與/etc/sudoers是一樣的,這樣的優(yōu)點(diǎn)就是如果配置出現(xiàn)問題可以直接刪除而不用編輯sudoers這個文件。
/etc/sudoers.d/目錄中的文件是按字母順序排序加載的,點(diǎn)或者~開頭的文件被跳過,讓我們看看manjaro是如何處理的,在/etc/sudoers.d/下有一個10-installer文件,其中寫入賦予wheel組sudo權(quán)限,而你在安裝時使用的用戶名就被加入的該組所以具備sudo權(quán)限。
[hncjygd-pc sudoers.d]# ls
10-installer
[hncjygd-pc sudoers.d]# cat 10-installer
%wheel ALL=(ALL) ALL
禁止root用戶登錄
類似Ubuntu這樣的發(fā)行版其禁止root用戶登錄,而是賦予普通用戶sudo的ALL權(quán)限來實(shí)現(xiàn)系統(tǒng)管理,要想在manjaro中禁止root用戶有以下方法:
- 使用passwd命令鎖住root用戶:
passwd -l root
要想恢復(fù)則使用-u解鎖
sudo passwd -u root
- 直接編輯/etc/shadow文件,將root的加密口令替換為!
root:!:12345::::::
此時要再次啟用root重新為其設(shè)置密碼就可以了
sudo passwd root
總結(jié):實(shí)際上Ubuntu就是用的這種方法禁用的root,要想恢復(fù):
sudo passwd -u root
sudo passwd root