py-FTP服務(wù)器之二:用戶配置文件

關(guān)于pyftpdlib建立 FTP服務(wù)器的詳細(xì)內(nèi)容:
py-FTP服務(wù)器之一:虛擬運(yùn)行環(huán)境
py-FTP服務(wù)器之二:用戶配置文件
py-FTP服務(wù)器之三:?jiǎn)⒂肧SL連接
py-FTP服務(wù)器之四:ftp主程序
py-FTP服務(wù)器之五:其他

基本思路

  • 對(duì)用戶密碼進(jìn)行加密, 目的是在服務(wù)器被打開(kāi)后, 用戶的密碼明文不被看到, 看到的只是密碼加密后的內(nèi)容, 沒(méi)啥用(作為常規(guī)安全性考慮 )
  • 用戶配置文件要注明: 用戶名, 密碼, 訪問(wèn)路徑以及權(quán)限
    1. 建立一個(gè)明文的用戶配置文件user.txt(密碼明文).
    2. 寫(xiě)一個(gè)md5UserPassword.py文件對(duì)user.txt中的用戶密碼進(jìn)行加密, 輸出一個(gè)加密后的用戶配置文件userMD5.txt(不可逆加密).
    3. 配置主ftp.py的程序, 使其將ftp客戶端提交的用戶密碼進(jìn)行同樣的不可逆加密, 然后與用戶密碼比對(duì), 從而確定密碼是否正確.

明文用戶配置文件

用戶配置文件我做了一個(gè)txt格式的, 便于在windows上直接編輯, 隨便什么格式都行. 我做的文件是user.txt (用戶權(quán)限字母lreadfmwMT含義詳見(jiàn)《pyftpdlib的用戶權(quán)限清單》):

# 用戶名,密碼,路徑,權(quán)限 (路徑要以/開(kāi)頭,當(dāng)前文件夾直接打/即可)
# 中間用tab隔開(kāi),標(biāo)準(zhǔn)格式為: []tab[]tab[]tab[],非上述格式的默認(rèn)不解析不處理
# 一個(gè)用戶只能設(shè)置一個(gè)路徑(只能是str), 如果權(quán)限里有e則可以訪問(wèn)所有子文件夾, 否則只能訪問(wèn)當(dāng)前目錄
# 讀權(quán)限: lr + e. 列表權(quán)限[l]必填, 下載權(quán)限[r]一般都要有, 不然這個(gè)ftp拿來(lái)干嘛, 只看一個(gè)列表嗎? 至于進(jìn)入子目錄的權(quán)限[e]建議開(kāi)啟,不然只有當(dāng)前這一個(gè)目錄可供用戶操作了
# 寫(xiě)權(quán)限: wf + dm. 上傳權(quán)限[w], 重命名權(quán)限[f]建議給予; 刪除權(quán)限[d], 新建文件夾權(quán)限[m]等建議審慎授權(quán)
# 以#號(hào)開(kāi)頭的行都視同備注, 都不處理(直接轉(zhuǎn)到新文件去)
# 復(fù)制時(shí)注意檢查, 間隔符號(hào)是tab鍵, 輸出網(wǎng)頁(yè)時(shí)可能變化

# 完全授權(quán)
zhangsan    12345678    /folder1/   lreadfmwMT
# 上傳和查閱
lisi    12345678    /folder1/   lrewf
# 查閱
wangwu  12345678    /folder1/   lre

用戶密碼加密程序

md5UserPassword.py文件: 讀取user.txt, 生成userMD5.txt

# coding:utf-8
# 從user.txt讀取用戶信息, 然后生成加密的用戶密碼文件userMD5.txt, 供主ftp.py讀取使用
from hashlib import md5


split_str = '\t'
userfile = 'user.txt'  # 明文用戶配置文件
new_txt = []  # 用戶列表

# 從user.txt讀取用戶信息,加密其中的密碼部分
with open(userfile) as f:
    for line in f:
        line = line.replace('\n', '')  # 去掉最后的\n
        if not line.startswith('#') and line:  # #后面是備注
            if len(line.split(split_str)) == 4:  # 用戶名/密碼/路徑/權(quán)限
                line3 = line.split(split_str)
                new_txt.append('%s\t%s\t%s\t%s' % (line3[0], md5(line3[1].encode('utf-8')).hexdigest(), line3[2], line3[3]))
            else:
                new_txt.append(line)
        else:
            new_txt.append(line)


# 生成加密后的文件userMD5.txt
new_txt_name = 'userMD5.txt'
with open(new_txt_name, 'w') as f:
    f.write('\n'.join(new_txt))

加密后的用戶配置文件

userMD5.txt, 被主ftp.py文件直接讀取使用

# 注釋部分跟前面的user.txt文件一樣, 就不單獨(dú)寫(xiě)了
# 只有密碼部分有改變

# 完全授權(quán)
zhangsan    875e1a4b4deeaae78e38473fdfb19649    /folder1/   lreadfmwMT
# 上傳和查閱
lisi    c2c49293af6f9c502ece7da85a8dd582    /folder1/   lrewf
# 查閱
wangwu  c11db5c159a667398f1612b23881ee3b    /folder1/   lre
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容