php scandir sftp,CentOS 下使用SFTP实现网站自动生成FTP账号,实现Chroot功能
背景 手上有一個這樣的系統(tǒng):后臺可以直接新建項目(網(wǎng)站),只需輸入項目名稱、訪問域名(二級)以及其他一些額外信息,就可自動生成一個模板網(wǎng)站。大致原理是:提交這些信息的時候,后臺會給項目新建一個目錄,并把一些必須的文件拷貝過去,然后會有一個二級域名映射文件實現(xiàn)二級域名訪問。當(dāng)然,一級域名可實現(xiàn)訪問,前提是要完成備案。 之前對于單個項目都是通過一個統(tǒng)一sftp賬號管理的,隨著項目的增多,發(fā)現(xiàn)要找到相應(yīng)目錄會比較困難,所以現(xiàn)在希望在新建項目的時候能夠自動生成對應(yīng)的sftp賬號,實現(xiàn)一對一管理。
過程 vsftpd是首選,我也嘗試過這種實現(xiàn)。由于內(nèi)部服務(wù)器架構(gòu)的問題,IP地址是個限制,無法實現(xiàn)vsftpd的訪問,詢問過相關(guān)人員給出的答案也是如此,所以作罷。 經(jīng)過一番了解,發(fā)現(xiàn)sftp是剩下的唯一一條路,接著熟悉、實踐,最終解決上級需求。
由于不需要安裝其他第三方軟件,只需要CentOS系統(tǒng)賬戶以及一些目錄權(quán)限的設(shè)置,整個實現(xiàn)過程不是太復(fù)雜,但權(quán)限的問題絕不是那么容易就可以搞定的,有一些 規(guī)則不能違背,否則失敗。
假設(shè)目錄結(jié)構(gòu)是這樣的: /var/www/site1 /var/www/site2
相應(yīng)的系統(tǒng)賬號分別是 site1 和 site2 ,使用passwd設(shè)置相應(yīng)密碼,site1 和 site2 的家目錄分別是/var/www/site1和 /var/www/site2
此處有兩個限制:
從site1和site2開始設(shè)置的目錄權(quán)限及其所有的上級文件夾權(quán)限,屬主和屬組必須是root;
從site1和site2開始設(shè)置的目錄權(quán)限及其所有的上級文件夾權(quán)限,只有屬主能擁有寫權(quán)限,也就是說權(quán)限最大設(shè)置只能是755。
如果我們把網(wǎng)站文件就放在site1和site2下面的話,是沒有權(quán)限求改的,這由sftp的內(nèi)在實現(xiàn)決定,我們只能遵守。所以,解決方案是,我們在site1和site2下面再分別新建一個 web 目錄,權(quán)限是 775,屬主分別是 site1 和 site2,屬組 仍然還是 root 。為實現(xiàn)apache的解析正常,apache服務(wù)的運行組需要設(shè)置成 root 。
權(quán)限設(shè)置完成后,修改 sshd_config 設(shè)置:
vim /etc/ssh/sshd_config
#注釋原來的Subsystem設(shè)置
Subsystem sftp /usr/libexec/openssh/sftp-server
#啟用internal-sftp
Subsystem sftp internal-sftp
#限制www用戶的根目錄
Match User apache
ChrootDirectory /var/www
ForceCommand internal-sftp
#限制blog和pay用戶的根目錄
Match Group root
ChrootDirectory %h
ForceCommand internal-sftp
除此之外,web 目錄下生成的其他目錄的權(quán)限也必須是 775 。可通過修改 umask 為 0002 來實現(xiàn)。
最后,一個完整的sftp 方案誕生。
ps: 升級OpenSSH的版本。只有4.8p1及以上版本才支持Chroot。 CentOS 5.4的源中的最新版本是4.3,因此需要升級OpenSSH。 可通過ssh -V命令查看是否需要升級,升級方法自行搜索。
總結(jié)
以上是生活随笔為你收集整理的php scandir sftp,CentOS 下使用SFTP实现网站自动生成FTP账号,实现Chroot功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring IOC容器-注解的方式【更
- 下一篇: GNU概念