在Linux Centos 6.3 上搭建SFTP文件服務器

在Linux Centos 6.3 上搭建SFTP文件服務器

  • step1:
    首先查看ssh版本,版本不應低於4.8p1,因爲配置權限需要版本添加的新配置項ChrootDirectory來完成,若低於此版本,請自行升級。
[root@localhost home]# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
  • step2:
    創建sftp用戶組和用戶,並給用戶設置密碼
[root@localhost home]# groupadd sftpg #創建用戶組sftp
[root@localhost home]# useradd -g sftpg -s /sbin/nologin sftpuser1 #創建用戶 sftpuser1
[root@localhost home]# passwd sftpuser1
更改用戶 sftpuser1 的密碼 。
新的 密碼:
重新輸入新的 密碼:
passwd: 所有的身份驗證令牌已經成功更新。

-g sftp 指定該用戶的組爲sftpg
-s 是指定用戶登入後所使用的shell。默認值爲/bin/bash。如果不想讓用戶登錄系統可以用 -s /sbin/nologin,此用戶就不可以登錄系統。

  • step3:
    創建sftp文件目錄,並按用戶名區分每個用戶登錄路徑,指定用戶登錄的根目錄
[root@localhost home]# mkdir -p /data/sftp
[root@localhost home]# cd /data/sftp
[root@localhost sftp]# ls -rtl
總用量 0
[root@localhost sftp]# mkdir sftpuser1
[root@localhost sftpuser1]# usermod -d /data/sftp/sftpuser1 sftpuser1
  • step4:
    編輯配置文件/etc/ssh/sshd_config

    [root@localhost sftp_admin1]# vi /etc/ssh/sshd_config 

    在配置文件中一頓操作:
    1.註釋掉這行

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

    2.增加以下6行

    Subsystem sftp internal-sftp
    Match Group sftp
    ChrootDirectory /data/sftp/%u #設定屬於用戶組sftp的用戶訪問的根文件夾
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no #設置不允許SSH的X轉發

  • step5:
    給用戶家目錄更改屬主並授權,家目錄屬主必須是root,權限可以是755或者750

[root@localhost sftpuser1]# chown root:sftpg /data/sftp/sftpuser1
[root@localhost sftpuser1]# chmod 750 /data/sftp/sftpuser1
[root@localhost sftp]# ls -rtl
總用量 4
drwxr-x---. 2 root sftpg 4096 728 20:43 sftpuser1
  • step6:
    創建sftpuser1文件上傳目錄。
    照上面設置,在重啓sshd服務後,用戶sftpuser1已經可以登錄。但使用chroot指定根目錄後,根應該是無法寫入的,所以要新建一個目錄供sftpuser1上傳文件。這個目錄所有者爲sftpuser1,所有組爲sftp,所有者有寫入權限,而所有組無寫入權限。命令如下:
[root@localhost sftpuser1]# mkdir /data/sftp/sftpuser1/upload
[root@localhost sftpuser1]# chown sftpuser1:sftpg /data/sftp/sftpuser1/upload
[root@localhost sftpuser1]# chmod 755 /data/sftp/sftpuser1/upload
  • step7:
    修改/etc/selinux/config,將文件中的SELINUX=enforcing 修改爲 SELINUX=disabled ,然後保存退出。在輸入命令:setenforce 0
[root@localhost sftpuser1]# vi /etc/selinux/config
[root@localhost sftpuser1]# setenforce 0

至於爲什麼要修改SELINUX,可參考:https://www.zhihu.com/question/20559538

  • step8:
    重啓sshd服務
[root@localhost sftp_admin1]# service sshd restart
停止 sshd[確定]
正在啓動 sshd[確定]
  • step9:
    測試搭建成果:
[root@localhost ~]# sftp [email protected]
Connecting to 164.22.13.5...
sftpuser1@164.22.13.5's password: 
sftp> ls -rtl
drwxr-xr-x    2 sftpuser1 sftpg        4096 Jul 28 21:01 upload
sftp> cd upload
sftp> ls -rlt
sftp> lls
abc  admin1  anaconda-ks.cfg  bam  downfile  install.log  install.log.syslog  link  link.tar.gz  sftpfile  tmp  upfile
sftp> put upfile
Uploading upfile to /data/sftp/sftpuser1/upload/upfile
upfile                                                                                                                                                                         100%    0     0.0KB/s   00:00    
sftp> ls -rlt
-rw-r--r--    1 sftpuser1 sftpg           0 Jul 28 21:06 upfile
sftp> get upfile
Fetching /data/sftp/sftpuser1/upload/upfile to upfile
sftp> rm upfile
Removing /data/sftp/sftpuser1/upload/upfile

sftp登錄: sftp username@ip,根據提示輸入password
登錄成功後ls 命令看到當前目錄下有upload文件上傳目錄,cd 進入upload目錄
lls 顯示本地目錄下的文件列表
put 文件名 : 將本地文件上傳到upload目錄下
get 文件名 : 將遠程目錄下爲文件下載到本地目錄
rm 文件名 :將upload目錄下的文件刪除

  • step10:
    問題及解決辦法:
    1.文件上傳時報錯:
sftp> put downfile
Uploading downfile to /data/sftp/sftpuser2/upload/downfile
Couldn't get handle: Permission denied

該目錄權限問題,按照下面規則設置:

  1. 目錄開始一直往上到系統根目錄爲止的目錄擁有者都只能是 root,用戶組可以不是 root。
  2. 目錄開始一直往上到系統根目錄爲止都不可以具有羣組寫入權限
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章