學習到這里关带,我發(fā)現我的macOS系統(tǒng)已經不夠用了侥涵,又不想在自己的電腦上裝Linux系統(tǒng),所以是時候真正的搞個Linux系統(tǒng)來練習了宋雏,于是我就在京東云上申請了個免費的云服務器芜飘,系統(tǒng)是CentOS 7.2 64位(新用戶免費一個月)繼續(xù)學習??
命令 | 作用 |
---|---|
useradd |
創(chuàng)建一個賬戶 |
userdel |
刪除賬戶 |
usermod |
修改賬戶 |
passwd |
修改密碼 |
chpasswd |
批量修改密碼 |
chsh |
修改用戶登錄的默認shell |
chage |
命令配合參數修改各種賬戶的有效期 |
groupadd |
創(chuàng)建組 |
groupmod |
修改組 |
umask |
修改文件默認權限 |
chmod |
已創(chuàng)建文件權限修改 |
chown |
改變文件屬主或屬組 |
chgrp |
改變文件的屬組 |
1.Linux的安全性
Linux安全系統(tǒng)的核心用戶賬戶,每一個進入Linux系統(tǒng)的用戶都會有一個唯一分配的賬戶磨总,用戶對各種對象的訪問權限取決于他們登錄系統(tǒng)時用的賬戶
每個賬戶有唯一的UID嗦明,有自己的密碼,有自己的登錄名蚪燕,系統(tǒng)只要控制每個賬戶的權限娶牌,就可以控制整個系統(tǒng)的安全
passwd文件 將登錄名和UID匹配的文件
做下面的操作 cat /etc/passwd
,查看passwd文件內容
[root@jdu4e00u53f7 ~]# 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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:997:995:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
centos:x:1000:1000:Cloud User:/home/centos:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
文件中列出了各種賬戶馆纳,這些賬戶叫做系統(tǒng)賬戶诗良,主要作用是各種進程之間訪問資源,就像前面說的鲁驶,所有運行的服務都要有一個系統(tǒng)賬戶登錄到Linux系統(tǒng)上鉴裹,才會拿到系統(tǒng)資源
*注意 上面第二行的root賬戶是Linux的系統(tǒng)管理員,他的UID固定是0
下面以root賬戶為例介紹一下上面的文件中的內容都代表什么
root:x:0:0:root:/root:/bin/bash
信息(以: 分隔) |
描述 |
---|---|
root | 用戶登錄名 |
x | 用戶密碼 |
0 | 用戶賬戶的UID |
0 | 用戶賬戶的組ID(GID) |
root | 用戶賬戶的文本描述 |
/root | 用戶HOME目錄的位置 |
/bin/bash | 用戶的默認shell |
*注意 大家會發(fā)現密碼都是x钥弯,其實不是的径荔,為了安全起見,密碼被單獨保存在另外一個叫shadow的文件中脆霎,下面介紹一下這個文件
做如下操作 cat /etc/shadow
[root@jdu4e00u53f7 ~]# cat /etc/shadow
root:$6$Z9Jjj18u77$70syd1z4TXOBY1O1I9z.:17393:0:99999:7:::
bin:*:16659:0:99999:7:::
daemon:*:16659:0:99999:7:::
adm:*:16659:0:99999:7:::
lp:*:16659:0:99999:7:::
sync:*:16659:0:99999:7:::
shutdown:*:16659:0:99999:7:::
halt:*:16659:0:99999:7:::
mail:*:16659:0:99999:7:::
operator:*:16659:0:99999:7:::
games:*:16659:0:99999:7:::
ftp:*:16659:0:99999:7:::
nobody:*:16659:0:99999:7:::
avahi-autoipd:!!:17151::::::
systemd-bus-proxy:!!:17151::::::
systemd-network:!!:17151::::::
dbus:!!:17151::::::
polkitd:!!:17151::::::
tss:!!:17151::::::
postfix:!!:17151::::::
sshd:!!:17151::::::
centos:!!:17345:0:99999:7:::
nscd:!!:17382::::::
ntp:!!:17382::::::
下面還是以root賬戶為例介紹一下上面的文件中的內容都代表什么
root:$6$Z9Jjj18u77$70syd1z4TXOBY1O1I9z.:17393:0:99999:7:::
信息(以: 分隔) |
描述 |
---|---|
root | 和passwd文件對應的用戶名 |
$6$Z9Jjj18u77$70syd1z4TXOBY1O1I9z. | 加密后的用戶密碼 |
17393 | 距離上次修改密碼后的天數(自1970.1.1開始計算) |
0 | 多少天后才能更改密碼 |
99999 | 多少天后必須更改密碼 |
7 | 密碼過期前提前多少天提醒用戶更改密碼 |
*注意 后面還有兩個::
他們中間的信息分別是
密碼過期后多少天禁用用戶賬戶
用戶賬戶被禁用日期
預留字段給將來使用
添加新用戶 useradd
useradd
命令會創(chuàng)建一個賬戶总处,他有許多參數,這里有個鏈接useradd命令詳解
創(chuàng)建時可以根據對應的參數绪穆,設置賬戶的具體信息
如果不填寫這些參數辨泳,系統(tǒng)會為新用戶默認添加一些信息虱岂,這些信息可以用命令/usr/sbin/useradd -D
查看玖院,如下
例:
[root@jdu4e00u53f7 ~]# /usr/sbin/useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
這些信息從上到下分別是賬戶組ID(GID)菠红、賬戶的HOME目錄位置、密碼過期后不會被禁用难菌、賬戶未設置賬戶過期日期试溯、新賬戶的默認shell、系統(tǒng)會將/etc/skel的文件復制到用戶的HOME目錄下郊酒、創(chuàng)建一個用于接收郵件的文件
*注意 SKEL=/etc/skel
意識是將/etc/skel的文件復制到用戶的HOME目錄下遇绞,實際上這些復制的文件就是bash shell的標準啟動文件
*注意 useradd
默認不會創(chuàng)建HOME目錄,必須添加參數-m
才可以
下面是創(chuàng)建一個默認賬戶的例子
[root@jdu4e00u53f7 ~]# useradd -m test
[root@jdu4e00u53f7 ~]# ls -al /home/test
總用量 12
drwx------ 2 test test 59 8月 15 15:47 .
drwxr-xr-x. 4 root root 30 8月 15 15:47 ..
-rw-r--r-- 1 test test 18 12月 7 2016 .bash_logout
-rw-r--r-- 1 test test 193 12月 7 2016 .bash_profile
-rw-r--r-- 1 test test 231 12月 7 2016 .bashrc
*注意 不傳參數創(chuàng)建的賬戶的默認信息也是可以更改的燎窘,例如useradd -D -s /bin/tsch
就會將創(chuàng)建的賬戶的默認shell更改為tsch
下面是更改默認值的參數介紹
參數 | 描述 |
---|---|
-b | 更改默認HOME目錄位置 |
-e | 更改默認新賬戶的過期日期 |
-f | 更改默認新用戶從密碼過期到禁用的天數 |
-g | 更改默認組 |
-s | 更改默認登錄shell |
刪除用戶 userdel
userdel
只是刪除passwd文件中的關于該賬戶的信息摹闽,而不會刪除其他該賬戶的文件
例:userdel test
加上-r
參數會刪除用戶的HOME目錄以及郵件目錄,但是系統(tǒng)上仍有可能存在刪除賬戶的其他文件
例:userdel -r test
*注意 使用-r
參數時要小心褐健,因為你不知道在刪除賬戶的HOME目錄下是否存放著其他用戶的重用文件
修改用戶
下面是一些修改用戶的常用命令
參數 | 描述 |
---|---|
usermod | 修改用戶賬戶的字段付鹿,還可以指定主要組以及附加組的所屬關系 |
passwd | 修改密碼 |
chpasswd | 從文件中讀取登錄名密碼對,更新密碼 |
chage | 修改密碼過期日期 |
chfn | 修改賬戶的備注信息 |
chsh | 修改默認登錄shell |
下面介紹一下這幾個命令
usermod
能夠修改/etc/passwd文件中的大部分字段蚜迅,參數和useradd
差不多舵匾,例如: -c
修改備注字段、-e
修改過去日期等谁不,除此之外有幾個很有用的參數
-l
修改用戶賬戶的登錄名
-L
鎖定賬戶
-p
修改賬戶密碼
-U
解除鎖定
例:
usermod -l test1 test
將賬戶test的登錄名改為test1
passwd
修改密碼坐梯,看下面的例子:
[root@jdu4e00u53f7 ~]# passwd test
更改用戶 test 的密碼 。
新的 密碼:
無效的密碼: 密碼少于 8 個字符
重新輸入新的 密碼:
抱歉刹帕,密碼不匹配吵血。
新的 密碼:
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。
*注意 從修改失敗的提示可以看出偷溺,密碼是有要求的践瓷,必須不少于8個字符另外還不可以是純數字
*注意 只有root用戶和用戶本省可以修改自己的密碼
chpasswd
可批量修改用戶密碼,該命令能夠從標準輸入讀取用戶名和密碼對列表亡蓉,分別修改
chsh
修改用戶登錄的默認shell
例:
[root@jdu4e00u53f7 ~]# chsh -s /sbin/nologin test
Changing shell for test.
Shell changed.
chfn
會將用于finger
命令的信息存儲進備注字段
[root@jdu4e00u53f7 ~]# chfn test
Changing finger information for test.
名稱 []: This is a test
辦公 []: test
辦公電話 []: 12344445555
住宅電話 []: 12344445555
Finger information changed.
*注意 由于finger
命令可以簡單的查到用戶信息晕翠,所以很多Linux發(fā)行版上都沒有默認安裝該命令
經過上面的一系列修改,現在查看test賬戶是這樣的
test:x:1001:1001:This is a test,test,12344445555,12344445555:/home/test:/sbin/nologin
chage
命令配合參數修改各種賬戶的有效期
參數 | 描述 |
---|---|
-d |
設置上次修改密碼到現在的天數 |
-E |
設置密碼過期的天數 |
-I |
設置密碼過期到鎖定賬戶的天數 |
-m |
設置修改密碼之間最少要多少天 |
-w |
設置密碼過期前多久出現提醒信息 |
*注意 輸入日期的格式有兩種砍濒,一種是YYYY-MM-DD的格式淋肾,一種是1970年1月1日到該日期的天數
2.使用Linux組(GID)
當多個賬戶要共享資源時,組的存在就很有用了爸邢,每個組有自己的權限樊卓,每個組下有多個用戶,這些用戶共享組的權限
查看組信息 /etc/group文件中
例:查看組信息 cat /etc/group
[root@jdu4e00u53f7 ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:centos
tty:x:5:
test:x:1001:
以adm:x:4:centos
組為例介紹下信息
信息(以: 分隔) |
描述 |
---|---|
adm | 組名 |
x | 組密碼 |
4 | 組ID(GID) |
centos | 屬于該組的用戶列表 |
*注意 添加用戶到組可以用usermod
命令杠河,不能直接通過修改文件操作
*注意 組的用戶列表信息會誤導人碌尔,列表中有很多組后面沒有這個信息浇辜,不代表該組下沒有用戶,當用戶在/etc/passwd文件中指出默認組的時候唾戚,該成員就不會出現在這個信息中
創(chuàng)建組 groupadd
例:創(chuàng)建一個叫test_group的組
/usr/sbin/groupadd test_group
例: 將test用戶添加到test_group組中
/usr/sbin/usermod -G test_group test
這時查看test_group的信息為
test_group:x:1002:test
*注意 只能用戶添加到組中,不能組主動添加某個用戶
*注意 更改登錄系統(tǒng)用戶所屬的用戶組叹坦,必須登錄用戶登出在登錄后才會生效
*注意 -G
參數的作用是將用戶添加到組的列表中熊镣,還有一個參數-g
是將賬戶的默認組設定為指定的組名
修改組 groupmod
groupmod
有兩個有用的參數
-g
修改組的GID
-n
修改組名
例: 將組名test_group改為test_group1
/usr/sbin/groupmod -n test_group1 test_group
*注意 改組名不會影響組的權限,應為權限是根據GID來的
3.文件權限
首先用ls -l
命令查看下系統(tǒng)上的文件募书,取出其中一條绪囱,介紹下文件權限
以下面這條信息為例:
dr-xr-xr-x. 2 root root 20480 8月 8 18:40 bin
其中第一個參數dr-xr-xr-x
就表示了文件的權限
這是一個10個字符的字符串,第一位代表對象的類型
上例中的d
代表目錄莹捡,還有其他的
參數 | 代表 |
---|---|
- | 代表文件 |
d | 代表目錄 |
l | 代表連接 |
c | 代表字符型設備 |
b | 代表塊設備 |
n | 代表網絡設備 |
后面的9個字符分為三組鬼吵,從前往后分別表示文件屬主的權限、屬組成員的權限和其他用戶的權限
每組由三個字符構成篮赢,每個字符分別代表不同的意思
參數 | 代表 |
---|---|
- | 無操作 |
r | 可讀 |
w | 可寫 |
x | 可執(zhí)行 |
這三個字符的組合會有8中形式齿椅,與八進制轉二進制的前八中組合對應
參數 | 二進制值 | 八進制值 | 權限描述 |
---|---|---|---|
--- | 000 | 0 | 無任何權限 |
--x | 001 | 1 | 可執(zhí)行 |
-w- | 010 | 2 | 可寫 |
-wx | 011 | 3 | 可寫可執(zhí)行 |
r-- | 100 | 4 | 可讀 |
r-x | 101 | 5 | 可讀可執(zhí)行 |
rw- | 110 | 6 | 可讀可寫 |
rwx | 111 | 7 | 可讀可寫可執(zhí)行 |
結合上面的介紹,上面那句話的意思是
登錄名為root
的用戶可以讀可以執(zhí)行荷逞,root
組的成員可讀可執(zhí)行媒咳,不屬于root
組的用戶可讀可執(zhí)行
文件默認權限修改 umask
首先我們創(chuàng)建一個文件
[root@jdu4e00u53f7 ~]# touch newfile
[root@jdu4e00u53f7 ~]# ls -al newfile
-rw-r--r-- 1 root root 0 8月 16 15:34 newfile
這個文件的默認權限是-rw-r--r--
這個默認的權限對應的就是umask
的權限
查看umask
命令
[root@jdu4e00u53f7 ~]# umask
0022
對于輸出結果我們可能已經懵逼了,到底什么意思种远,似乎和想象的不太一樣
首先第一位代表的是安全特性涩澡,叫做粘著位,后面會介紹坠敷,后面三位代表的是權限妙同,但是似乎和應該的八進制數不太吻合,正常rw-r--r--
對應的二進制應該是110100100
對應的八進制應該是644
為什么這里顯示的是022
實際上這里顯示的是掩碼膝迎,對于文件來說粥帚,全權限值是666
(可讀可寫可執(zhí)行),減掉對應的644
就是022
了
*注意 對于目錄來說,全權限值是777
可以用umask
命令設置umask
的默認值
例如umask 026
限次,就將默認的文件權限變成了640
芒涡,默認的目錄權限751
上面介紹的是改變默認的文件權限,下面介紹一下已經創(chuàng)建好的文件權限
已創(chuàng)建文件權限修改 chmod
例:
[root@jdu4e00u53f7 ~]# chmod 660 newfile
[root@jdu4e00u53f7 ~]# ls -al newfile
-rw-rw---- 1 root root 0 8月 16 15:34 newfile
修改權限相對來說就比較友好卖漫,后面直接跟八進制的數字就好
除了上面的直接修改费尽,還有一種符號模式的修改,相對來說復雜一些羊始,格式是
[ugoa][+-=][rwxXstugo]
其中第一個中括號中代表要修改的目標
參數 | 目標 |
---|---|
u | 代表用戶 |
g | 代表組 |
o | 代表其他 |
a | 代表上訴所有 |
第二個中括號中的參數代表增加減少或者直接設置成后面的權限
第三個中括號是權限旱幼,會發(fā)現比普通的rwx
多,增加參數的權限描述如下
參數 | 目標 |
---|---|
X | 如果對象是目錄或者它已有執(zhí)行權限,賦予執(zhí)行權限 |
s | 運行時重新設置UID或GID |
t | 保留文件或目錄 |
u | 將權限設置為跟屬主一樣 |
g | 將權限設置為跟屬組一樣 |
o | 將權限設置為跟其他用戶一樣 |
用例子解釋:
[root@jdu4e00u53f7 ~]# chmod o+r newfile
[root@jdu4e00u53f7 ~]# ls -al newfile
-rw-rw-r-- 1 root root 0 8月 16 15:34 newfile
上面的例子就是為newfile
文件的其他用戶增加可寫權限
改變文件所屬關系 chown chgrp
chown
改變文件屬主或屬組
將newfile文件的屬主設定為test用戶
例:
[root@jdu4e00u53f7 ~]# chown test newfile
[root@jdu4e00u53f7 ~]# ls -l newfile
-rw-rw-r-- 1 test root 0 8月 16 15:34 newfile
chown
命令還可以同時改變文件的屬主和屬組
例:
[root@jdu4e00u53f7 ~]# chown test.test newfile
[root@jdu4e00u53f7 ~]# ls -l newfile
-rw-rw-r-- 1 test test 0 8月 16 15:34 newfile
chown
命令改變文件的屬組
例:
[root@jdu4e00u53f7 ~]# chown .root newfile
[root@jdu4e00u53f7 ~]# ls -l newfile
-rw-rw-r-- 1 test root 0 8月 16 15:34 newfile
如果屬主和屬組名字相同可用下面的寫法將其同時修改
例:
[root@jdu4e00u53f7 ~]# chown test. newfile
[root@jdu4e00u53f7 ~]# ls -l newfile
-rw-rw-r-- 1 test test 0 8月 16 15:34 newfile
*注意 只有root用戶才能改變文件的屬主
chown
改變默認屬組
例:
[root@jdu4e00u53f7 ~]# chgrp root newfile
[root@jdu4e00u53f7 ~]# ls -l newfile
-rw-rw-r-- 1 test root 0 8月 16 15:34 newfile
4.共享文件
文件共享是通過GID來實現的钝的,我們知道,新建的文件燎字,都會分配默認的UID和GID缘缚,要想讓其他人能夠使用該文件勾笆,要么改變其他用戶的所在組的訪問權限,要么就給文件分配一個包含其他用戶的新默認屬組
下面用例子說明
例:
創(chuàng)建一個文件夾忙灼,作為要共享的文件夾
[root@jdu4e00u53f7 ~]# mkdir testdir
[root@jdu4e00u53f7 ~]# ls -l
總用量 0
drwxr-xr-x 2 root root 6 8月 16 18:08 testdir
將文件夾的默認屬組改成包含要用這個文件夾的用戶的組test
[root@jdu4e00u53f7 ~]# chgrp test testdir/
[root@jdu4e00u53f7 ~]# ls -l
總用量 0
drwxr-xr-x 2 root test 6 8月 16 18:08 testdir
保證目錄中新建的文件都用test組作為默認屬組
[root@jdu4e00u53f7 ~]# chmod g+s testdir/
[root@jdu4e00u53f7 ~]# ls -l
總用量 0
drwxr-sr-x 2 root test 6 8月 16 18:08 testdir
[root@jdu4e00u53f7 ~]# cd testdir/
[root@jdu4e00u53f7 testdir]# touch testfile
[root@jdu4e00u53f7 testdir]# ls -l
總用量 0
-rw-rw-r-- 1 root test 0 8月 16 18:10 testfile
這樣操作后匠襟,不管是誰在該目錄下創(chuàng)建新文件钝侠,新文件的屬組都是目錄的默認屬組该园,而不是用戶的默認屬組,這樣帅韧,test組下所有的用戶都能訪問這個文件了
*注意 上面用到了前面介紹的改變權限的一個屬性s
運行時重新設置UID或GID
*注意 其實共享文件涉及到Linux為文件或目錄存儲的額外三個信息SUID(設置用戶ID)里初、SGID(設置組ID)和粘著位,但是這里不想過多的介紹忽舟,那樣容易亂双妨,感興趣的同學可自行了解
*注意 上面的例子主要用的就是SGID,啟用SGID位后叮阅,可以強制在一個目錄下創(chuàng)建的文件都屬于該目錄的屬組刁品,這樣就達到了共享的目的