如何讓使用者建立目錄但不建立子目錄

如何讓使用者建立目錄但不建立子目錄

我正在嘗試建立一個 Bash shell 腳本,該腳本允許將檔案從快閃裝置傳輸到使用者指定的存檔中。儘管我想限制該用戶無法在此存檔目錄中建立任何子目錄。

筆記:所以本質上,我希望使用者建立/指定的存檔目錄是一個扁平的一級結構。

我不知道如何實現這一目標,並且非常感謝我能得到的任何幫助。

答案1

沒有任何本地機制可以輕鬆實現它。 Linux的權限系統無法為建立檔案和目錄指定單獨的權限,因為目錄其實就是檔案。但嘗試這樣的方式:

  1. 使所有存檔目錄由一個(或幾個不同的)使用者擁有,專為此目的而建立。讓我們假設它的名稱為 archiveuser。
  2. 讓所有存檔目錄(我猜你有很多)都歸該用戶所有,例如:

    $ chown archiveuser:archiveuser /somedir/archivedir1
    $ chown archiveuser:archiveuser /somedir/archivedir2
    $ chown archiveuser:archiveuser /somedir/archivedir3
    
  3. 限制對存檔目錄的存取僅由所有者存取:

    $ chmod 700 /somedir/archivedir1
    $ chmod 700 /somedir/archivedir2
    $ chmod 700 /somedir/archivedir3
    
  4. 使用sudo機制授予cp對存檔目錄的命令存取權限:

    添加/etc/sudoers

    someuser1 ALL=(archiveuser) NOPASSWD:/bin/cp /path/to/pendrive/* /somedir/archiveuser/*
    someuser2 ALL=(archiveuser) NOPASSWD:/bin/cp /path/to/pendrive/* /somedir/archiveuser/*
    

    當然,為所有應該允許使用此命令的使用者建立適當的群組是很方便的。閱讀sudo教學:-)。

  5. 就這樣。使用者必須使用:

    $ sudo -u archiveuser cp /path/to/pendrive/somefile /somedir/archiveuser/ 
    

您可以建立一些別名以使其更方便使用(即alias cpt='sudo -u archiveuser cp')。另請注意,在這種情況cp -r下不允許複製目錄。命令sudomkdir被權限阻止。這樣你的目標就達成了。

相關內容