權限管理:
ls -l:
rwxrwxrwx:
左三位:定義user(owner)的權限
中三位:定義group;
右三位:定義other權限;
進程安全上下文:進程的運行其實是以他的屬主屬組來運行的。
(進程本身只有屬主,就是他的發起者,進程所能訪問的資源的權限取決於,發起者對於這個資源的訪問權限)
進程對文件的訪問權限應用模型:
(1)進程的屬主與文件的屬主是否相同,如果相同,則應用屬主權限;
否則,則檢查進程的屬主是否屬於文件的屬組,如果屬於,則應用屬組權限;
否則,就只能應用other權限;
(舉例:
[root@centos6~]# ls -l /etc/issue
-rw-r--r--.1 root root 47 May 19 03:47 /etc/issue
[root@centos6~]# whoami
root
[root@centos6~]#
[root@centos6~]# cat /etc/issue
CentOSrelease 6.8 (Final)
Kernel\r on an \m
[root@centos6~]#
上面的“cat”命令,啓動了一個進程時,“cat”現在是一個文件,一個程序命令,當我們cat輸入命令一回車就運行成了一個進程,這個進程對這個文件訪問時,我們由上面的“ls -l”可以看到“/etc/issue”這個問價的權限爲“rw-r--r--”,左三位是屬主的,中三位是屬組的,右三位是其他用戶的,那麼“cat”這個進程訪問這個文件時,應該以誰的權限進行呢?
首先我們來看發起進程的那個傢伙是與這個文件的屬主是不是同一個人,如果是則應用屬主權限,即左三位。否則再看發起進程的這個人屬不屬於文件的屬組,屬於則運行文件的屬組權限,再否則,就運行這個文件的其他權限,即右三位。這就是所謂的“訪問權限應用模型”)
權限:
r:readable,讀
w:writeable,寫
x:excuteable,執行
“讀寫”權限對於文件和目錄的意義是不同的:
文件:
r:可獲取文件的數據;
w:可修改文件的數據(包括改動內容,和修改內容)
x:可將此文件發起運行爲進程;
其實任何一個命令都有執行權限;
我們創建的文件,一般是沒有執行權限的,即默認情況下,我們創建文件一般是沒有執行權限的。
目錄:
r:可使用 “ls”命令獲取其下的所有文件列表,但是不能使用 “ls -l”獲 取文件的相信信息;(目錄其實就是路徑映射)
w:可修改此目錄下的文件列表;(注意:是修改列表的本身,就是能夠刪除 此目錄下的文件,或者在此目錄下創建文件)
x:可cd至此目錄中,並且可使用 “ls -l” 來獲取多有文件的詳細屬性信息;
文件權限模型:
分爲兩類:
一類:mode(權限):rwxrwxrwx
一類:ownership(從屬關係):user,group
權限中的“讀寫執行”位置是固定的
權限組合機制:
---
--x
-w-
-wx
r--
r-x
rw-
rwx
我們很容易發現,上面的三位,要麼爲“-”,要麼就是對應爲的權限,即第一位,要麼爲“-”,要麼爲“r”,所以我們可以看到這每一位只有兩種變化,我們只要使用兩種符號來表示,只要有兩種就行,那麼有兩種變化,並且最能表現出他的特性的就是二進制,沒有就用0表示,有就用1表示,所以上面的可以用二進制表示爲:
000
001
010
011
100
101
110
111
我們還知道三位二進制對應一個八進制,四位二進制,對應一個十六進制,而上面的情況,剛好對應八進制的所有符號,則轉化爲八進制爲:0,1,2,3,4,5,6,7
這就是我們的權限組合機制;
權限管理命令:
chmod命令:改變文件權限
[root@centos6~]# man chmod //查看chmod的命令幫助
格式:(有三種)
chmod [OPTION]... MODE[,MODE]... FILE...
chmod[OPTION]... OCTAL-MODE FILE...
chmod[OPTION]... --reference=RFILE FILE...
三類用戶:
u:屬主
g:屬組
o:其他
a:所有
格式一:
MODE表示法:
賦權表示法:直接操作一類用戶的所有權限位,rwx:
u=,g=,o= (三類用戶的權限不一樣,分別表示,並用逗號隔開)
ug= go= uo= (當有兩類用戶權限一樣時,我們可以合併寫)
ugo= 等同於 a=
(舉例:
[root@centos6 ~]# cp /etc/fstab ./ //複製fstab文件,到當前目錄下來
[root@centos6 ~]# ls
anaconda-ks.cfg Documents install.log Pictures Videos
cacert.pem Downloads install.log.syslog Public
Desktop fstab Music Templates
[root@centos6 ~]#
[root@centos6 ~]# ll fstab
-rw-r--r--. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]# chmod g=rw fstab
[root@centos6 ~]# ll fstab
-rw-rw-r--. 1 root root 899 Oct 19 02:31fstab //發現fstab文件的權限發生了改變
[root@centos6 ~]#
[root@centos6 ~]# chmod ug=r fstab
[root@centos6 ~]# ll fstab
-r--r--r--. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#
[root@centos6 ~]# chmod u=rwx,g=rw,o= fstab //表示屬主是讀寫執行,屬組是讀寫,其他 沒有,在寫其他沒有任何權限時,只寫“o=” 即可,後面不要跟內容
[root@centos6 ~]# ll fstab
-rwxrw----. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#)
授權表示法:直接操作一類用戶的一個權限位r,w,x:
u+,u-
g+,g-
o+,o-
a+,a-
(舉例:
[root@centos6 ~]# ll fstab
-rwxrw----. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]# chmod o+r fstab
[root@centos6 ~]# ll fstab
-rwxrw-r--. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#
[root@centos6 ~]# chmod a+x fstab
[root@centos6 ~]# ll fstab
-rwxrwxr-x. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#
[root@centos6 ~]# chmod ug-x fstab
[root@centos6 ~]# ll fstab
-rw-rw-r-x. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#
[root@centos6 ~]# chmod +x fstab //表示將三類用戶全部加上執行權限
[root@centos6 ~]# ll fstab
-r-xrwxr-x. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]# chmod -x fstab
[root@centos6 ~]# ll fstab
-r--rw-r--. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#
[root@centos6 ~]# ll fstab
-r--r--r--. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]# chmod +w fstab
[root@centos6 ~]# ll fstab
-rw-r--r--. 1 root root 899 Oct 19 02:31fstab //+w僅對屬主有效,所以有些時候也有異常 狀態
[root@centos6 ~]#
[root@centos6 ~]# chmod u+x,g+w fstab //也可以分開寫“u+x,g+w”中間用逗號隔開
[root@centos6 ~]# ll fstab
-rwxrw-r--. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#)
格式二:
八進制表示法:
注意:這是要給全;即三類用戶都要寫,就是,每次寫都寫三個八進制數
(舉例:
[root@centos6 ~]# chmod 660 fstab
[root@centos6 ~]# ll fstab
-rw-rw----. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]# chmod 66 fstab //這就是告訴我們寫數字進行給權限的時候,一定要 將寫三個八進制數,即三類用戶的權限都給到,就算沒 有權限就寫0
[root@centos6 ~]# ll fstab
----rw-rw-. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#)
格式三:引用型修改
引用一個文件的權限,來修改此文件的權限,使此文件的權限與引用的文件權 限一樣
(舉例:
[root@centos6 ~]# ls -l /var/log/messages
-rw-------. 1 root root 987411 Oct 19 02:59/var/log/messages
[root@centos6 ~]# ll fstab
----rw-rw-. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]# chmod --reference=/var/log/messages fstab
[root@centos6 ~]# ll fstab
-rw-------. 1 root root 899 Oct 19 02:31fstab
[root@centos6 ~]#)
chmod命令的選項:
--reference
-R:遞歸
(如果我們改的權限是目錄,那麼如果使用遞歸,則修改該目錄權限的同時,也修改該目錄下的文件的權限,如果改目錄的權限時,沒有使用遞歸,則僅表示修改目錄的權限)
一般而言,遞歸修改權限時,通常在授權表示法中比較易用,而對於賦權表示法和後面的八進制表示還有引用型表示法,一般不建議使用遞歸
因爲目錄會有執行權限,但是目錄中的文件不一定有執行權限;
(舉例:
[root@centos6 ~]# cp -r /etc/skel /tmp //複製一個目錄要使用“-r”選項
[root@centos6 ~]# cd /tmp
[root@centos6 tmp]# ll skel/ -d //查看目錄“skel/”本身的屬性
drwxr-xr-x. 4 root root 4096 Oct 19 03:16skel/
[root@centos6 tmp]# chmod 700 skel/ //僅改變目錄本身的權限
[root@centos6tmp]# ll skel/ -d
drwx------. 4 root root 4096 Oct 19 03:16skel/
[root@centos6 tmp]# ls -la skel/ //查看目錄“skel”下所有文件及子目錄的權限
total 28
drwx------. 4 root root 4096 Oct 19 03:16 .
drwxrwxrwt. 23 root root 4096 Oct 19 03:16..
-rw-r--r--. 1 root root 18 Oct 19 03:16.bash_logout
-rw-r--r--. 1 root root 176 Oct 19 03:16.bash_profile
-rw-r--r--. 1 root root 124 Oct 19 03:16.bashrc
drwxr-xr-x. 2 root root 4096 Oct 19 03:16 .gnome2
drwxr-xr-x. 4 root root 4096 Oct 19 03:16 .mozilla
[root@centos6 tmp]# chmod 700 skel/ -R //遞歸更改目錄“skel”權限
[root@centos6 tmp]# ll skel/ -d
drwx------. 4 root root 4096 Oct 19 03:16skel/
[root@centos6 tmp]# ll skel/ -a //發現目錄下的文件權限也有執行權限了
total 28
drwx------. 4 root root 4096 Oct 19 03:16 .
drwxrwxrwt. 23 root root 4096 Oct 19 03:16..
-rwx------. 1 root root 18 Oct 19 03:16.bash_logout
-rwx------. 1 root root 176 Oct 19 03:16.bash_profile
-rwx------. 1 root root 124 Oct 19 03:16.bashrc
drwx------. 2 root root 4096 Oct 19 03:16 .gnome2
drwx------. 4 root root 4096 Oct 19 03:16 .mozilla
[root@centos6 tmp]#)
所以賦權表示法,一般不適用遞歸的。只有授權表示法可以用,並發揮作用。
從屬關係管理命令:
chown,chgrp
chown:
格式:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
格式一:更改文件的屬主,後面加上冒號一併改文件的屬組,冒號也可以用點號來代替
格式二:更改一個文件屬主屬組,參考另一個文件的屬主屬組
chown :屬組 文件|目錄 //是可以這樣寫的,這表示更改屬組
選項:-R ,表示遞歸修改
(舉例:
[root@centos6 tmp]# ll skel/ -d
drwx------. 4 root root 4096 Oct 19 03:16skel/
[root@centos6 tmp]# chown -R docker skel/
chown: invalid user: `docker'
[root@centos6tmp]# useradd docker
[root@centos6 tmp]# passwd docker
Changing password for user docker.
New password:
BAD PASSWORD: it is toosimplistic/systematic
BAD PASSWORD: is too simple
Retype new password: //輸入的密碼是123456
passwd: all authentication tokens updatedsuccessfully.
[root@centos6 tmp]# chown -R docker skel/
[root@centos6 tmp]# ll skel/ -d
drwx------. 4 docker root 4096 Oct 19 03:16skel/
[root@centos6 tmp]# ls -la skel/ //目錄下的文件屬組也全爲docker
total 28
drwx------. 4 docker root 4096 Oct 19 03:16 .
drwxrwxrwt. 23 root root 4096 Oct 19 03:33 ..
-rwx------. 1 docker root 18 Oct 19 03:16.bash_logout
-rwx------. 1 docker root 176 Oct 19 03:16.bash_profile
-rwx------. 1 docker root 124 Oct 19 03:16.bashrc
drwx------. 2 docker root 4096 Oct 19 03:16 .gnome2
drwx------. 4 docker root 4096 Oct 19 03:16 .mozilla
[root@centos6 tmp]#
[root@centos6 tmp]# chown -R arclinux:mygrp skel/ //中間的冒號也可以改成點號“.”
chown: invalid user: `arclinux:mygrp'
[root@centos6 tmp]# useradd arclinux
[root@centos6 tmp]# useradd mygrp
[root@centos6 tmp]# chown -R arclinux:mygrp skel/
[root@centos6 tmp]# ll -d skel/
drwx------. 4 arclinux mygrp 4096 Oct 1903:16 skel/
[root@centos6 tmp]#
[root@centos6 tmp]# chown -R root.root skel/ //屬主屬組中間爲點號“.”也可以
[root@centos6 tmp]# ll -d skel/
drwx------. 4 root root 4096 Oct 19 03:16skel/
[root@centos6 tmp]# ls -la skel/
total 28
drwx------. 4 root root 4096 Oct 19 03:16 .
drwxrwxrwt. 23 root root 4096 Oct 19 03:33..
-rwx------. 1 root root 18 Oct 19 03:16.bash_logout
-rwx------. 1 root root 176 Oct 19 03:16.bash_profile
-rwx------. 1 root root 124 Oct 19 03:16.bashrc
drwx------. 2 root root 4096 Oct 19 03:16 .gnome2
drwx------. 4 root root 4096 Oct 19 03:16 .mozilla
[root@centos6 tmp]#)
chgrp: 只能用來更改屬組
格式:
chgrp[OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
注意:僅管理員可修改文件的屬主和屬組;
思考:
用戶對目錄有寫權限,但對目錄下的文件沒有寫權限時,能否修改此文件內容?能否刪除此文件?
解:
前者一定不能修改文件內容,後者答案是一定能刪除文件
一個用戶對於一個文件沒有寫權限,未必就不能刪除,但是他一定不能往文件中加東西;
(舉例驗證:
分析,使用一個用戶,對某個目錄有寫權限,但是對目錄下的文件沒有寫權限,我們可以這樣做,
第一步:先複製一個文夾,並且這個文件夾內有文件,一個新的文件夾下,分別查看實驗用戶和目錄的屬組,然後將該用戶和目錄加入到這統一的屬組;
第二步:我們將這個對這個目錄的屬組增加寫權限,那麼這個用戶就對這個目錄有寫權限了
第三步:我們將改目錄下某個文件的設置爲,只有屬主有寫權限,然後用該用戶向文件寫內 容,添加不成功,就表示不能寫,
第四步:執行刪除該文件,如果能刪除,則表示,用戶對文件沒有寫權限,但是照樣能刪除 該文件
舉例演示:
[root@centos6 testdir]# id dong
uid=500(dong) gid=500(dong)groups=500(dong),503(mygrp)
[root@centos6 testdir]# mkdir mytest
[root@centos6 testdir]# ls
lost+found mytest
[root@centos6 testdir]# cp /etc/fstab /testdir/mytest/
[root@centos6 testdir]# ls
lost+found mytest
[root@centos6testdir]# chmod g+wx mytest/
[root@centos6 testdir]# ll -d mytest/
drwxrwxr-x. 2 root root 4096 Oct 21 03:37 mytest/
[root@centos6 testdir]# chown :mygrp mytest/
[root@centos6 testdir]# ll -d mytest/
drwxrwxr-x. 2 root mygrp 4096 Oct 21 03:37 mytest/
[root@centos6 testdir]# cd mytest/ //用戶對該目錄有執行權限,才能切換進這個目錄
[root@centos6 mytest]# ls
fstab
[root@centos6 mytest]# ll fstab
-rw-r--r--. 1 root root 899 Oct 21 03:37fstab
[root@centos6 mytest]# su -dng
su: invalid option -- 'd'
Try `su --help' for more information.
[root@centos6 mytest]# su - dong
[dong@centos6 ~]$ cd /testdir/mytest/
[dong@centos6 mytest]$ ls
fstab
[dong@centos6 mytest]$ exit
logout
[root@centos6 mytest]# ls
fstab
[root@centos6 mytest]# echo "afsdaf" >> fstab
[root@centos6 mytest]# su - dong
[dong@centos6 ~]$ cd /testdir/mytest/
[dong@centos6 mytest]$ ls
fstab
[dong@centos6 mytest]$ echo"sadfafd" >> fstab
-bash: fstab: Permission denied
[dong@centos6 mytest]$ rm -f fstab
[dong@centos6 mytest]$ ls
[dong@centos6 mytest]$
)
思考:
我們是用普通用戶和管理員用戶,分別在自己的家目錄下創建一個文件,然後查看其文件的權限:
[root@centos6 ~]# touch test1
[root@centos6 ~]# ll test1
-rw-r--r--. 1 root root 0 Oct 21 17:17test1 //文件的權限爲644
[root@centos6 ~]# su - dong
[dong@centos6 ~]$ touch test2
[dong@centos6 ~]$ ll test2
-rw-rw-r--. 1 dong dong 0 Oct 21 17:18test2 //文件的權限爲664
[dong@centos6 ~]$
上面的兩個用戶爲什麼創建的文件的權限還不一樣呢?
這就涉及到“umask”的概念了
umask:
文件權限的反向掩碼,遮罩碼;
(什麼是反向掩碼,或者遮罩碼?
爲了避免用戶創建出來的目錄自動是777,創建出來的文件也是777,這樣就會造成任何用戶都能寫別人的文件,管理別人的文件,這樣權限的設置就沒有任何意義,我們知道777是所有文件應該有的權限,但是爲什麼創建出來的文件的權限是664,或者644?這是因爲我們設置了反向掩碼,導致用戶創建出來的文件,自動或者默認就不會讓其他人隨意操作了,)
反向掩碼的用法:
反向掩碼其實也是一個權限位,他只不過能實現創建文件時用:
文件:
666-umask 來得到文件的默認權限。
目錄:
777-umask 來得到目錄的默認權限。
那爲什麼上面二者一個用666,一個用777,去減呢?
解:我們之前說過,文件默認情況下不具有執行權限,所以文件用666去減,表示文件默認不能擁有執行權限;如果減得的結果中有執行權限,則需要將其加1但是對於目錄來講就沒有這一說了。
但是還有一個問題,如果umask=023,則666-023=643,則可知,對於文件來講,如果權限是643,這個“3”就表示這個文件的其他用戶對文件有寫和執行的權限。那麼這樣對於文件來講是不被允許,即,如果用666還是777去減,得到的權限中有執行權限,則將其加1,所以就得到了644,也就是我們平時創建文件時,文件的默認權限就是“644”
umask命令:
umask:查看當前umask
[root@centos6 ~]# umask
0022
[root@centos6 ~]#
umask MASK:設置umask;
注意:我們在命令行設置的內容,是僅對當前shell進程有效,
練習:完成以下任務
1.新建系統組mariadb,新建系統用戶mariadb,屬於mariadb組,要求其沒有家目錄,且shell爲/sbin/nologin;嘗試root切換至用戶,查看其命令提示符。
2.新建GID爲5000的組mageedu,新建用戶gentoo,要求其家目錄爲/users/gentoo,密碼同用戶名;
3.新建用戶fedora 。其家目錄爲/users/fedora,密碼同用戶名;
4.新建用戶www,其家目錄爲/users/www,刪除www用戶,但是保留其家目錄
5.爲用戶gentoo和fedora 新增附加組mageedu;
6.複製目錄/var/log/至/tmp/目錄,修改/tmp/log及其內部的所有文件的屬組爲mageedu,並讓屬組對目錄本身擁有寫權限;
install命令:
install - copy files and set attributes(翻譯:複製文件和設置屬性)
格式:
單源複製:
install [OPTION]... [-T] SOURCE DEST //複製單個文件爲目標文件
多源複製:
install [OPTION]... SOURCE... DIRECTORY //複製多,到目標目錄
install [OPTION]... -t DIRECTORY SOURCE... //多源複製,到目錄
創建目錄:
install [OPTION]... -d DIRECTORY... //創建空目錄
常用選項:
-m,--mode=MODE:設定目標文件權限,默認爲755;
-o,--owner=OWNER:設定目標文件屬主;(注意:改文件權限,所有用戶都可以執行,但是更改文件的屬主,屬組僅管理員可以,用戶僅能修那些屬主爲自己的文件的權限)
-g,--group=GROUP:設定目標文件的屬組
舉例:install -o arclinux -g mygrp -m 640 /etc/fstab /tmp/fstab
-d,--directory:創建空目錄
舉例:install -d hello
注意:install不能遞歸複製目錄。
mktemp命令:
創建一個臨時文件或一個臨時目錄,
格式:
mktemp [OPTION]... [TEMPLATE] template:模板,樣板;
創建臨時文件或目錄,這些文件或目錄其實是任意存放的,之所以放在“/tmp”目錄下,就是因爲,這個目錄下的文件,定期會自動的刪除。
爲什麼要使用模板?
既然是創建臨時文件,則這個文件的名就可能隨機的,爲了避免重複,我們通常使用.XXXXXXXXXX,後面的“X”是大寫的,來表示隨機,至少是三個字符,來生成隨機字符
舉例:
[root@centos6~]# mktemp /tmp/mytmp.XXX
/tmp/mytmp.sxn
[root@centos6~]#
常用選項:
-d:創建臨時目錄(一般也加3個字符XXX大寫)
-u:白執行一次,這個多用在測試,看能不能創建,但實際不會創建。
注意: mktemp會將創建的臨時文件名直接返回,因此,可直接通過命令引用保存起來;