-
Linux下一切都被抽象成了file,哪些行程可以訪問哪些file,不可以訪問哪些file,就是權限管理,
-
每個file都有權限屬性,可以用
ls -l查看file的權限屬性,3對rwx分別代表,用戶,組,其他人的rwx,
$ ls -l drwxrwxr-x. 2 ys ys 28 Nov 29 17:47 afile通過自己的權限屬性來保護自己,讓符合自己權限屬性的行程訪問,讓不符合自己權限屬性的行程不能夠訪問,
權限屬性是由權限位構成的,權限位(drwxrwxr-x等)說明表:
檔案型別位 用戶的讀權限位 用戶的寫權限位 用戶的可執行權限位 主組的讀權限位 主組的寫權限位 主組的可執行權限位 其他用戶的讀權限位 其他用戶的寫權限位 其他用戶的可執行權限位 user group d r w x r w x r - x ys ys -
3組rwxrwxrwx叫mode,使用
chmod修改mode, -
user,group叫ownership,
-
檔案:
- r:可以獲取file的元資料和資料內容
- w:可以修改file的元資料和資料內容
- x:可以運行此檔案
-
目錄:
-
r:可以用
ls命令獲取目錄里的內容串列,但不能使用ls -l獲取目錄里的詳細內容串列, -
w:可以在目錄里,創建,洗掉檔案,
-
x:可以cd到此目錄,如果也有讀權限,則可以使用
ls -l獲取目錄里的詳細內容串列,$ ll -d a drwxrwxr-x. 2 ys ys 28 Nov 29 17:47 a $ chmod u-x a $ ll -d a drw-rwxr-x. 2 ys ys 28 Nov 29 17:47 a $ cd a -bash: cd: a: Permission denied $ ls -l a ls: cannot access a/docker-ce.repo: Permission denied total 0 -????????? ? ? ? ? ? docker-ce.repo $ chmod u+x a $ ls -l a total 4 -rw-rw-r--. 1 ys ys 2880 Nov 29 17:47 docker-ce.repo
-
-
-
Linux的權限判斷邏輯:
- 首先判斷啟動行程的用戶是否和file的user相同?
- 相同:使用第一組rwx
- 不相同:判斷啟動行程的用戶是否在file的group里面?
- 在group里面:使用第二組rwx
- 不在group里面:使用第三組rwx
- 首先判斷啟動行程的用戶是否和file的user相同?
一,修改file的mode:chmod
file的mode資訊,只能由file的屬主修改,
-
用戶分類:
- u:file是由誰創建的
- g:file的創建者的主組
- o:其他
- a:以上3種的總和
-
語法:
-
chmod [OPTION]... MODE[,MODE]... FILE...-
只能操作某類用戶的所有權限位,不能操作某類用戶的單個權限位,沒指定的權限位就被清除,
u=rw
g=w
o=x
a=rwx
# ll /tmp/t1 ----------. 1 root root 0 Dec 17 21:57 /tmp/t1 # chmod ugo=rwx /tmp/t1 # ll /tmp/t1 -rwxrwxrwx. 1 root root 0 Dec 17 21:57 /tmp/t1 # chmod ugo=rw /tmp/t1 # ll /tmp/t1 -rw-rw-rw-. 1 root root 0 Dec 17 21:57 /tmp/t1 -
即能操作一類用戶的單個權限位,也能操作多個權限位 ,沒指定的權限位,保持不變,
u+,u-
g+,g-
o+,o-
a+,a-
# ll /tmp/t1 -rwxr--r-x. 1 root root 0 Dec 17 21:57 /tmp/t1 # chmod ug+rx /tmp/t1 # ll /tmp/t1 -rwxr-xr-x. 1 root root 0 Dec 17 21:57 /tmp/t1 # chmod ugo-rwx /tmp/t1 # ll /tmp/t1 ----------. 1 root root 0 Dec 17 21:57 /tmp/t1
-
-
chmod [OPTION]... OCTAL-MODE FILE...一起操作3類用戶的所有權限位
-
chmod [OPTION]... --reference=RFILE FILE...把某個檔案的mode,設定成自己的mode
# ll /tmp/t1 -rwxr--r--. 1 root root 0 Dec 17 21:57 /tmp/t1 # ll /etc/issue -rw-r--r--. 1 root root 23 Nov 23 2018 /etc/issue # chmod --reference=/etc/issue /tmp/t1 # ll /tmp/t1 -rw-r--r--. 1 root root 0 Dec 17 21:57 /tmp/t1
-
-
-
修改目錄的mode只影響目錄本身,那么也想影響目錄里面的所有檔案和子目錄呢?
使用
-R選項,使用-R時,最好使用+,-的方式,因為此方式不會影響沒有指定的權限位,
# pwd /tmp/test # ll -rw-rw-r--. 1 ys ys 0 Dec 15 21:24 1 A -rw-rw-r--. 1 ys ys 0 Dec 15 21:23 1aA -rw-rw-r--. 1 ys ys 0 Dec 15 21:23 1As drwxr-xr-x. 2 root root 6 Dec 17 22:07 ss # chmod -R g+wx /tmp/test/ # ll -rw-rwxr--. 1 ys ys 0 Dec 15 21:24 1 A -rw-rwxr--. 1 ys ys 0 Dec 15 21:23 1aA -rw-rwxr--. 1 ys ys 0 Dec 15 21:23 1As drwxrwxr-x. 2 root root 6 Dec 17 22:07 ss
-
二,修改file的ownership:chown chgrp
這2個命令只有,有管理員權限的用戶才可以使用
chown:即可以修改file的user,也可以修改file的group
chgrp:只能修改file的group,
-
語法:即可以修改file的user,也可以修改file的group
chown [OPTION]... [OWNER][:[GROUP]] FILE...里面的冒號換成點也可以,# ll -d /tmp/test drwxrwxr-x. 3 ys ys 49 Dec 17 22:07 /tmp/test # pwd /tmp/test # ll -rw-rwxr--. 1 ys ys 0 Dec 15 21:24 1 A -rw-rwxr--. 1 ys ys 0 Dec 15 21:23 1aA -rw-rwxr--. 1 ys ys 0 Dec 15 21:23 1As drwxrwxr-x. 2 root root 6 Dec 17 22:07 ss # chown -R :zg1 /tmp/test # ll -d /tmp/test/ drwxrwxr-x. 3 ys zg1 49 Dec 17 22:07 /tmp/test/ # ll -rw-rwxr--. 1 ys zg1 0 Dec 15 21:24 1 A -rw-rwxr--. 1 ys zg1 0 Dec 15 21:23 1aA -rw-rwxr--. 1 ys zg1 0 Dec 15 21:23 1As drwxrwxr-x. 2 root zg1 6 Dec 17 22:07 sschown [OPTION]... --reference=RFILE FILE...:用法同chmod -
修改目錄的ownership只影響目錄本身,那么也想影響目錄里面的所有檔案和子目錄呢?
使用
-R選項,
三,大型思考
用戶za1對目錄/tmp/fld/有寫權限,但對檔案/tmp/fld/t1沒有寫權限,
問題1:用戶za1可以修改/tmp/fld/t1檔案的內容嗎
問題1答案:不可以
問題2:用戶za1可以洗掉/tmp/fld/t1嗎
問題2答案:可以
驗證:
# ll -d /tmp/fld/
drwxrwxr-x. 2 root zg1 16 Dec 17 22:34 /tmp/fld/
# ll /tmp/fld
-rw-r--r--. 1 root zg1 0 Dec 17 22:34 t1
# su - za1
Last login: Tue Dec 17 21:07:01 CST 2019 on pts/1
$ id za1
uid=1001(za1) gid=1001(za1) groups=1001(za1),1000(ys),1002(zg1)
$ pwd
/tmp/fld
$ ll
-rw-r--r--. 1 root zg1 0 Dec 17 22:34 t1
$ echo 111 >> ./t1
./t1: Permission denied.
$ rm -f t1
$ ll
total 0
四,創建檔案或者目錄后,檔案和目錄的mode是如何計算出來的,
由umask決定,假如umask是0022(----w--w-),則:
生成檔案的mode:rw-rw-rw(666) - umask(----w--w-) = rw-r--r--
生成目錄的mode:rwxrwxrwx(777) - umask(----w--w-) = rwxr-xr-x
umask獲取當前的umask值umask mode設定umask,但只在當前shell中有效
參考:Linux umask詳解:令新建檔案和目錄擁有默認權限
五,拷貝檔案時,能否同時指定目標檔案的mode和ownership?創建目錄的同時,能否同時指定目錄的mode和ownership?
cp命令是做不到的,install命令可以做到,但是install不能拷貝目錄,
mkdir命令是做不到的,install命令可以做到,
install后,目標檔案或者目錄的mode的默認值都是755
-
指定目標的mode:
-m mode -
指定目標的user:
-o username -
指定目標的group:
-g groupname -
拷貝單個檔案,到檔案
# ll /etc/inittab -rw-r--r--. 1 root root 511 Oct 31 2018 /etc/inittab # install /etc/inittab f1 # ll f1 -rwxr-xr-x. 1 root root 511 Dec 18 14:37 f1 # install -m 640 -o za1 -g zg1 /etc/inittab f1 # ll f1 -rw-r-----. 1 za1 zg1 511 Dec 18 14:38 f1 -
拷貝多個檔案,到目錄
# mkdir d1 # ll d1 total 0 # install -m 754 -o gentoo -g zg1 /etc/inittab /etc/issue d1/ # ll d1 -rwxr-xr--. 1 gentoo zg1 511 Dec 18 14:43 inittab -rwxr-xr--. 1 gentoo zg1 23 Dec 18 14:43 issue -
創建目錄
# install -m 711 -o za1 -g zg1 -d d3 # ll -d d3 drwx--x--x. 2 za1 zg1 6 Dec 18 14:27 d3
六,創建檔案名或者目錄名是,隨機的臨時檔案,而且名稱不重復:mktemp
-
語法:
mktemp [OPTION]... tmp.XXXXXXXXXX -
創建名稱是隨機的檔案:不使用任何選項
# mktemp file.XXX file.fPA # mktemp file.XXX file.8Ir -
創建名稱是隨機的目錄:使用選項
-d# mktemp -d dir.XXXX dir.Cq5N # mktemp -d dir.XXXX dir.O9Bm # ll -d dir.Cq5N/ drwx------. 2 root root 6 Dec 18 15:06 dir.Cq5N/ # ll -d dir.O9Bm/ drwx------. 2 root root 6 Dec 18 15:06 dir.O9Bm/ -
只產生隨機的名稱,而不創建檔案或者目錄:使用選項
-u# mktemp -u 111.XXX 111.hrM # ll 111.hrM ls: cannot access 111.hrM: No such file or directory # mktemp -ud 111.XXX 111.evP # ll 111.evP ls: cannot access 111.evP: No such file or directory -
把創建的檔案或目錄放在/tmp目錄:使用選項
-t# pwd /root # mktemp -t 222.XXX.XXX /tmp/222.XXX.rcm # mktemp -t 222.XXX.XXX /tmp/222.XXX.mA1 -
用變數保存生成的名稱,
# echo $myfile # myfile=$(mktemp -t abc.XXX) # echo $myfile /tmp/abc.YEx ll /tmp/abc.YEx -rw-------. 1 root root 0 Dec 18 15:14 /tmp/abc.YEx -
使用
mktemp生成的,檔案的mode是600;目錄的mode是700
c/c++ 學習互助QQ群:877684253

本人微信:xiaoshitou5854
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/146224.html
標籤:Linux
上一篇:centos7網口添加IP,修改默認路由永久地址生效
下一篇:VMware 虛擬機黑屏問題
