經過密鑰 SFTP (二):SFTP 帳戶限定根目錄

目標

1. 受權網站開發人員使用 sftp 上傳項目文件
2. 必須使用密鑰方式,去掉密碼驗證方式
3. 簡單起見,所有放在 /var/www 目錄下
4. 熟練以後,能夠在繼續修改 sshd 配置文件指定到具體的子目錄下
5. 咱們的人員很少,採用對每個帳號分別設置的方法
6. 是否使用組策略方式更方便,目前不熟練!之後再處理

大概思路和步驟

1. 建立 sftp 帳戶 (假設名字:sftp123)
2. 複製管理員的 .ssh 目錄到這個 sftp 帳戶的 home 下(/home/sftp123)
3. 修改 /home/sftp123/.ssh 目錄的全部者爲 sftp123
4. 修改 authorized_keys 文件,只保留管理員和 sftp123 的 publickey
5. 修改 sshd 配置,限制 sftp123 的目錄和命令權限

** 如下必須有root權限的管理員帳號來操做,假設 dhbm

一、建立 sftp 帳戶

sudo adduser sftp123

禁止 sftp 帳戶 shell 登陸
sudo usermod -s /usr/sbin/nologin sftp123

二、建立 sftp 帳戶的密鑰文件夾和文件

直接從管理員 cp
sudo cp -R /home/dhbm/.ssh /home/sftp123

改變 .ssh 目錄的擁有者
sudo chown -R sftp123:sftp123 /home/sftp123/.ssh

改變 .ssh 目錄屬性
sudo chmod -R 755 /home/sftp123/.ssh

只保留管理員和 sftp123 的 publickey
cd /home/sftp123/.ssh
ls
	authorized_keys  id_rsa  id_rsa.pub
sudo vim authorized_keys

sudo systemctl restart sshd
** 若是隻操做到這裏,sftp123 是能夠ssh 登陸到服務器的

三、設置 sshd_config ,限制 sftp123 目錄和命令權限

sudo vim /etc/ssh/sshd_config
文件最後已經有一個 Example of overriding settings,在最後追加

	# add by wzh 20190122 only SFTP users
	# only in /var/www
	# 告訴SSH服務器僅將如下命令應用於指定的用戶
	Match User sftp123
	# 強制SSH服務器在登陸時運行SFTP服務器,禁止shell訪問
	ForceCommand internal-sftp
	# 容許此用戶進行密碼驗證
	PasswordAuthentication no
	# 只容許訪問這個目錄
	ChrootDirectory /var/www
	# 不容許端口轉發
	PermitTunnel no
	AllowAgentForwarding no
	AllowTcpForwarding no
	X11Forwarding no

保存退出後 sudo systemctl restart sshd

四、驗證 sftp123

1. ssh sftp123@192.168.1.192
返回結果:
	sftp123@192.168.1.192's password: 
	This service allows sftp connections only.
	Connection to 192.168.1.192 closed.
	
2. sftp sftp123@192.168.1.192
返回結果
Connected to sftp123@192.168.1.192.
sftp> 

3. FileZilla 創建一個站點,以下圖

鏈接成功 html

五、重複以上步驟,再來一個 sftp456

發現問題:
測試發現,sftp123,sftp456 在本地是能夠登陸的,說明沒有徹底限制到 Shell
繼續學習,找找怎麼回事?

六、去掉用戶的 shell 權限

如下兩種方式均可以去掉用戶的 shell 權限
sudo usermod -s /bin/false sftp456
sudo usermod -s /usr/sbin/nologin sftp123
登陸時,返回一個錯誤狀態,而後當即退出

** 在 useradd 的時候直接加上 shell 限制,就不會有這個問題了!
sudo adduser sftp789 --shell /bin/false

繼續複習一次 sftp789

七、 錯誤處理

sftp sftp123@192.168.1.161
返回錯誤:
packet_write_wait: Connection to 192.168.1.161 port 22: Broken pipe
Connection closed

以上操做先在 ubuntu 18.04 下操做的,沒有發現問題
可是回到 ubuntu 16.04 Server ,出現以上錯誤!

1. 按照網上的建議,/var/www 目錄擁有者都是 root ,可是 SFTP 上傳一個文件以後,文件固然屬於 sftp456 了!
	sudo chown -R root:root /var/www
	sudo chmod 755 /var/www
	*** 刪除了剛剛上傳的文件!仍是同樣的問題啊!

2. 按照以上操做設置,一條一條的加上去,最後 PasswordAuthentication 這一條加上就出錯!
	再刪除這一條,也不行!
	
	# add by wzh 20190122 only SFTP users
	# only in /var/www
	Match User sftp123
	ForceCommand internal-sftp
	ChrootDirectory /var/www
	PermitTunnel no
	AllowAgentForwarding no
	AllowTcpForwarding no
	PasswordAuthentication no

3. 只能刪除掉 Match User 這一段以後,從新來過!
	再加上的時候,不要 PasswordAuthentication no z h這一行!
	從新來過!發現問題還在 /var/www 這個目錄的擁有者問題
	sudo rm -rf /var/www
	sudo mkdir /var/www
	以後,sftp 馬上就正常了!
	那麼上傳文件以後,怎麼辦?
	
四、使用 adduser 加上的帳號,會自動創建 /home/XXXX ,可是該目錄屬於XXX:XXX
	將它改爲 root:root
	
五、通過屢次嘗試,最終問題仍是在 ChrootDirectory 目錄的權限上

八、從新列舉整個操做過程(從新作一個 sftp193)

sudo adduser sftp193
sudo cp -R /home/dhbm/.ssh /home/sftp193
sudo chown -R sftp193:sftp193 /home/sftp193/.ssh
sudo chown -R root:root /home/sftp193
sudo chown -R sftp193:sftp193 /home/sftp193/.ssh
sudo chmod -R 755 /home/sftp193/.ssh

sudo chmod -R 755 /var/www/

測試SSH:
ssh -p 3193 sftp193@192.168.1.193
返回錯誤
	This service allows sftp connections only.
	Connection to 192.168.1.193 closed.

測試SFTP:
sftp -P 22 sftp193@192.168.1.193

在 /var/www/ 創建幾個測試目錄
sudo chmod -R 777 /var/www/test
sudo chmod -R 777 /var/www/test.XXXX.cn
sudo chmod -R 777 /var/www/html

** 原本還作了按照組和成員分別控制的操做,直接貼出來我參考的博文
** 我是徹底照着該篇文章走了一遍以後,才獲得最終的解決辦法的!謝謝這位朋友!
** 不過,文章中不少命令都沒有空格分開!

https://blog.csdn.net/gong_xucheng/article/details/39319941shell

相關文章
相關標籤/搜索