上一篇設定
利用ssh 跑sftp 協定,可以讓user只使用到sftp的作用,無法登入command line界面
這篇將延伸,設定的狀況是:在使用sftp的狀況不能登入command line,且只是用public key登入
使用環境:
CentOS ubuntu
note: 只要是標準ssh協議的設定檔都會是一樣的設定方式
首先要先建立讓使用者可以登入sftp,但是不能登入command line的設定
編輯ssh設定檔
$ sudo vim /etc/ssh/sshd_config
底下的參數可以依照使用習慣作配置
Match group sftpgroup #設定群組
ChrootDirectory /data/%u #設定登入位置
X11Forwarding no #是否使用讓此群組使用X11 登入
AllowTcpForwarding no #是否使用SSH登入
ForceCommand internal-sftp #使用剛剛修改的設定
#Note : %u 為登入的使用者
設定檔完成編輯後,就可以重新(載入)啟動服務
$ sudo service ssh reload
note: 設定完成但還沒有對應的user,要接著處理group 跟 user
建立剛剛設定好的群組名稱,這樣該群組底下的user才可以正常使用服務,以及對應的user。
# 新增group
$ sudo groupadd sftpgroup
# 新增user
$ sudo useradd userinsftp
# 修改user,登入位置,可用的指令 (如果在新增user時就指定group,會少了該user原本的group
# 這樣在處理public key登入就會出問題)
$ sudo usermod -g sftpgroup -d /data/userinsftp userinsftp
# 設定密碼
$ sudo passwd userinsftp
note: 要符合上面設定的 ChrootDirectory 位置 將該user的目錄位置調整成符合設定值
新增對應的目錄位置
# 沒有/data 時才需要新增-p參數,至於為啥就查一下mkdir的使用方式
$ sudo mkdir -p /data/userinsftp
# 設定目錄權限,如果目錄擁有者不是root
# 使用sftp登入時會出現 : 「 Write failed: Broken pipe 」錯誤訊息
$ sudo chown root:sftpgroup /data/userinsftp
# 群組符合寫入的動作,才可以透過sftp建目錄、建檔案
$ sudo chmod 770 /data/userinsftp
以上步驟完成後就可以完成sftp登入以及檔案傳輸的動作
設定public key登入
接下來就是把使用密碼登入,換成用public key登入
編輯ssh設定檔
$ sudo vim /etc/ssh/sshd_config
找到PasswordAuthentication 與 AuthorizedKeysFile
預設PasswordAuthentication會是註解的狀態,所以預設值是可用密碼登入
而AuthorizedKeysFile 預設的設定是會在每個user的home目錄底下
找到這兩個值,改成下列的樣子
# PasswordAuthentication yes
PasswordAuthentication no
#AuthorizedKeysFile %h/.ssh/authorized_keys
AuthorizedKeysFile /etc/ssh/keys/%u/authorized_keys
一樣的,設定檔完成編輯後,就可以重新(載入)啟動服務
$ sudo service ssh reload
接下來就是處理authorized_keys 檔案的動作
# 建立keys目錄
$ sudo mkdir /etc/ssh/keys/
# 設定keys的目錄權限
$ sudo chmod 755 /etc/ssh/keys/
# 完成目錄設定後,接下來就是user個別的目錄、檔案設定了,以後有建立新的user且會用到SSH login
# 都要進行這個步驟
# 這裡就用上面已建立的 「userinsftp」進行示範
$ sudo mkdir /etc/ssh/keys/userinsftp
# 修改權限
$ sudo chmod 700 /etc/ssh/keys/userinsftp
建立authorized_keys 的方式有很多種
1. 用ssh-copy-id
2. 自行建立authorized_keys,寫入要登入的public key
# 這裡用自行建立的方式
$ touch /etc/ssh/keys/userinsftp/authorized_keys
# 設定目錄權限
$ chown userinsftp:userinsftp /etc/ssh/keys/userinsftp/authorized_keys
$ chmod 600 /etc/ssh/keys/userinsftp/authorized_keys
# 寫入public key
$ vim /etc/ssh/keys/userinsftp/authorized_keys
使用public key時會出現的錯誤訊息
ssh log 會顯示的錯誤資訊
fatal: bad ownership or modes for chroot directory component
client端會顯示的錯誤訊息
Couldn't read packet: Connection reset by peer
解決方式:
這個訊息都是在說,登入的目錄或是user群組、authorized_keys的錯誤訊息。
將流程重新檢查一邊比較適合。