Ssh
Debian:如何檢測使用者第一次使用 SFTP 連接的時間?
我正在嘗試設置以下內容: 僅允許通過 ssh 密鑰訪問 OpenSSH sftp 伺服器,即不允許密碼驗證。SSH 密鑰在伺服器上自動生成。該伺服器旨在用作網路託管伺服器,每個網站有一個使用者。這些使用者只允許 sftp 訪問,沒有 shell。
為了讓新使用者能夠通過 sftp 檢索他們的密鑰,我們允許他們第一次使用密碼登錄(僅限第一次!)。密碼通過簡訊發送,每個新使用者都有有限的時間來連接和獲取密鑰。第一次成功連接後,密碼訪問被禁用,該使用者只允許基於密鑰的訪問。
我已經配置了這個工作流程的所有步驟,除了一個:如何檢測新使用者何時通過 sftp 首次連接?除了解析日誌還有什麼優雅的方法嗎?
除了解析日誌之外,我還能想到另外兩種方法。
- 安裝 incron。然後,您可以創建一個腳本以在讀取和關閉文件時執行。該腳本可以鎖定密碼訪問等。
- 使用 OTP(一次性密碼)。這是一個完美的解決方案。 http://www.linotp.org/doc/latest/index.html
我會選擇#2,但如果事情變得更複雜,#1 會很有用。
回答我自己的問題以指出另一種不需要安裝任何額外軟體的方法:PAM 模組 pam_exec。我從這裡得到了靈感(類似的問題,不同的背景):在我的情況下,把
auth optional pam_exec.so /path/to/command
在 /etc/pam.d/ssh 文件中。這僅在 ssh/sftp 進行密碼身份驗證時執行,而不是在它進行基於密鑰的身份驗證時執行。然後 /path/to/command 中的命令可以
- 將使用者分配給僅允許進行基於密鑰的身份驗證的組(sshd_config 中的 MatchGroup 指令)。
或者
- 將使用者名添加到一個簡單的文本文件。如果您隨後在 /etc/pam.d/ssh 中輸入“auth required pam_listfile.so item=user sense=deny file=/path/to/text/file”,那麼 pam_listfile 模組下次會小心拒絕該使用者。
有關 PAM 的優秀教程,包括我提到的兩個模組,請參閱以下連結:
http://linuxtutorial.info/modules.php?name=Howto&pagename=User-Authentication-HOWTO/x115.html