教你如何配置linux用戶實現禁止ssh登錄機器但可用sftp登陸!

構想和目標
最近有個這樣的訴求:基於對線上服務器的保密和安全,不但願開發人員直接登陸線上服務器,由於登陸服務器的權限太多難以管控,如直接修改代碼、系統配置,而且也直接連上mysql。所以但願能限制開發人員ssh登陸機器,可是經過ftp/sftp上傳代碼文件。
在網上找個各類各樣的方法,通過試驗作個彙總:mysql

方法一
https://segmentfault.com/q/1010000000722462linux

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

建立禁止登錄的用戶:shell

useradd test -M -s /sbin/nologin
試試ssh登錄:登錄失敗vim

[root@localhost app]# ssh test@172.19.194.30
test@172.19.194.30'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.
試試sftp登錄:一樣也提示登錄失敗!!!segmentfault

[root@localhost app]# sftp test@172.19.194.30
test@172.19.194.30's password:
Received message too long 1416128883
[root@localhost app]#
能夠看到,方法一,雖然限制了ssh登錄,可是同時也限制了sftp的鏈接,結論是此方法行不通。安全

方法二
http://jin771998569.blog.51cto.com/2147853/1067247服務器

首先修改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
添加用戶組和用戶
#添加用戶組
groupadd sftpapp

#添加用戶
useradd -d /home/test -m -s /bin/false -g sftp testssh

#修改密碼
passwd test

重啓SSH服務
service sshd restart

或者

/etc/init.d/ssh reload

測試ssh
[root@localhost etc]# ssh test@172.19.194.30
test@172.19.194.30's password:
Write failed: Broken pipe
登錄失敗,提示Write failed: Broken pipe錯誤

再測試sftp
[root@localhost etc]# sftp test@172.19.194.30
test@172.19.194.30's password:
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer
一樣提示Write failed: Broken pipe

按理說此方法應該是靠譜的爲何會提示失敗呢,經過查找發現是目錄權限配置致使的:
https://my.oschina.net/davehe/blog/100280

目錄權限設置上要遵循2點:
ChrootDirectory設置的目錄權限及其全部的上級文件夾權限,屬主和屬組必須是root;
ChrootDirectory設置的目錄權限及其全部的上級文件夾權限,只有屬主能擁有寫權限,權限最大設置只能是755。

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

chmod 755 /home/test -R

再次測試
[root@localhost etc]# ssh test@172.19.194.30
test@172.19.194.30'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 test@172.19.194.30
test@172.19.194.30's password:
Connected to 172.19.194.30.
sftp> ls
a a.log authorized_keys mysql.sh
sftp>
sftp測試鏈接成功!

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

參考:如何關閉linux用戶的SSH權限,但還能登陸vsftpdLinux openSSH 只可以使用SFTP 不能使用ssh登錄sftp服務限制用戶登陸家目錄Linux_ftp_命令行下下載文件get與上傳文件put的命令應用

相關文章
相關標籤/搜索