配置linux用戶實現禁止ssh登陸但可用sftp登錄

構想和目標

最近有個這樣的訴求:基於對線上服務器的保密和安全,不希望開發人員直接登錄線上服務器,因爲登錄服務器的權限太多難以管控,如直接修改代碼、系統配置,並且也直接連上mysql。因此希望能限制開發人員ssh登錄機器,但是通過ftp/sftp上傳代碼文件。
在網上找個各種各樣的方法,經過試驗做個彙總:

sftp指定端口:sftp -oPort=端口號 username@ip

方法一

https://segmentfault.com/q/1010000000722462

這篇帖子的方法是搜索到的最通用的方法,方法是否可能呢,直接做個測試。

1、創建禁止登陸的用戶:

useradd test -M -s /sbin/nologin

2、試試ssh登陸:登陸失敗

[root@localhost app]# ssh [email protected]
[email protected]'s password: 
Last login: Tue Oct 11 15:28:07 2016 from 172.18.135.185
This account is currently not available.
Connection to 172.19.194.30 closed.

3、試試sftp登陸:同樣也提示登陸失敗!!!

[root@localhost app]# sftp [email protected]
[email protected]'s password: 
Received message too long 1416128883
[root@localhost app]#

可以看到,方法一,雖然限制了ssh登陸,但是同時也限制了sftp的連接,結論是此方法行不通。

方法二

http://jin771998569.blog.51cto.com/2147853/1067247

1、首先修改sshd的配置文件:

#vim /etc/ssh/sshd_config
#該行(上面這行)註釋掉
#Subsystem sftp /usr/lib/openssh/sftp-server

# 添加以下幾行
Subsystem sftp internal-sftp 
Match group sftp
#Match user test
#匹配sftp組,如爲單個用戶可用:Match user 用戶名;  設置此用戶登陸時的shell設爲/bin/false,這樣它就不能用ssh只能用sftp
ChrootDirectory /home/test
#指定用戶被鎖定到的那個目錄,爲了能夠chroot成功,該目錄必須屬主是root,並且其他用戶或組不能寫
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

2、添加用戶組和用戶

添加用戶組

groupadd sftp

添加用戶

useradd -d /home/test -m -s /bin/false -g sftp test

修改密碼

echo "rootroot" |passwd --stdin test

3、重啓SSH服務

service sshd restart

或者

/etc/init.d/ssh reload

4、測試ssh

[root@localhost etc]# ssh [email protected]
[email protected]'s password: 
Write failed: Broken pipe

登陸失敗,提示Write failed: Broken pipe錯誤

5、再測試sftp

[root@localhost etc]# sftp [email protected]
[email protected]'s password: 
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer

同樣提示Write failed: Broken pipe

6、按理說此方法應該是靠譜的爲什麼會提示失敗呢,通過查找發現是目錄權限配置導致的:

https://my.oschina.net/davehe/blog/100280

目錄權限設置上要遵循2點:

  • ChrootDirectory設置的目錄權限及其所有的上級文件夾權限,屬主和屬組必須是root;
  • ChrootDirectory設置的目錄權限及其所有的上級文件夾權限,只有屬主能擁有寫權限,權限最大設置只能是755。

修改/home/test 目錄權限爲755

chmod 755 /home/test -R

7、再次測試

[root@localhost etc]# ssh [email protected]
[email protected]'s password: 
Could not chdir to home directory /home/test: No such file or directory
This service allows sftp connections only.
Connection to 172.19.194.30 closed.

和預期一致:ssh嘗試連接失敗。

[root@localhost etc]# sftp [email protected]
[email protected]'s password: 
Connected to 172.19.194.30.
sftp> ls
a                a.log            authorized_keys  mysql.sh         
sftp>

sftp測試連接成功!

總結

這個東西雖然沒有太大的技術含量,但是通過網上查找的大多是雷同且行不通的,又或者是不完整的,過程中耽誤和浪費了不少時間,希望寫這篇博客做個驗證和彙總的作用。

參考:

如何關閉linux用戶的SSH權限,但還能登錄vsftpd
https://segmentfault.com/q/1010000000722462

Linux openSSH 只能夠使用SFTP 不能使用ssh登陸
http://blog.51cto.com/jin771998569/1067247

sftp服務限制用戶登錄家目錄
https://my.oschina.net/davehe/blog/100280

Linux_ftp_命令行下下載文件get與上傳文件put的命令應用
http://allennewok.iteye.com/blog/710069

https://blog.csdn.net/qq_35440678/article/details/52788808

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