linux配置sftp及權限設置

前言1:應用場景:對於數據量很大的交互,對接方不肯意經過接口方式對接式可採用ftp的方式數據交互。html

A——>上傳數據文件到sftp服務器linux

    *:須要給A開設一個只用於sftp上傳的帳號,而且只能在指定目錄下活動。數據庫

B——>從sftp服務器上獲取數據文件服務器

    *:也須要開設一個sftp帳號,權限設置視狀況而定。ssh

前言2:服務器版本爲Centos6.5, 採用系統自帶的internal-sftp, 限制用戶只能在本身的目錄下活動,這裏須要使用到chroot,openssh 4.8p1之後都支持chroot,我如今用的是CentOS 6.5,自帶的openssh已是5.3p1,足夠了。測試

一、 查看 openssh的版本,若是低於4.8p1,須要自行升級安裝ui

#    ssh -Vspa

二、 建立sftp組.net

#    groupadd sftprest

三、 建立一個sftp用戶,名爲guest

#    useradd -g sftp -s /bin/false guest

    *: /bin/false  表示不能經過ssh的方式登陸

四、設置密碼

#     passwd  guest

    *:輸入兩次密碼,回車便可。也可經過此命令修改已有的帳號密碼。

五、建立用戶活動的根目錄

#     mkdir -p /5108/sftp

#     usermod -d /5108/sftp guest

六、配置sshd_config

#     vi /etc/ssh/sshd_config

    找到以下這行,並註釋掉

    Subsystem      sftp    /usr/libexec/openssh/sftp-server

    添加以下幾行:

    Subsystem       sftp    internal-sftp  # 指定使用sftp服務使用系統自帶的internal-sftp

    Match Group sftp   # 匹配sftp組的用戶,若是要匹配多個組,多個組之間用逗號分割

    ChrootDirectory /5108/sftp/ # 用chroot將用戶的根目錄指定到 /5108/sftp/, 可設爲"/",表明根目錄。

    ForceCommand    internal-sftp  # 指定sftp命令

    AllowTcpForwarding no  # 容許用戶能使用端口轉發

    X11Forwarding no # 容許用戶能使用端口轉發

     :wq保存並退出

七、 設定Chroot目錄權限

#     chown root:sftp /5108/sftp

#     chmod 755 /5108/sftp

*:權限必須爲755

八、 創建SFTP用戶登入後可寫入的目錄

照上面設置後,在重啓sshd服務後,用戶 guest 已經能夠登陸,但使用chroot指定根目錄後,根應該是沒法寫入的,因此要新建一個目錄供 guest 上傳文件。這個目錄全部者爲 guest,全部組爲sftp,全部者有寫入權限,而全部組無寫入權限

#    mkdir /5108/sftp/ABH

#    chown guest:sftp /5108/sftp/ABH

#    chmod 755 /5108/sftp/ABH

*: 權限可設置爲777,表明組的全部用戶都擁有全部權限。

九、 修改/etc/selinux/config文件中的SELINUX="" 爲 disabled或者

#    setenforce 0

十、 重啓sshd服務

#     service sshd restart

測試ssh可否登陸:

ssh guest@127.0.0.1

測試sftp可否登陸:

sftp guest@127.0.0.1

 

到此,咱們已經把A的帳號創建好了,並已經設置了相應的權限。下面再配置B,也就是咱們系統下載文件的帳號。

#     useradd -g sftp -s /bin/false  consftp

#     passwd  consftp

設置帳號後,就能經過sftp的方式登陸了,再配置下路徑:

#    usermod -d /5108/sftp/ABH consftp

 

參考資料:http://blog.sina.com.cn/s/blog_4fd50c3901018a0l.html

理解chroot:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/

補充:

groupdel命令:刪除組

groupdel 命令用於刪除再也不須要的組,若是指定的組中包含用戶,則必須先刪除組裏面的用戶>之後,才能刪除組。

#     sudo groupdel test

 

vipw

  -g, --group                  編輯 group 數據庫  
  -h, --help                    顯示此幫助信息並推出  
  -p, --passwd                  編輯 passwd 數據庫  
  -q, --quiet                  安靜模式  
  -R, --root CHROOT_DIR        chroot 到的目錄  
  -s, --shadow                  編輯 shadow 或 gshadow 數據庫 

問題:

Write failed: Broken pipe                                                                                               

Couldn't read packet: Connection reset by peer

這個問題的緣由是ChrootDirectory的權限問題,你設定的目錄必須是root用戶全部,不然就會出現問題。因此請確保sftp用戶根目錄的全部人是root, 權限是 750 或者 755

關鍵是ChrootDirectory /5108/sftp/%u 目錄的配置,可更改目錄爲"/"試試

 

後續:

第一次在設置第二個帳號的時候,重複建立了目錄,設置了權限,因此致使第一個帳號也鏈接不上。折騰了好久,在此記錄下,引覺得戒,之後配置方面的東西,必定要先看懂,瞭解流程。切記切記......

相關文章
相關標籤/搜索