首頁 > 軟體

Linux 下ssh sftp設定之金鑰方式登入詳解

2020-06-16 16:40:10

由於vsftp採用明文傳輸,使用者名稱密碼可通過抓包得到,為了安全性,需使用sftp,鎖定目錄且不允許sftp使用者登到伺服器。由於sftp使用的是ssh協定,需保證使用者只能使用sftp,不能ssh到機器進行操作,且使用金鑰登陸、不是22埠。

先看下原理圖:

1. 在遠端目標建立sftp服務使用者組,建立sftp服務根目錄

groupadd sftp

#此目錄及上級目錄的所有者必須為root,許可權不高於755,此目錄的組最好設定為sftp

mkdir /data/sftp

chown -R root:sftp /data/sftp

chmod -R 0755 /data/sftp

2. 修改sshd組態檔

cp /etc/ssh/sshd_config,_bk} #備份組態檔

sed -i 's@#Port 22@Port 22@' /etc/ssh/sshd_config #保證原來22埠可以

vi /etc/ssh/sshd_config

注釋掉/etc/ssh/sshd_config檔案中的此行程式碼:

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

新增如下程式碼:

Port 22222 #此處改為非22埠
Subsystem sftp internal-sftp -l INFO -f AUTH
Match Group sftp
ChrootDirectory /data/sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp -l INFO -f AUTH

凡是在使用者組sftp裡的使用者,都可以使用sftp服務;使用sftp服務連線上之後,可存取目錄為/data/sftp/username

舉個例子:

test是一個sftp組的使用者,它通過sftp連線伺服器上之後,只能看到/data/sftp/test目錄下的內容

test2也是一個sftp組的使用者,它通過sftp連線伺服器之後,只能看到/data/sftp/test2目錄下的內容

3. 建立sftp使用者

#此例將建立一個名稱為test的sftp帳號

#建立test sftp家目錄:test目錄的所有者必須是root,組最好設定為sftp,許可權不高於755

mkdir /data/sftp/test

chmod 0755 /data/sftp/test

chown root:sftp /data/sftp/test

useradd -g sftp -s /sbin/nologin test #新增使用者,引數-s /sbin/nologin禁止使用者通過命令列登入

在本地建立test使用者金鑰對(用來連線遠端伺服器的):

# mkdir /home/test/.ssh
# ssh-keygen -t rsa
# ssh-copy-id test@IP ##要遠端的目標伺服器IP和賬戶
# chown -R test.sftp /home/test

另外我們要注意,.ssh目錄的許可權為700,其下檔案authorized_keys和私鑰的許可權為600。否則會因為許可權問題導致無法免密碼登入。我們可以看到登陸後會有known_hosts檔案生成。

在目標遠端伺服器test目錄下建立一個可以寫的upload目錄

mkdir /data/sftp/test/upload

chown -R test:sftp /data/sftp/test/upload

註:sftp服務的根目錄的所有者必須是root,許可權不能超過755(上級目錄也必須遵循此規則),sftp的使用者目錄所有者也必須是root,且最高許可權不能超過755。

4. 測試sftp

systemctl restart sshd.service

test使用者金鑰登陸:

sftp test@IP ##在本地sftp登陸遠端伺服器

另外,將公鑰拷貝到伺服器的~/.ssh/authorized_keys檔案中方法有如下幾種:

1、將公鑰通過scp拷貝到伺服器上,然後追加到~/.ssh/authorized_keys檔案中,這種方式比較麻煩。scp -P 22 ~/.ssh/id_rsa.pub user@host:~/。

2、通過ssh-copy-id程式,就是我演示的方法,ssh-copyid user@host即可

3、可以通過cat ~/.ssh/id_rsa.pub | ssh -p 22 user@host ‘cat >> ~/.ssh/authorized_keys’,這個也是比較常用的方法,因為可以更改埠號。


IT145.com E-mail:sddin#qq.com