最近在練習Linux相關配置用到 給sftp 連接用戶設置訪問目錄的權限問題,查看了好多的資料博客,鳥哥Linux私房菜也找了相關文章來看如何解決,都沒有好的解決方案,突然找到了以下這邊文章,嘗試的這大神的方法一步一步的設置,一次成功。
需要的小夥伴可以看下,本文僅用來做個人學習參考,如需轉載請註明原作者信息:
之前我服務器是使用的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-users的sftp用戶組
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
讓子文件夾upload被admin讀寫
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