之前我伺服器是使用的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
1centos檢查是否安裝了openssh
# 以yum方式安裝的:
yum list installed openssh
# 以rpm包安裝的:
rpm -qa | grep openssh
# 以deb包安裝的:
dpkg -l | grep openssh12
3456
78如果已經三個包都安裝了,那麼你的命令列該是如下:
openssh-server installed
openssh-sftp-server installed
...123
哪個沒有列印就是沒有安裝,安裝即可。
ubuntu 安裝,依次執行以下命令,install後面只寫沒有安裝的包名即可
sudo apt-get update
sudo apt-get install openssh-client openssh-server openssh-sftp-server12
centos 安裝,install後面只寫沒有安裝的包名即可
sudo yum install openssh-client openssh-server openssh-sftp-server
1如果都是安裝的,我們需要保證openssh的版本不得低於4.8,因為我們要用chrootdirectory配置使用者訪問目錄,所以檢查下ssh的版本,執行命令ssh -v會列印出如下版本資訊:
openssh_6.6.1 ubuntu-2ubuntu2, openssl 1.0.1f...
1如果ssh的版本低於4.8,需要公升級。
ubuntu公升級ssh
sudo apt-get update
sudo apt-get install openssh-server12
centos公升級ssh
sudo yum update -y openssh-server
1建立使用者組和使用者
我們要建立乙個專門管理sftp使用者的使用者組,方便我們管理許可權。
1、建立乙個名為sftp-users的sftp使用者組
sudo groupadd sftp-users
12、在該組建立幾個需要登入sftp的使用者
新建使用者名為admin的使用者:
sudo useradd -g sftp-users -m admin
1修改admin的密碼:
passwd admin
1然後連續兩次輸入你要給該使用者設定的密碼即可。
3、如果該使用者已存在,但是不在sftp-users組中,可以移動使用者到改組
usermod –g sftp_users admin
1配置ssh和許可權
1、開啟/etc/ssh/sshd_config檔案
2、修改x11forwarding值為no
原來可能是:
x11forwarding yes
1現在修改為:
x11forwarding no
1如果x11forwarding不存在,就在檔案最後新增上面的**。
3、修改subsystem sftp為internal-sftp
subsystem sftp /usr/libexec/openssh/sftp-server
# 或者
subsystem sftp /usr/lib/openssh/sftp-server12
3現在修改為:
subsystem sftp internal-sftp
14、在檔案末尾增加內容
match group sftp-users
allowtcpforwarding no
chrootdirectory %h
forcecommand internal-sftp12
34match group sftp-users這一行是指定以下的子行配置是匹配sftp-users使用者組的。
chrootdirectory %h該行指定match group行指定的使用者組驗證後用於chroot環境的路徑,也就是預設的使用者目錄,比如/home/admin。
forcecommand internal-sftp該行強制執行內部sftp,並忽略任何~/.ssh/rc檔案中的命令。
這裡要特別注意,因為chrootdirectory %h模式,所以我們等下要設定sftp-users中的所有使用者的使用者目錄許可權為root擁有,否則sftp-users組中的使用者無法用sftp登入。
修改sftp-users使用者組使用者目錄許可權
上面說了,因為使用了chrootdirectory %h,現在來修改許可權。
1、修改許可權為root使用者擁有
chown root /home/admin
12、修改許可權為root可讀寫執行,其它使用者可讀
chmod 755 /home/admin
13、重啟ssh,登入sftp
sudo service ssh restart
1現在就可以使用sftp登入了,但是我們發現,我們不能上傳檔案,那是因為登入後預設是使用者目錄,比如/home/admin,但是該目錄是root使用者擁有,因此我們還要修改許可權。
4、在使用者目錄下建立子目錄,讓sftp-users中的使用者可讀寫檔案
我們現在在/home/admin目錄下新建乙個upload資料夾:
cd /home/admin/
mkdir upload12
5、授權upload資料夾讀寫
讓子資料夾upload屬於admin
chown admin /home/admin/upload
1讓子資料夾upload被admin讀寫
chmod 755 /home/admin/upload
1重啟ssh,登入sftp
現在全部都配置完了,如果在上面第三步沒有重啟ssh的話,現在重啟後既可以登入使用了。
sudo service ssh restart
1centos7.x的系統如果執行上面這個命令提示不存在,執行:
Linux下 sftp服務配置
檢視openssh的版本,使用ssh v 命令來檢視openssh的版本,版本必須大於4.8p1,低於的這個版本需要公升級。groupadd sftp useradd g sftp s sbin nologin m yanqi passwd yanqi 注釋 給家目錄更改屬主並授權家目錄屬主必須是r...
linux配置sftp伺服器
新增使用者組 groupadd sftp 新增使用者並設定為sftp組 sudo useradd g sftp s sbin nologin m sftp 修改sftp使用者的密碼 sudo passwd sftp 建立sftp使用者的根目錄並設定擁有者和組,修改許可權 755 cd home su...
linux配置sftp伺服器
看了很多別人寫的部落格。自己實踐總結出一點經驗 作業系統linux centos 7 groupadd sftpsudo useradd g sftp s sbin nologin m sftpsftp 使用者 sudo passwd sftp會提示你輸入密碼 cd usr sudo mkdir s...