歡迎您光臨本站 註冊首頁

Pure-FTPd限制用戶只能上傳特定類型的文件

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

 本文原出處:Coolzsb的雜貨鋪子
 可自由轉載,但請遵循「署名-非商業用途-保持一致」的創作共用協議。
 
 如何限制FTP的上傳用戶只能傳文本文件到相對應的FTP伺服器上?
 
 咱用的最順手的FTP服務程序就是Pure-FTPd了,把pure-ftpd的文檔翻了兩遍,似乎沒有看到限制文件類型的功能設置。難道就這麼黃了嗎?且慢,Pure-FTPd提供了個pure-uploadscript的功能,這個功能的作用就是當用戶完成了一次成功的FTP上載之後,立馬呼叫一個外部的程序或者腳本就剛剛上載的文件進行操作:這個操作是以剛剛上傳的文件名作為第一個參數的。
 
 於是,咱的這個技術要求就被分解為:
 
 [*]寫一個腳本來判斷目標文件是否為真正的txt文本文件:當然了,這個腳本唯一接受的參數就是目標文件的完全路徑名
 [*]開啟Pure-FTPd的pure-uploadscript功能,並調用咱為此寫的腳本
 
 
 任務被分解出來就好辦了,咱就分塊解決了
 
 要判斷目標文件是否為真正的文本文件,不外乎以下的判斷
 
 
 [*]文件的後綴名為 txt
 [*]這個文件是真正的文本文件:其他什麼類型的文件改了文件後綴名為txt的一律不算
 
 
 取文件的後綴名很簡單,兩個管道就可以完成;不依靠文件後綴名來判斷文件類型呢?也很簡單,linux本身就有一個file命令專門用於干這活,於是這個shell script就展示如下:
 
 
 #!/bin/bash
 export LANG=zh_CN
 filetype=`/usr/bin/file -bi "$1" | awk -F";" '{print $1}'`
 Exfname=`/bin/echo "$1" | /bin/sed 's/^.*\.//' | /usr/bin/tr  `
 if [ $Exfname != "txt" -o $filetype != "text/plain" ] ; then
         echo "有反動份子搞破壞被抓住啦,其罪惡行徑$1已經被清除" >>/var/log/pureftpd.log
         rm "$1"
 fi
 
 
 保存該腳本為/etc/pure-ftpd/checkfile.sh,並賦予555的許可權。
 
 開啟Pure-FTPd的pure-uploadscript功能並調用上面的腳本
 找到Pure-FTPd的配置文件pure-ftpd.conf中的這麼一行
 
 #CallUploadScript yes
 
 把前面的#號去掉即可
 
 為了保證Pure-FTPd服務啟動自動啟動pure-uploadscript去呼叫/etc/pure-ftpd/checkfile.sh,咱修改一下pure-ftpd的啟動腳本/etc/init.d/pure-ftpd
 
 --- /tmp/init.d/pure-ftpd     2009-08-05 13:25:02.000000000 +0800
 +++ /etc/init.d/pure-ftpd     2009-08-05 13:18:48.000000000 +0800
 @@ -30,6 +30,7 @@
 
  start() {
   echo -n $"Starting $prog: "
 + /usr/sbin/pure-uploadscript -B -g 502 -u 502 -r /etc/pure-ftpd/checkfile.sh
   daemon "$pure_launch_script $pure_config --daemonize > /dev/null"
   RETVAL=$?
   [ $RETVAL = 0 ] && touch /var/lock/subsys/pure-ftpd
 @@ -39,6 +40,7 @@
  stop() {
   echo -n $"Stopping $prog: "
   killproc pure-ftpd
 + killproc pure-uploadscript
   RETVAL=$?
   [ $RETVAL = 0 ] && rm -f /var/lock/subsys/pure-ftpd
   echo
 
 
 
 於是,叫上兄弟部門的兄弟,讓他們把一個個狡猾的非法文件傳到FTP上然後看著它們的消失,世界就此清凈了。
 
 附錄1:
 
 俺寫的這個腳本純屬應付這趟差事而作,如果有更複雜的應用需求的話,翻閱Pure-FTPd的配置手冊可見下面段落:
 
 The absolute path of the newly uploaded file is passed as a first argument.
 Some environment variables are also filled with interesting values:
 
 - UPLOAD_SIZE  : the size of the file, in bytes.
 - UPLOAD_PERMS : the permissions, as an octal value.
 - UPLOAD_UID   : the uid of the owner.
 - UPLOAD_GID   : the group the file belongs to.
 - UPLOAD_USER  : the name of the owner.
 - UPLOAD_GROUP : the group name the file belongs to.
 - UPLOAD_VUSER : the full user name, or the virtual user name. (127 chars max)
 
 所以,要針對對不同用戶做不同的控制也是可以的,只不過,你的shell script要寫得更複雜些。
 
 附錄2:
 Pure-FTPd的用戶許可權控制實在是太讓人煩躁了:不同的虛擬用戶要對同一個目錄有不同的許可權還需要將之對應到不同的系統用戶,然後再來chmod、umask......



[火星人 ] Pure-FTPd限制用戶只能上傳特定類型的文件已經有2002次圍觀

http://coctec.com/docs/service/show-post-21018.html