由於 linux 是多使用者作業系統,所以基於安全的考慮,需要具備保障個人隱私和系統安全的機制。因此在使用 linux 系統的時候,經常會出現許可權的問題(比如: 刪除檔案、安裝軟體、執行應用等等),期初遇到這些問題的時候,大部分都使用sudo
或者是sudo chmod 777 file
(後面會講解這個命令)來解決的。雖然這種方式可以解決問題,但是這樣是不安全的,特別是在伺服器上操作的時候,因為不是所有的檔案和資料夾都可以被其它使用者操作的,不是所有的使用者都有root
許可權的,不是所有的應用都可以用root
使用者啟動的。那麼我們要如何正確的處理這些許可權問題呢?那就讓我們來學習一下 linux 許可權相關的知識。
要確定乙個使用者對某個檔案或資料夾是否具有相應的操作許可權,先要明確該使用者與檔案或資料夾之間的關係。在 linux 系統中,定義了如下三種關係:
因為在 linux 下的檔案和資料夾都有讀取(r)
、寫入(w)
、執行(x)
的操作,所以上面描述的每種關係的使用者分別都可以賦予這些操作許可權。操作許可權介紹:
許可權簡寫
對普通檔案的作用
對資料夾的作用讀取r
檢視檔案內容
列出資料夾中的檔案(ls)寫入w
修改檔案內容
在資料夾中刪除、新增或重新命名檔案(夾)執行x
檔案可以作為程式執行
cd 到資料夾
在 linux 使用ls -la
命令可以檢視資料夾內檔案的屬性,下面是我電腦上某個資料夾下檔案的屬性:
$ ls -la
drwxr-xr-x 14 root root 4096 apr 3 18:47 .
drwxr-xr-x 23 root root 4096 mar 2 05:48 ..
drwxr-xr-x 2 root root 4096 apr 3 07:44 backups
drwxr-xr-x 17 root root 4096 jul 22 2014 cache
drwxr-xr-x 2 root root 4096 mar 2 04:26 docker-registry
lrwxrwxrwx 1 root root 9 feb 25 13:31 lock -> /run/lock
drwxrwxr-x 15 root syslog 4096 apr 3 07:44 log
-rw-r--r-- 1 root root 0 apr 3 18:47 test
在 linux 系統中還有三種與使用者身份無關的三個檔案許可權屬性。即-
(常規檔案)、d
(目錄)、l
(符號鏈結)、c
(字元特殊裝置)、b
(模組特殊裝置)、p
(fifo)、s
(套接字)
suid、sgid和sticky
。
該屬性只對有執行許可權的檔案有效,對目錄無效。執行具有suid
許可權的程式時,引發的程序的所有者是程式檔案的所有者,而不是啟動程式的使用者(除非二者是同乙個人)。比如,如果乙個程式的所有者是root
且具有suid
屬性,乙個普通使用者執行此程式時,如同root
執行此程式一樣。(請注意該屬性對shell
指令碼程式無效)該屬性為一些特殊程式(如lpr)的啟動帶來了方便。但有時也帶來了安全隱患:比如乙個具有suid
屬性的程式如果在執行時執行了乙個shell
,那麼使用者可以籍此得到系統的最高許可權。suid
可用s
表示,如:
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 47032 feb 16 2014 /usr/bin/passwd
對於可執行檔案,sgid
與suid
類似,引發的程序的所有組是程式檔案所屬的組。對於目錄,sgid
屬性會使目錄中新建檔案的所屬組與該目錄相同。sgid
也可以用s表示,如:
$ ls -l /var
drwxrwsr-x 2 root staff 4096 apr 10 2014 local
drwxrwxr-x 15 root syslog 4096 apr 4 19:57 log
僅對目錄有效。帶sticky
屬性的目錄下的檔案或目錄可以被其擁有者刪除或改名。常利用sticky
屬性建立這樣的目錄:組使用者可以在此目錄中建立新檔案、修改檔案內容,但只有檔案所有者才能對自己的檔案進行刪除或改名。如系統中的/tmp
資料夾。在屬性字串中,通常用t表示。
$ ls -l /
drwxrwxrwt 8 root root 4096 apr 4 23:57 tmp
在 linux 系統中,可以使用chmod
命令來修改檔案或資料夾對應使用者的操作許可權,chmod
命令也有兩種方式修改,一種是使用代表相應操作許可權的字母簡寫表示,另一種是使用代表相應操作許可權的數字表示。
chmod
語法引數格式: ugoa[rwxst]第乙個字元是u、g、 o 或 a 中的乙個(分別表示使用者、組、其他人和所有人)。還可以選擇新增(+)、刪除(-)或設定(=)各種不同許可權。
$ sudo chmod u+x try
$ sudo chmod ug+rw try
$ sudo chmod ug-r try
為了簡化表述,也可使用八進位制數來表示許可權。即用乙個四位八進位制數來表示,其中最高位表示特殊許可權,隨後的三位依次是所有者許可權、組許可權和其他人許可權。每乙個八進位制位的許可權數值是檔案具有的相應許可權所對應的數值之後,如:
0755=rwxr-xr-x=0(4+2+1)(4+0+1)(4+0+1)
數值許可權的演算法,比如使用rw-
其實就是110
的二進位制,也就是0*2^0 + 1*2^1 + 1*2^2 = 6
。有相應的許可權就用1
表示,沒有相應的許可權就用0
表示。不過這種演算法特殊許可權不包含在內。
chown
可以修改檔案或資料夾的擁有者和所屬的組。
$ sudo groupadd try
$ sudo groupadd -n rename-try try
$ sudo groupadd -n rename-try try
$ sudo groupdel try2
$ sudo cat /etc/group
在 linux 系統上雖然可以使用useradd
或adduser
來建立使用者,但是這兩個命令是有區別的。使用
useradd
時,如果後面不新增任何引數選項,例如:$sudo useradd test
建立出來的使用者將是預設「三無」使用者:一無home directory,二無密碼,三無系統shell。使用
adduser
時,建立使用者的過程更像是一種人機對話,系統會提示你輸入各種資訊,然後會根據這些資訊幫你建立新使用者。下面建立使用者使用的是
adduser
命令:
$ sudo adduser test
adding user `test' ...
adding new group `test' (1002) ...
adding new user `test' (1001) with group `test' ...
creating home directory `/home/test' ...
copying files from `/etc/skel' ...
enter new unix password:
retype new unix password:
passwd: password updated successfully
changing the user information for test
enter the new value, or press enter for the default
full name : test
room number :
work phone :
home phone :
other :
is the information correct? [y/n] y
了解 linux 使用者操作許可權,安全就掌握在手中。 Linux檔案和資料夾的操作
資料夾中存放的是檔案。1 新建 2 改名 3 檢視 4 刪除 5 拷貝 6 移動1 檔案的操作 檔案的新建 touch filename 檔案的改名 mv 檔案的檢視 ls 檔案內容的檢視 cat 檔案的刪除 rm r f 檔案的拷貝 cp r f p 檔案的移動 mvtouch命令 touch命令...
python檔案和資料夾操作
python中對檔案 資料夾 檔案操作函式 的操作需要涉及到os模組和shutil模組。得到當前工作目錄,即當前python指令碼工作的目錄路徑 os.getcwd 返回指定目錄下的所有檔案和目錄名 os.listdir 函式用來刪除乙個檔案 os.remove 刪除多個目錄 os.removedi...
Perl 檔案和資料夾操作
作為一門程式語言,perl有著強大的檔案和資料夾操作功能。perl利用檔案控制代碼 file handle 和資料夾控制代碼 dir handle 與作業系統進行輸入輸出連線。檔案和資料夾控制代碼一般使用大寫子母或指定標量以示特殊。檔案開啟語句及說明 一般加入die函式做開啟失敗的提示。my fil...