Linux下一切都被抽象成了file,哪些進程能夠訪問哪些file,不能夠訪問哪些file,就是權限管理。html
每一個file都有權限屬性,能夠用ls -l
查看file的權限屬性。c++
3對rwx分別表明,用戶,組,其餘人的rwx。docker
$ ls -l drwxrwxr-x. 2 ys ys 28 Nov 29 17:47 a
file經過本身的權限屬性來保護本身,讓符合本身權限屬性的進程訪問,讓不符合本身權限屬性的進程不可以訪問。shell
權限屬性是由權限位構成的,權限位(drwxrwxr-x等)說明表:bash
文件類型位 | 用戶的讀權限位 | 用戶的寫權限位 | 用戶的可執行權限位 | 主組的讀權限位 | 主組的寫權限位 | 主組的可執行權限位 | 其餘用戶的讀權限位 | 其餘用戶的寫權限位 | 其餘用戶的可執行權限位 | user | group |
---|---|---|---|---|---|---|---|---|---|---|---|
d | r | w | x | r | w | x | r | - | x | ys | ys |
3組rwxrwxrwx叫mode,使用chmod
修改mode。微信
user,group叫ownership,學習
文件:ui
目錄:.net
r:能夠用ls
命令獲取目錄裏的內容列表,但不能使用ls -l
獲取目錄裏的詳細內容列表。code
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的權限判斷邏輯:
chmod
file的mode信息,只能由file的屬主修改。
用戶分類:
語法:
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
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 ss
chown [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
由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詳解:令新建文件和目錄擁有默認權限
cp
命令是作不到的,install
命令能夠作到,可是install
不能拷貝目錄。
mkdir
命令是作不到的,install
命令能夠作到。
install後,目標文件或者目錄的mode的默認值都是755
-m mode
-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