SFTP Server

    使帳號僅能登入 SFTP 而不能登入 SSH,而且限制用戶目錄(Chroot)

    適用 CentOS 6 以後版本

    編輯 /etc/ssh/sshd_config
    NOTE: 註解 Subsystem 行,加上其他幾行

    # override default of no subsystems
    #Subsystem      sftp    /usr/libexec/openssh/sftp-server
    Subsystem        sftp   internal-sftp
    
    Match Group sftp-only
        ChrootDirectory /sftp-server/%u-root
        X11Forwarding no
        AllowTcpForwarding no
        ForceCommand internal-sftp
    

    新增帳號/群組

    groupadd sftp-only
    useradd -c "sftp users" -G sftp-only -M -s /sbin/nologin test 
    

    新增 sftp 各帳號的根目錄,以及權限設定 *重要*

    mkdir /sftp-server
    mkdir -p  /sftp-server/test-root/test
    chown mytest:mytest /sftp-server/test-root/test 

    TIPs:

    - ChrootDirectory 所定義的目錄 Owner 必須是 root,否則 /var/log/secure 會出現錯誤:
    Accepted password for test from 10.12.25.68 port 60213 ssh2
    pam_unix(sshd:session): session opened for user test by (uid=0)
    fatal: bad ownership or modes for chroot directory "/home/test"
    pam_unix(sshd:session): session closed for user test

    - sftp 各帳號的目錄架構類似

    # tree -l /sftp-server
    /sftp-server
    ├── test2-root
    │   └── test2
    │       └── readme.txt
    └── test-root
        └── test

    4 directories, 1 file

    NOTE: 如果不多建一層目錄 test-root,會使每個帳號再登入後,可以看到其他目錄的名稱,如果不在意這,可以修改成
    ChrootDirectory /sftp-server

    省略 test-root 這層目錄

    F.A.Q

    Q: /var/log/secure 出現錯誤

    Accepted password for test from 10.12.25.68 port 60213 ssh2
    pam_unix(sshd:session): session opened for user test by (uid=0)
    fatal: bad ownership or modes for chroot directory "/home/test"
    pam_unix(sshd:session): session closed for user test

    A: ChrootDirectory 所定義的目錄 Owner 必須是 root。

    設定 Chroot 目錄權限:錯誤的目錄權限設定會導致在 log 中出現 "fatal: bad ownership or modes for chroot directory XXXXXX" 的訊息。根據 openssh 5.1 chrootdirectory permissions issue 這篇文章的資訊顯示,目錄的權限設定有兩個要點:

    • 由 ChrootDirectory 指定的目錄開始一直往上到系統根目錄為止的目錄擁有者都只能是 root
    • 由 ChrootDirectory 指定的目錄開始一直往上到系統根目錄為止都不可以具有群組寫入權限
       
    Q: 帳號只能使用 SFTP,而無法用 SSH 登入。

    A: CentOS 5 以前版本可用下述方式

    修改某帳號的 shell

    # usermod -s /usr/libexec/openssh/sftp-server john
    # echo "/usr/libexec/openssh/sftp-server" >> /etc/shells 
    標籤 (Edit tags)
    • No tags
    您必須 登入 才能發佈評論。
    Powered by MindTouch Core