看了還想看—普通權限及umask

    權限在操作系統是尤為重要的,無論是windows和linux中,都少不了權限這么一說,權限的大小決定了你能操作些什么,在linux中,權限對目錄和文件的意義是不同的,并且還有特殊權限。今天,我們就來說說一說權限在linux中的重要性以及權限操作命令。

    權限:權限決定用戶對文件或目錄的使用范圍,權限如果設定的不恰當會帶來很大安全隱患。其中root的權限最大,能做任何事,之所以設定root用戶權限為最大是為了方便與管理用戶或系統重要信息的,而不是在工作中用來維護服務器的,所以在生產環境中基本沒人拿root來操作,只是必要時才使用,因為root用戶帶來的后果是非常嚴重的。下面先來說說權限位,再說權限對于文件或目錄的作用

我們先來看一下權限位:

使用`ls -ld / ` 命令查看根目錄的文件類型,再做分析;

[root@localhost ~]# ls -ld /
dr-xr-xr-x.  24  root  root   4096   Jul 25 11:43   /

其中第一段(dr-xr-xr-x. ),里面有11個字符位,第一位(d)為文件類型,d 表示為目錄,緊接著為(r-xr-xr-x),里面有九個字符,而每三個字符又分為一個獨立的權限位。

分別代表為:第一個三個字符(r-x)表示對于此目錄屬主(owner)的操作權限;

            第二個三個字符為(r-x),表示針對于此目錄的屬組(group)的操作權限;

            第三個三個字符也為(r-x),它則表示為除屬主屬組以外的其他用戶(other)的操作權限。

所以,這三段權限一共9個字符分別針對于屬主、屬組、其他用戶

(dr-xr-xr-x. )這其中之后的 " . " 則表示特殊控制權限位,有則表示為" + ",無則表示為" . "

(dr-xr-xr-x.  24  root  root   4096   Jul 25 11:43   / ) 此中兩個root分別依次代表屬主和屬組,其他用戶則表示屬主屬組除外的的用戶。

下面來細分一下(rwx)各代表的含義,而每三位(rwx)這表示為一組權限,每一位權限對于文件的和目錄的含義又是不同的。

r=read          //讀
w=write         //寫
x=executable    //執行

對文件的含義:

r(可讀權限):可以使用類似cat等命令查看其文件的內容
w(可寫權限):可以編輯或刪除其文件
x(可執行)  :可以運行此文件

對目錄的含義:

r: 可以對此目錄查看目錄內的文件內容,如 ls
w:可以在此目錄創建文件或目錄,但必須有x權限的前提下
x:可以使用cd切換進此目錄或 ls -l 查看目錄內文件的詳細信息

  

而每一位權限都可已使用八進制來表示,每三位為一組;下面來看一下怎么表示的:

一組權限為rwx,用八進制來表示一下;      注意:此排序是不能亂排序的。

    權限        二進制       八進制  
    rwx         111            7
    --x         001            1
    -w-         010            2
    -wx         011            3
    r--         100            4
    r-x         101            5 
    rw-         110            6
    rwx         111            7

如此一來,則每三位權限為一組就可以直接用數字來表示了,上面的 / 的權限用八進制表示則為555 吧!  慢慢去練習吧!

說了那么多,你應該對權限位和用八進制表示權限有了了解吧!下面來說說怎么修改文件或目錄的權限:

文件和目錄的權限其含義則是不同的,我們對文件上的三組九位權限進行設定就可對用戶進行控制。

更改文件或目錄權限命令

chmod :更改權限

    更改權限并不是任何人都可以更改的,root除外,其余用戶只能更改屬主為自己的文件或目錄的權限

    chmod有4種更改方式,分別為賦權、授權、八進制更改和參照文件更改。

     要更改指定的用戶或組或其他用戶的權限,有幾類用戶,則表示為:

 o(other):更改其他用戶權限
 g(group):更改屬組權限
 u(user) : 更改屬主權限
 a(all)  :更改所有用戶權限(以上三種一起更改權限)

      chmod權限表示法:

1.賦權表示法

      用 “=”來進行賦權更改,所謂賦權更改就是直接更換其原有的權限,直接更改為指定的權限。

            2.授權表示法

      用 “ + ”  “ – ” 來進行授權更改,其含義為在原有的權限上增加或減少權限

3.八進制表示法

      用八進制 如:“777” 直接對目錄或文件進行更改

4.參照文件更改

      使用選項“ –reference=/SOMEFILE ”來進行更改,其含義為參照指定文件的權限來對當前指定文件進行更改,其權限則和參照的文件一樣。

注意:第一種和第二種可以只針對其中一類用戶進行更改,第三種和第四種則不能單獨更改一類用戶。

chmod使用:

       chmod [OPTION]… MODE[,MODE]… FILE…

         //此用法針對賦權表示法和授權表示法使用

           1.賦權表示法使用

    #chmod u=rx  /etc/passwd

  //這表示改變/etc/passwd文件的屬主權限為rx,其中要更改的權限rwx順序可以不同,也可以使用任意一類用戶進行授權  

2.授權表示法

    #chmod u-x  /etc/passwd

  //這表示將/etc/passwd文件的屬主權限減去“x”執行權限     其中要更改的權限rwx順序可以不同 ,也可以使用任意一類用戶進行授權  

       chmod [OPTION]… OCTAL-MODE FILE…

1.八進制表示法

    #chmod 777 /etc/passwd

//表示對passwd文件的三類用戶(屬主、屬組、其他用戶)的權限都設置成為777(每一類用戶的權限都為rwx)當然可以更改為其他的,自行轉換

       chmod [OPTION]… –reference=RFILE FILE…

1.參照文件更改

    #chmod --reference=/etc/inittab /etc/passwd

//表示將/etc/passwd文件的權限設定為和inittab文件一樣的權限, 前面一個文件為被參照的文件,后一個為被修改的文件

注意:如果對目錄進行更改權限時,如果也要修改目錄下的文件和目錄一樣的權限,則使用 -R 選項,代表遞歸修改目錄下的文件,以上所有方法都可加R選項。

注意:在更改時后面的作用文件或目錄可以是多個

更改文件或目錄的屬主屬組

chown:改變文件屬主屬組

      修改文件或目錄的屬主和屬組,root用戶可以對所有文件或目錄進行屬組屬主更改,普通用戶只能更改屬主是自己的才能使用該命令,該命令也可以使用參照文件更改法。

使用方法:

1.chown [OPTION]… [OWNER][:[GROUP]] FILE…

 改變文件的屬主屬組,中間用冒號分割,后面為要作用的文件

 #chown user1:group1 /etc/passwd   
 // 將passwd文件的屬主修改為user1,屬組修改為group1

2.chown [OPTION]… –reference=RFILE FILE…

#chown --reference=/etc/inittab /etc/passwd
//表示將/etc/passwd文件的屬主屬組設定為和inittab文件一樣的屬主屬組, 前面一個文件為被參照的文件,后一個為被修改的文件

3.如果對目錄進行更改屬主屬組時,如果也要修改目錄下的文件和目錄一樣的屬主屬組,則使用 -R 選項,代表遞歸修改目錄下的文件,所有方法都可加R選項

注意:第一種方法更改文件或目錄的屬主屬組有一些小技巧:

1.如果我們想對文件只修改屬組時,則直接使用冒號+屬組名

#chown  :magedu /etc/fstab

//只對該文件進行屬組更改,屬主不變

2.如果我們想對文件只修改屬主時,直接寫上屬主用戶名即可

#chown root  /etc/fstab

//修改該文件的屬主為root屬組不變

注意:在更改時后面的作用文件或目錄可以是多個

針對于文件或目錄的屬組還有命令

chgrp:更改組

chgrp命令用來改變文件或目錄所屬的用戶組。該命令用來改變指定文件所屬的用戶組。其中,組名可以是用戶組的id,也可以是用戶組的組名。文件名可以是由空格分開的要改變屬組的文件列表,也可以是由通配符描述的文件集合。如果用戶不是該文件的文件主或超級用戶(root),則不能改變該文件的組。也可以使用參照文件更改法更改

       chgrp [OPTION]… GROUP FILE…

#chgrp magedu /testdir/magedu.txt
//將文件的屬組更改為指定的組名,其中組名可用其GID代替

       chgrp [OPTION]… –reference=RFILE FILE…

#chown --reference=/etc/inittab /etc/passwd
//表示將/etc/passwd文件的屬組設定為和inittab文件一樣的屬組, 前面一個文件為被參照的文件,后一個為被修改的文件

注意:在更改時后面的作用文件或目錄可以是多個。


很多人都沒有注意到當我們在創建文件或目錄時都會自動設有權限,root用戶默認創建文件的權限是644,目錄權限默認是755,普通用戶創建文件是默認是664,目錄默認權限是775,但這些權限是怎么規定的呢?是誰在作怪呢?

下面我們就來說一下新建文件或目錄時的默認權限。

在命令行輸入umask即可看到返回的值,這是什么呢?沒錯,就是umask(反掩碼)值在作怪,就是它決定了用戶在新建文件或目錄時的默認權限,配置文件在/etc/bashrc,這里面定義了我們在創建文件或目錄時的權限

[root@localhost testdir
0022

他是怎么計算的呢?首先,系統規定,所有用戶在創建文件是默認是使用666為權限,目錄是777為權限,然后當用戶創建文件或目錄時會和相應的umask值進行減法運算,最后的出的結果即為文件或目錄的權限。

要注意,umask值是/etc/bashrc里定義的,他是用一個判斷語句來決定的,當登錄的用戶UID小于0時使用022作為umask值,否則使用002作為umask值,然后在與系統默認創建文件和目錄的值(666/777)進行減法運算,最后得出的就是文件或目錄的值。

//這就是判斷umask值的if else語句

if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
       umask 002
    else
       umask 022
    fi

怎么減呢?沒錯就是當系統判斷完之后給出umask值來減

例如:當前用戶為root,umask為022(第一個0不用管),然后我們創建一個文件,查看其權限是644,當我們創建目錄時其默認權限是755,怎么算的呢,系統默認創建文件是權限是666然后減去當前用戶umask值,就得到創建文件的權限值。目錄則是777減去umask值得出755就是目錄的權限值。so…that's it.

[root@localhost testdir]# umask
0022
[root@localhost testdir]# touch umask.txt
[root@localhost testdir]# ls -l umask.txt 
-rw-r--r-- 1 root root 0 Jul 25 16:49 umask.txt
[root@localhost testdir]# ls -ld umask.dir
drwxr-xr-x 2 root root 4096 Jul 25 16:51 umask.dir

我們來看一下普通用戶創建文件和目錄時的權限,看一看是不是我們說的這樣!

//普通用戶umask值為002,然后用系統默認的666和777減去umask值之后就得出文件和目錄的權限值(664、775)

[magedu@localhost ~]$ umask
0002
[magedu@localhost ~]$ touch umask.txt
[magedu@localhost ~]$ ls -l umask.txt 
-rw-rw-r-- 1 magedu magedu 0 Jul 25 16:55 umask.txt
[magedu@localhost ~]$ mkdir umask.dir
[magedu@localhost ~]$ ls -ld umask.dir/
drwxrwxr-x 2 magedu magedu 4096 Jul 25 16:55 umask.dir/

那么系統為什么要經過umask值來創建文件或目錄呢?

     因為系統默認創建文件或目錄是權限是666和777,這樣豈不是不太不安全,所有文件和目錄權限都那么大萬一使用root用戶誤操作不就完蛋了。所以引入umask值來控制用戶在創建文件或目錄是的權限問題。

umask的定義與使用:

     1.在命令行中直接輸入umask  + 值 就會定義當前的用戶創建文件或目錄是更改了原有的權限。

[root@localhost testdir]# umask
0022
[root@localhost testdir]# umask 002
[root@localhost testdir]# umask
0002
//當我們再創建文件或目錄時權限就不是原來的權限的。因為umask值改變了。
[root@localhost testdir]# touch umask2.txt
[root@localhost testdir]# ls -l umask2.txt 
-rw-rw-r-- 1 root root 0 Jul 25 17:16 umask2.txt

     

      注意:我們在命令行中定義的umask值使用的是數字,我們也可以使用直接定義的方法“umask  u=rw,g=r, o= ”  系統umask值會自動轉換為137,系統使用777減去給定的各類權限的八進制數,得到umask碼。這里需要再次注意的是當我們更改umask值之后如果文件默認的666減去我們更改umask值得到的結果如果有奇數,則統一加1,目錄則不用管。

         

   2. 把umask值寫入配置文件中。

可以調用umask -p 選項的執行結果來重定向追加到配置文件。

[root@localhost testdir]# umask -p     
umask 0033 
    //使用umask -p 查看當前的umask值并顯示umask值本身的 字符串,這不就可以讓我們調用了嗎?
[root@localhost testdir]# umask 022         //定義umask值為022
[root@localhost testdir]# umask -p          //用-p 顯示值
umask 0022                                                
[root@localhost testdir]# echo `umask -p` >> /etc/bashrc      //使用echo 調用命令的執行結果然后追加到配置文件中(這里也可以更改為家目錄的文件中)
[root@localhost testdir]# source /etc/bashrc        //重新讀取配置文件讓umask生效
[root@localhost testdir]# umask                      
0022

  3.使用umask -p 將umask值以rwx方式顯示

[root@localhost testdir]# umask   
0022          //原來的值
[root@localhost testdir]# umask -S    
u=rwx,g=rx,o=rx    //將原來的值用777減去之后轉換為rwx形式


原創文章,作者:Lii,如若轉載,請注明出處:http://www.www58058.com/27702

(1)
LiiLii
上一篇 2016-08-03 15:59
下一篇 2016-08-03 16:56

相關推薦

  • shell腳本編程 4

    Shell腳本編程4 一、雜項知識整理 1、數組賦值方法: declare -a files files=(/var/log/*.log)通配所有文件也可 2、創建臨時文件: mktemp命令:創建的臨時文件可避免沖突 mktemp  NAME.XXXX(x至少要出現三個) -d 創建臨時目錄 –tmpdir=/DIR 指明臨時文件所存…

    Linux干貨 2016-08-24
  • N22-℡浮生.若夢 ╮-第二周作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 cp文件復制:       常用選項:     -i:交互式復制,即覆蓋之前提醒用戶確認;     -f:強制覆蓋目標文件;  &n…

    Linux干貨 2016-09-06
  • rpm包管理(二)

    查詢查詢庫文件包查詢[select-options][query-options]licdR常用的查詢用法:卸載:二進制文件的恢復包效驗使用rpm命令導入公鑰(KEY文件)驗證rpm包來源(光盤)的來源及完整性檢查包安裝后生成的文件,是否發生過變動RPM包管理器的數據庫如果某個rpm相關內容被刪除如果rpm命令的包被刪除了信息庫被刪除了刪除/usr/bin下…

    Linux干貨 2016-09-19
  • 26期網絡班

    26期網絡班

    Linux干貨 2016-12-26
  • linux第一周學習

      一周過去了,這周學習并新認識了不少內容。由一開始的萌逼狀態,逐步清晰的認識了不少內容。相信我會越來越好的。 文件與目錄 touch touch newfile         創建空文件touch oldfile          更新文件的三個…

    Linux干貨 2017-09-02
  • awk中pipe的shell命令調用與close()

        某公司其員工到勤時間表如下, 取名為 arr.dat, 文件中第一欄為員工代號, 第二欄為到達時間. 本示例中將使用該文件為數據示例文件, 1034 7:26 1025 7:27 1101 7:32 1006 7:45 1012 7:46 1028 7:49 1051 7:51 1029 7:57 1042 7…

    Linux干貨 2016-11-11

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-03 16:46

    總結的很詳細,示例也很清晰,可以嘗試

欧美性久久久久