我目前有一台小型 Ubuntu Server 12.04 機器(測試環境),創建了大約 3 個非 root 使用者。每個使用者在其目錄下都有自己的public_html
目錄home
,從而允許他們將多個應用程式部署為命名虛擬主機。每個使用者都屬於Apachewww-data
組,設定如下:
sudo usermod -a -G www-data [username]
sudo chown -R [username]:www-data /home/[username]/public_html
sudo chmod 2750 /home/[username]/public_html
現在,作為 root 用戶,我正在創建一個 bash 腳本,該腳本將在提示用戶的情況下自動創建 VirtualHost 的資料夾,public_html
並在/etc/apache2/sites-available/
.此腳本(使用 運行sudo
)將提示輸入使用者 ( $uzer
) 和所需的虛擬主機名稱 ( $vhost
)。到目前為止,經過幾次檢查後,我最終得到以下結果...
mkdir -vp /home/$uzer/public_html/$vhost
mkdir -vp /home/$uzer/public_html/$vhost/www
mkdir -vp /home/$uzer/public_html/$vhost/logs
mkdir -vp /home/$uzer/public_html/$vhost/backups
我需要更改這些新建立的資料夾的所有權,因此我不確定是否應該執行以下操作:
chown -vR $uzer:www-data /home/$uzer/public_html/$vhost
chmod 2750 /home/$uzer/public_html/$vhost
我的問題:
- 我的資料夾結構正確/理想嗎?
- 我知道我已經使用了遞歸 (
-R
) 選項,但是我應該對$vhost/www
,$vhost/logs
和重複相同的操作$vhost/backups
嗎? - 我是否正確地認為上面的 chmod 可能是多餘的?
- 有沒有辦法
mkdir
以使用者身分執行命令$uzer
?
答案1
Q:我的資料夾結構正確/理想嗎?
答:資料夾結構看起來不錯。
Q:我知道我已經使用了遞歸 (-R) 選項,但我是否應該對 $vhost/www、$vhost/logs 和 $vhost/backups 重複相同的操作?
答:在這些目錄上運行它是多餘的
Q:我認為上面的 chmod 可能是多餘的,這樣的想法正確嗎?
是的,從技術上講,它是多餘的,因為創建目錄的初始 sudo 正在設定“設定群組 ID 位元”,但設定該位元(2750 中的 2)並不能保證。我見過這樣的目錄,用戶要么將文件移動到目錄中,要么不小心更改了文件的群組,所以我會保留它。
有沒有辦法可以以使用者 $uzer 身分執行 mkdir 指令?
root$ su -u $user -c "mkdir ..."
您也可以使用開關來節省 /www、/log 和 /backups 的 chmod 操作步驟mkdir --mode=...
。
例如
mkdir -vp --mode=2750 /home/$uzer/public_html/$vhost
mkdir -vp --mode=2750 /home/$uzer/public_html/$vhost/www
mkdir -vp --mode=2750 /home/$uzer/public_html/$vhost/logs
mkdir -vp --mode=2750 /home/$uzer/public_html/$vhost/backups
答案2
- 實際上,您使用的資料夾結構並不重要。
- 如果您在 chown 中使用
-R
選項,它只會影響執行該命令時存在的檔案和目錄。 chmod
不可以,因為如果您手動進行任何更改,您始終必須使用命令來更改權限。- 您可以要求
/etc/sudoers
file 允許 $user 使用mkdir
指令建立任何目錄。