Linux 配置SFTP,設置用戶訪問權限

最近在練習Linux相關配置用到 給sftp 連接用戶設置訪問目錄的權限問題,查看了好多的資料博客,鳥哥Linux私房菜也找了相關文章來看如何解決,都沒有好的解決方案,突然找到了以下這邊文章,嘗試的這大神的方法一步一步的設置,一次成功。

需要的小夥伴可以看下,本文僅用來做個人學習參考,如需轉載請註明原作者信息:

版權聲明:轉載必須註明本文轉自嚴振杰的博客:http://blog.yanzhenjie.com

之前我服務器是使用的Windows Server 2003,這段時間由於訪問量變大我還是機智的換成Linux了,在搭建FTP的時候看到網上都是推薦vsftpd,不過我不推薦這個傢伙,看官且看下文。

我推薦使用SSH自帶的SFTP,SFTP是Secure File Transfer Protocol的縮寫,安全文件傳送協議。SFTP使用加密傳輸認證信息和傳輸的數據,所以使用SFTP是非常安全的。SFTP之於FTP可以理解爲Https之於Http,由於這種傳輸方式使用了加密/解密技術,所以傳輸效率比普通的FTP要低得多,如果您對網絡安全性要求更高時,可以使用SFTP代替FTP。

**本文最終的效果:**在Linux下建立sftp-users用戶組,在該組下建多個用戶,禁止該組所有用戶ssh遠程登錄服務器,但是允許該組所有用戶登錄sftp,並只能訪問自己的目錄及子目錄中的文件。

本文以admin用戶爲例,下面出現的admin均指該用戶或者該用戶目錄。

安裝ssh和openssh-sftp-server


其實Linux發行版基本都是安裝了OpenSSH的,不過我們這裏還是確認一下是否安裝,
一般我們需要安裝openssh-server、openssh-sftp-server,所以我們檢查是否安裝了SSH。

Ubuntu檢查是否安裝了OpenSSH

dpkg --get-selections | grep openssh


CentOS檢查是否安裝了OpenSSH

  • 以yum方式安裝的:
yum list installed openssh
  •  以rpm包安裝的:
rpm -qa | grep openssh
  • 以deb包安裝的:
dpkg -l | grep openssh


如果已經三個包都安裝了,那麼你的命令行該是如下:

openssh-server              installed
openssh-sftp-server         installed
...


哪個沒有打印就是沒有安裝,安裝即可。

Ubuntu 安裝,依次執行以下命令,install後面只寫沒有安裝的包名即可

sudo apt-get update
sudo apt-get install openssh-client openssh-server openssh-sftp-server


CentOS 安裝,install後面只寫沒有安裝的包名即可

sudo yum install openssh-client openssh-server openssh-sftp-server


如果都是安裝的,我們需要保證OpenSSH的版本不得低於4.8,因爲我們要用ChrootDirectory配置用戶訪問目錄,所以檢查下SSH的版本,執行命令ssh -V會打印出如下版本信息:

OpenSSH_6.6.1 Ubuntu-2ubuntu2, OpenSSL 1.0.1f...


如果SSH的版本低於4.8,需要升級。

Ubuntu升級SSH

sudo apt-get update
sudo apt-get install openssh-server


CentOS升級SSH

sudo yum update -y openssh-server


建立用戶組和用戶


我們要建立一個專門管理sftp用戶的用戶組,方便我們管理權限。
1、建立一個名爲sftp-userssftp用戶組

sudo groupadd sftp-users


2、在該組建立幾個需要登錄sftp的用戶

新建用戶名爲admin的用戶:

sudo useradd -g sftp-users -m admin


修改admin的密碼:

passwd admin


然後連續兩次輸入你要給該用戶設置的密碼即可。

3、如果該用戶已存在,但是不在sftp-users組中,可以移動用戶到改組

usermod –g sftp_users admin


配置ssh和權限


1、打開/etc/ssh/sshd_config文件

2、修改X11Forwarding的值爲no,原來可能是:X11Forwarding yes,現在修改爲X11Forwarding no,如果X11Forwarding不存在,就在文件最後添加上面的代碼。
修改AllowTcpForwarding的值爲no,原來可能是AllowTcpForwarding yes,現在修改爲AllowTcpForwarding no,如果AllowTcpForwarding不存在,就在文件最後添加上面的代碼。

3、修改Subsystem sftp爲internal-sftp

Subsystem sftp /usr/libexec/openssh/sftp-server
# 或者
Subsystem sftp /usr/lib/openssh/sftp-server


現在修改爲:

Subsystem sftp internal-sftp


4、在文件末尾增加內容

Match Group sftp-users
    ChrootDirectory %h
    ForceCommand internal-sftp


Match Group sftp-users這一行是指定以下的子行配置是匹配sftp-users用戶組的,多個用戶組用英文逗號分隔。
ChrootDirectory %h該行指定Match Group行指定的用戶組驗證後用於chroot環境的路徑,也就是默認的用戶目錄,比如/home/admin;也可以寫明確路徑,例如/data/www
ForceCommand internal-sftp該行強制執行內部sftp,並忽略任何~/.ssh/rc文件中的命令。
這裏要特別注意,因爲ChrootDirectory %h模式,所以我們等下要設置sftp-users中的所有用戶的用戶目錄權限爲root擁有,否則sftp-users組中的用戶無法用sftp登錄。

修改sftp-users用戶組用戶目錄權限


上面說了,因爲使用了ChrootDirectory %h,現在來修改權限。

1、修改權限爲root用戶擁有

chown root /home/admin


2、修改權限爲root可讀寫執行,其它用戶可讀

chmod 755 /home/admin


3、重啓ssh,登錄sftp

sudo service ssh restart


現在就可以使用sftp登錄了,但是我們發現,我們不能上傳文件,那是因爲登錄後默認是用戶目錄,比如/home/admin,但是該目錄是root用戶擁有,因此我們還要修改權限。

注意:centos7重啓ssh的命令是sudo systemctl restart sshd.service,另外可以設置ssh爲開機啓動,命令是sudo systemctl enable sshd.service

4、在用戶目錄下建立子目錄,讓sftp-users中的用戶可讀寫文件
我們現在在/home/admin目錄下新建一個upload文件夾:

cd /home/admin/
mkdir upload


5、授權upload文件夾讀寫
讓子文件夾upload屬於admin

chown admin /home/admin/upload


讓子文件夾uploadadmin讀寫

chmod 755 /home/admin/upload


重啓ssh,登錄sftp


現在全部都配置完了,如果在上面第三步沒有重啓ssh的話,現在重啓後既可以登錄使用了。

sudo service ssh restart


centos7.x的系統如果執行上面這個命令提示不存在,執行:

sudo systemctl restart sshd


Windows登錄sftp推薦使用WinScp,Linux用命令即可,Mac推薦使用Yummy FTP
版權聲明:本文爲CSDN博主「嚴振杰」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/yanzhenjie1003/article/details/70184221

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章