linux掛載U盤、移動硬盤後無法更改權限

       話說最近在樹莓派上搭建了一個owncloud,因爲樹莓派的存儲空間有限,就插了個16G的U盤,然後設置成開機自動掛載。這裏稍微注意一下的是U盤的格式最好不要NTFS,因爲一般情況下NTFS格式的文件系統linux只具有讀的權限。就這樣奇怪的事情發生了,U盤掛載之後無法對U盤內的文件更改權限,連超級用戶也不行。調了一段時間之後纔看到如下文章,轉載至此,方便今後查閱。個人建議將外接U盤格式化成ext3,ext4,一了百了。

       原文地址:讓linux掛載的移動硬盤具有執行權限

本文試圖通過探求達到讓linux系統掛載的移動硬盤具有可執行權限之目的的途徑來梳理有關linux系統設備掛載、用戶和羣組、以及文檔權限方面的基礎知識。

一、提出問題

當插入一個windows分區格式的移動硬盤或者U盤時,linux系統自動掛載該移動硬盤到/media目錄下,通過ls -al查看其權限,顯示爲:drwx------,證明我們可以進入到該盤符目錄,但當進一步查看該盤符下的某可執行文件的權限時,發現其爲-rw-------,即可以對該文件進行讀寫操作,但不能執行該文件,通過chmod更改權限也無濟於事,此時如何獲得執行權限?(再比如在移動硬盤上有一源代碼,通過編譯產生了目標程序,但是當通過./來執行時,卻告知沒有權限,同時sudo chmod +x也不起任何作用,在實際工作中遇到這樣的情況時,一般可以通過將源碼拷貝到linux系統磁盤中進行編譯或者將編譯好的目標程序拷貝到linux系統的磁盤中再使用chmod更改權限來解決,但有時候這樣來回拷貝費時費力,如果能直接讓linux系統掛載的移動硬盤具有執行權限就方便多了)

二、linux設備掛載

這一問題涉及到硬盤掛載,首先需要了解linux系統中與磁盤掛載相關的兩個系統文件,即/etc/fstab和/etc/mtab,前者是系統分區信息以及系統啓動時磁盤的掛載參數,該文件是一個靜態文件(系統啓動後不再改變,如人爲改變,需要重啓系統);後者是當前系統中已經掛載的磁盤列表,該文件是一個動態文件,即隨系統mount和umount文件系統而隨時發生改變,例如當插入U盤時,系統在mtab文件中寫入該磁盤的相關信息,當拔下U盤時,系統隨之刪除mtab文件中有關該磁盤的信息。

fstab文件內容的格式如下:

# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>          <options>                   <dump>  <pass>

……
proc                       /proc                   proc    nodev,noexec,nosuid              0                 0

……

mtab文件內容的格式如下:

……
proc                       /proc                    proc   rw,noexec,nosuid,nodev          0                 0

……

可見fstab和mtab文件中的格式是一樣的,都是按照“設備名稱—掛載點—分區類型—掛載選項—dump選項—pass選項”的格式組織列表。

1、設備名稱是指系統中設備的名稱,比如/dev/sda1或/etc/sdb1或/etc/sdc1等,這些設備名稱可以通過sudo fdisk -l命令來查看。(上文fstab和mtab文件格式示例中的proc設備是一個虛擬設備,並不在磁盤中真實存在,而僅僅存在於內存中,存儲有關進程和系統的信息)

2、掛載點實際上就是爲掛載磁盤創建的文件夾,比如./,./usr,和./swap這樣的系統默認掛載點,當然我們可以自己使用mkdir創建一個文件夾作爲掛載點。

3、分區類型在linux下面有ext2,ext3,ext4,jfs,jfs2,reiserfs,reiser4,swap等,在windows下面有FAT和NTFS等。

4、常用的掛載選項包括:(1)auto和noauto: auto允許系統自動掛載或使用mount -a就能掛載,fstab默認就是這個選項 ;noauto使系統開機不自動掛載 或使用mount -a時不掛載;(2)rw和ro:rw表示以讀寫權限掛載該設備,ro表示以只讀權限掛載該設備;(3)suid和nosuid:suid表示允許對該設備進行uid和gid的設置操作,nosuid就是不允許設置uid和gid;(4)dev和nodevdev表示同時掛載文件系統上的特殊設備,nodev表示不掛載這些特殊設備;(5)exc和noexc:exec表示允許執行該文件系統下的二進制文件,noexc當然表示不允許執行二進制文件;(6)user、nouser、users和owner:user允許指定的普通用戶掛載該設備,nouser表示禁止普通用戶掛載該設備(僅root可以掛載該設備),users表示允許所有普通用戶掛載該設備,owner表示僅設備所有者可以掛載。user和users選項同時隱含noexec,nosuid,nodev選項;(7)sync和asnyc:sync表示對該設備的I/O操作同步進行,不進行緩衝處理,而async表示不同步,進行緩衝處理;(8)defaults: 該選項是rw, suid, dev, exec, auto, nouser, and async這些選項的組合。此外,linux系統針對不同的文件系統還可以設定其他特別選項,例如,對Windows下的NTFS文件系統,可以設置utf8(表示採用UTF-8轉換文件名稱)、uid=****(掛載設備的指定用戶id,可以通過id命令或者查看/etc/passwd文件方式獲得)、gid=****(掛載設備的指定用戶羣組id)和umask=***(掛載設備的權限屏蔽,八進制數值)等,對Windows下的FAT(包括msdos,umsdos,vfat等)文件系統,可以設置uid=****,gid=****,umask=***,dmask=***(掛載設備時應用於目錄的權限屏蔽,八進制數值)和fmask=***(掛載設備時應用於普通文件的權限屏蔽,八進制數值)。更多掛載選項可以參見man mount。

5、dump選項用來設置是否讓備份程序dump備份文件系統,0爲不備份,1爲備份,如果上次用dump備份,將顯示備份至今的天數。

6、pass選項,告訴fsck程序在開機時以什麼順序檢查文件系統,爲0就表示不檢查,(./)分區只能是1,其它的分區只能是2,當數字相同就同時檢查。

三、linux用戶和羣組以及權限

瞭解了上文中所講的設備掛載,基本已經知道如何在linux下面掛載windows分區格式的移動硬盤了,關鍵就是設置掛載選項從而獲得相應權限。在linux系統中權限設置與用戶和羣組概念直接相關,比如在上文中使用ls -al命令時,獲得的有關權限的信息(10個字符,如drwx------)可以分成四個部分,即目錄/文件標識(第1個字符,d表示目錄,-表示文件,其他還可以爲l,b和c)、所有者權限(第2-4個字符)、所有者所在的用戶羣組權限(第5-7個字符)以及其他用戶權限(最後3個字符)。權限在linux系統安全性方面具有重要作用,在此不述。權限的表示有兩種方式,即字符式和數字式:字符式用如上文中的r、w和x三個字符來分別表示讀、寫和執行權限,-表示不具有任何權限;而數字式的權限表示方法用4、2、1三個數字分別表示讀、寫和執行權限,0表示不具有任何權限,用數字式表示文檔所有者、羣組和其他用戶的權限時同一個組的權限需要累加,例如某文檔的權限是- rwx rw- ---,則用數字式表示爲760。

至此,我們可以回過頭去解決問題了,當掛載Windows分區格式的文件系統時,我們可以通過uid=****,gid=****和umask=***/dmask=***/fmask=***來設置權限,uid和gid的設置並不難,直接設置爲自己的uid和gid就可以;關於權限mask的設置採用數字式的,同樣第一個數字表示所有者的權限mask,第二個數字表示羣組的權限mask,第三個數字表示其他用戶的權限mask,如果umask=000,就表示不屏蔽任何用戶的任何權限,即所有用戶具有讀、寫和執行權限,再例如fmask=033,就表示文檔所有者具有讀、寫和執行權限,而羣組和其他用戶只具有讀取的權限,而屏蔽了權限3(1和2之和)。

四、解決問題

綜上,可以在/etc/fstab中添加像下面這樣的掛載配置,並重啓系統讓系統掛載硬盤,從而獲得執行權限。

# <file system>   <mount point>       <type>                <options>                                 <dump>        <pass>

  /dev/sdb1        /media/sdb1         ntfs      utf8,uid=1000,gid=1000, umask=000                     0             0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章