在我工作的狀況, 一台web伺服器通常會執行許多的站台, 通常會由2~3個程式設計師維護。以前我都會用sftp的方式讓程式設計師直接連進去更新程式, 但後來我發現這樣其實不是很好, 原因是上傳檔案後, 權限通常是644(我希望是600), 使用者登入後可以到處亂逛(這點是我最在意的), 假若權限沒設定還可能會發生檔案誤砍的狀況(砍到別人負責的)。
以下是我的需求
1. 程式設計師登入後只能看到自己負責的網站目錄
2. 程式設計師登入後會被chroot在某個目錄下
3. 更新檔案預設的umask為077
4. 不能造成程式設計師更新程式的不便
使用的工具
1. mount
2. proftpd (這是我偏好的ftp, 你也可以用vsftpd, 只要他有chroot及umask等功能)
環境說明
1.系統使用CentOS5.2
2.web伺服器使用Centos5.2內建的apache2.2
apache的htdocs位於/var/www/html, 其目錄下有許多的目錄方別對應到各自的virtualhost,例如
/var/www/html/a-site 對應到 a-site.test.com.tw 由 userA負責
/var/www/html/b-site 對應到 b-site.test.com.tw 由 userB 負責
實做設定
首先建立userA及userB兩組帳號, 其家目錄位於/home/userA及/home/userB
特別注意到uid 48同時也是系統帳號apache的uid, 我設定這三個user有相同的uid
# useradd userA -s /sbin/nologin -c “a-site Programmer” -u 48
# useradd userB -s /sbin/nologin -c “b-site programmer” -u 48
建立掛載點的目錄
# mkdir /home/userA/a-site
# mkdir /home/userB/b-site
將程式設計師所負責的網站掛到他的家目錄下
# mount –bind /var/www/html/a-site /home/userA/a-site
# mount –bind /var/www/html/b-site /home/userB/b-site
設定 proftpd(這裡不講述proftpd的安裝)
# vi /usr/local/proftpd/etc/proftpd.conf
[修改] Umask 077 077 (update on 2013/05/23, 新版需分別設定檔案及目錄的umask)
[修改] DefaultRoot ~
重新啟動proftpd
# kill -HUP `cat /var/run/proftpd.pid`
使用userA及userB你會發現, 登入後各自只會看到各自負責的網站目錄而且使用者沒有辦法離開家目錄, 上傳檔案的權限也符合我要的umask 077
參考資料
man mount(8)
proftpd documentation
轉貼至http://beakdoosan.blogspot.tw/