Ssh

如何在 Archlinux 伺服器上創建 chroot 的 SFTP 訪問?

  • April 14, 2016

我已經按照ArchWikiGeekStuff上的說明設置了一個使用者,該使用者只能通過 SFTP (SSH) 訪問伺服器,但/bin/false在其主目錄的 chroot 環境中沒有 Shell ()。

沒有什麼特別的,但它根本不起作用,access denied當我嘗試登錄時,我不斷收到消息。這是我迄今為止嘗試過的:

SFTP 使用者和組

使用者,在這裡:user,是組的成員sftp。主目錄是/srv/sftp/user. 外殼通過禁用/bin/false

使用者輸入:

0 ✓ root@host ~ $ grep -i user /etc/passwd
user:x:1002:1000::/srv/sftp/user:/bin/false

團體入場:

0 ✓ root@host ~ $ grep -i sftp /etc/group
sftp:x:1000:user

使用者組:

0 ✓ root@host ~ $ groups user
users sftp

主目錄配置

主目錄和上面的所有目錄都歸root

0 ✓ root@host ~ $ ls -lsha /srv
total 20K
4,0K drwxr-xr-x  6 root root 4,0K  4. Apr 17:00 ./
4,0K drwxr-xr-x 17 root root 4,0K  4. Apr 15:08 ../
4,0K dr-xr-xr-x  2 root ftp  4,0K 30. Sep 2015  ftp/
4,0K drwxr-xr-x  4 root root 4,0K  4. Apr 19:30 http/
4,0K drwxr-xr-x  5 root root 4,0K  4. Apr 17:00 sftp/
0 ✓ root@host ~ $ ls -lsha /srv/sftp
total 12K
4,0K drwxr-xr-x 5 root root 4,0K  4. Apr 17:00 ./
4,0K drwxr-xr-x 6 root root 4,0K  4. Apr 17:00 ../
4,0K drwxr-xr-x 5 root root 4,0K  4. Apr 19:34 user/
0 ✓ root@host ~ $ ls -lsha /srv/sftp/user
total 16K
4,0K drwxr-xr-x 5 root root 4,0K  4. Apr 19:34 ./
4,0K drwxr-xr-x 5 root root 4,0K  4. Apr 17:00 ../
4,0K drwxrwxr-x 6 user sftp 4,0K  4. Apr 20:28 files/
4,0K drwxrwxr-x 2 user sftp 4,0K  4. Apr 19:33 log/

固態混合硬碟配置

SSHD 配置結束:

0 ✓ root@host ~ $ tail -n16 /etc/ssh/sshd_config 
# override default of no subsystems
### Subsystem   sftp    /usr/lib/ssh/sftp-server
Subsystem       sftp    internal-sftp

### This section must be placed at the very end of sshd_config
#   This means that all users in the ‘sftp’ group will be chroot’d
#   to their home directory, where they only will be able to run
#   internal SFTP processes.
Match Group sftp
   ChrootDirectory %h
   ForceCommand internal-sftp
   AllowTcpForwarding no
   PermitTunnel no
   X11Forwarding no
   PasswordAuthentication yes

固態硬碟狀態:

0 ✓ root@host ~ $ systemctl status sshd
● sshd.service - OpenSSH Daemon
  Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: disabled)
  Active: active (running) since Mo 2016-04-04 23:48:58 CEST; 1 day 15h ago
Main PID: 9272 (sshd)
   Tasks: 3 (limit: 512)
  CGroup: /system.slice/sshd.service
          ├─ 9272 /usr/bin/sshd -D
          ├─17597 sshd: user [priv]  
          └─17598 sshd: user [net]   
[...]
Apr 06 15:05:24 host sshd[17597]: Failed password for user from 93.***.***.136 port 45516 ssh2

OpenSSH 版本:

0 ✓ root@host ~ $ pacman -Q openssh
openssh 7.2p2-1

更多系統資訊

核心版本:

0 ✓ root@host ~ $ uname -a
Linux host 4.4.5-1-ARCH #1 SMP PREEMPT Thu Mar 10 07:38:19 CET 2016 x86_64 GNU/Linux

嘗試連接

為了確保密碼真的正確,我將其更改為1234

0 ✓ root@host ~ $ passwd user
Enter new UNIX password: 1234
Retype new UNIX password: 1234
passwd: password updated successfully

現在測試sftp

1 ✗ me@client ~ $ sftp -P12345 user@host
user@host's password: 1234
Permission denied, please try again.
user@host's password: 1234
Permission denied, please try again.
user@host's password: 1234
Permission denied (publickey,password).
Couldn't read packet: Connection reset by peer

這是在日誌中,根本沒有幫助:

0 ✓ root@host ~ $ journalctl -n5
Apr 06 15:34:38 host passwd[25269]: pam_unix(passwd:chauthtok): password changed for user
Apr 06 15:35:26 host sshd[25853]: Failed password for user from 93.***.***.136 port 45834 ssh2
Apr 06 15:35:30 host sshd[25853]: Failed password for user from 93.***.***.136 port 45834 ssh2
Apr 06 15:35:33 host sshd[25853]: Failed password for user from 93.***.***.136 port 45834 ssh2
Apr 06 15:35:34 host sshd[25853]: Connection closed by 93.***.***.136 port 45834 [preauth]

我究竟做錯了什麼?我錯過了什麼?如何在沒有 shell 訪問的情況下在 Archlinux 伺服器上創建 chroot 的 SFTP 訪問?

好的,我錯過的一點與外殼有關。我嘗試/bin/false按照許多手冊中的說明登錄。但這沒有用。

正如@Jakuje 指出的那樣,將其更改為/bin/sh用於測試目的允許我通過sftp. 歡呼!還有一個我也不知道的有趣事實:internal-sftp已經阻止ssh登錄。


但是,誰還想要的/bin/false/bin/nologin作為外殼,這是我想通的,最後。檢查外殼是否可用/etc/shells

0 ✓ root@host ~ $ cat /etc/shells 
#
# /etc/shells
#

/bin/sh
/bin/bash

# End of file

難怪它沒有工作!false並且nologin沒有定義!為我手動添加它們:

0 ✓ root@host ~ $ cat /etc/shells 
#
# /etc/shells
#

/bin/sh
/bin/bash
/bin/false
/bin/nologin

# End of file

現在,只需更改外殼,使用chsh

0 ✓ root@host ~ $ chsh -s /bin/false user
Changing shell for user.
Shell changed.

現在,sftp可以在基於更改的環境中工作,並且無需 shell 訪問。

引用自:https://serverfault.com/questions/768551