1. 程式人生 > >linux下ssh/sftp配置和許可權設定

linux下ssh/sftp配置和許可權設定

基於 ssh 的 sftp 服務相比 ftp 有更好的安全性(非明文帳號密碼傳輸)和方便的許可權管理(限制使用者的活動目錄)。

1、開通 sftp 帳號,使使用者只能 sftp 操作檔案, 而不能 ssh 到伺服器

2、限定使用者的活動目錄,使使用者只能在指定的目錄下活動,使用 sftp 的 ChrootDirectory 配置

確定版本

#確保 ssh 的版本高於 4.8p1 否則升級一下 一般都高於這個版本
ssh -V

新建使用者和使用者組

#新增使用者組 sftp 
groupadd sftp
#新增使用者 指定家目錄 指定使用者組 不允許shell登入
useradd -d /home/sftp -m -g sftp -s /bin/false sftp
#設定使用者密碼
passwd sftp

活動目錄

#設定你想要限定的活動目錄
mkdir -p /var/www/sftp
#配置許可權 注意此目錄如果用於後續的 chroot 的活動目錄 目錄所有者必須是 root 必須是!!!
chown root.sftp /var/www/sftp

基本的 ssh 配置

# ssh 服務的配置檔案
vi /etc/ssh/sshd_config

#基本的ssh遠端登入配置
#開啟驗證
PasswordAuthentication yes
#禁止空密碼登入
PermitEmptyPasswords no
#開啟遠端登入 PermitRootLogin yes

至此你就可以使用 ssh 遠端登入伺服器了

配置 sftp

#這裡我們使用系統自帶的 internal-sftp 服務即可滿足需求
#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem      sftp    internal-sftp

Subsystem

Subsystem 是說 ssh 的子模組 這裡啟用的即為 sftp 模組,我們使用系統自帶的 internal-sftp 來提供此服務,其實配置到這你即可以使用帳號 ssh 登入,也可以使用 ftp 客戶端 sftp 登入。

如果你希望使用者只能 sftp 而不能 ssh 登入到伺服器,而且要限定使用者的活動目錄,繼續看下面的配置

#對登入使用者的限定
Match Group sftp
    ChrootDirectory /var/www/sftp # 還可以用 %h代表使用者家目錄 %u代表使用者名稱
    ForceCommand    internal-sftp # 強制使用系統自帶的 internal-sftp 服務 這樣使用者只能使用ftp模式登入
    AllowTcpForwarding no
    X11Forwarding no

Match [User|Group] userName|groupName

Match [User|Group] sftp    這裡是對登入使用者的許可權限定配置 Match 會對匹配到的使用者或使用者組起作用 且高於 ssh 的通項配置

ChrootDirectory    使用者的可活動目錄 可以用 %h 標識使用者家目錄 %u 代表使用者名稱 當 Match 匹配的使用者登入後 會話的根目錄會切換至此目錄 這裡要尤其注意兩個問題

1、 chroot 路徑上的所有目錄,所有者必須是 root,許可權最大為 0755,這一點必須要注意而且符合 所以如果以非 root 使用者登入時,我們需要在 chroot 下新建一個登入使用者有許可權操作的目錄

2、chroot 一旦設定 則相應的使用者登入時會話的根目錄 "/" 切換為此目錄,如果你此時使用 ssh 而非 sftp 協議登入,則很有可能會被提示:

/bin/bash: No such file or directory

這則提示非常的正確,對於此時登入的使用者,會話中的根目錄 "/" 已經切換為你所設定的 chroot 目錄,除非你的 chroot 就是系統的 "/" 目錄,否則此時的 chroot/bin 下是不會有 bash 命令的,這就類似新增使用者時設定的 -s /bin/false 引數,shell 的初始命令式 /bin/false 自然就無法遠端 ssh 登入了

ForceCommand    強制使用者登入會話時使用的初始命令 如果如上配置了此項 則 Match 到的使用者只能使用 sftp 協議登入,而無法使用 ssh 登入 會被提示

This service allows sftp connections only.

配置完成 重啟 sshd 服務

service sshd restart

注意:

1、chroot 可能帶來的問題,因為 chroot 會將會話的根目錄切換至此,所以 ssh 登入很可能會提示 /bin/bash: No such file or directory 的錯誤,因為此會話的路徑會為 chroot/bin/bash

2、ForceCommand 為會話開始時的初始命令 如果指定了比如 internal-sftp,則會提示 This service allows sftp connections only. 這就如同 usermod -s /bin/false 命令一樣,使用者登入會話時無法呼叫 /bin/bash 命令,自然無法 ssh 登入伺服器

 

 

原文連結:https://my.oschina.net/sallency/blog/784022