È possibile concedere agli utenti l'accesso sftp senza accesso alla shell? Se sì, come viene implementato?


29

Ho una serie di utenti che hanno solo bisogno di caricare i file sui loro home set. Penso che sftp sarebbe sufficiente, ma non voglio che accedano tramite shell. Quindi è possibile? La mia piattaforma è centos 7, le homedir dell'utente sono memorizzate diciamo / personal / $ user

Ho creato l'utente con queste impostazioni

useradd -m -d /personal/user1 -s /sbin/nologin

assegnato all'utente un passwd, quindi quando uso sftp per accedere alla macchina, dice che non riesco a connettermi.


scponly github.com/scponly/scponly/wiki chroot opzionale
user2497

Risposte:


11

Modifica il tuo /etc/ssh/sshd_configper contenere:

Match User [SFTP user]
ForceCommand internal-sftp

Riavvia sshd. Se hai più utenti, inseriscili tutti sulla riga utente della partita separati da virgole in questo modo:

Match User User1,User2,User3

La chiave per la configurazione sftpper non consentire l'accesso alla shell è limitare gli utenti tramite l' ForceCommand opzione.


Ok, ho seguito tutti i passaggi ma non ho effettuato l'accesso
Sollosa,

2
@Sollosa Prova Match User [SFTP user] ForceCommand internal-sftpsolo con , senza chrooting roba.
Martin Prikryl,

@MartinPrikryl ha funzionato Martin, grazie, ho appena rimosso il parametro chrootdirectory & viola
Sollosa,

1
Inoltre, puoi fare in chrootmodo che gli utenti non possano spostarsi su e fuori dalla tua "prigione" definita
ivanivan,

37

Mi piace la seguente configurazione per la gestione dell'accesso SSH, che uso al lavoro per gestire un gruppo di utenti su una piccola flotta di server. Sicurezza e facilità di gestione sono in cima alla lista delle mie priorità.

Le sue caratteristiche principali sono la facile gestione dei diritti SSH attraverso l'appartenenza al gruppo Unix, con autorizzazioni ben definite e la sicurezza di default.

Impostare

Installa software (opzionale ma utile):

yum install members   # or apt install members

Aggiungi gruppi:

addgroup --system allowssh
addgroup --system sftponly

In /etc/ssh/sshd_config, assicurarsi che le seguenti impostazioni siano No:

PermitRootLogin no
PubkeyAuthentication no
PasswordAuthentication no

E alla fine /etc/ssh/sshd_config, aggiungi queste due stanze:

Match Group allowssh
    PubkeyAuthentication yes

Match Group sftponly
    ChrootDirectory %h
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

(non dimenticare di riavviare SSH dopo aver modificato il file)

Spiegazione

Quindi, cosa fa tutto questo?

  • Disattiva sempre gli accessi root, come misura di sicurezza aggiuntiva.
  • Disabilita sempre gli accessi basati su password (le password deboli sono un grosso rischio per i server che eseguono sshd).
  • Consente l'accesso (pubkey) solo agli utenti del allowsshgruppo.
  • Gli utenti del sftponlygruppo non possono ottenere una shell su SSH, ma solo SFTP.

La gestione di chi ha accesso viene quindi semplicemente gestita l'appartenenza al gruppo (queste modifiche hanno effetto immediato, non è necessario il riavvio di SSH):

# adduser marcelm allowssh
# members allowssh
marcelm
# deluser marcelm allowssh
# members allowssh
#

Nota che i tuoi utenti sftp devono essere membri di entrambi sftponly(per assicurarsi che non ottengano una shell) e di allowssh(per consentire l'accesso in primo luogo).

Ulteriori informazioni

  1. Questa configurazione non consente l'accesso con password ; tutti gli account devono utilizzare l'autenticazione con chiave pubblica. Questa è probabilmente la più grande vincita alla sicurezza che puoi ottenere con SSH, quindi sostengo che valga la pena anche se devi iniziare ora.

    Se davvero non lo vuoi, aggiungi anche PasswordAuthentication yesalla Match Group allowsshstanza. Ciò consentirà sia l'autenticazione pubkey che password per gli allowsshutenti.

  2. Questa configurazione limita qualsiasi sftponlyutente alla propria home directory. Se non lo si desidera, rimuovere la ChrootDirectory %hdirettiva.

    Se non si desidera che il chrooting al lavoro, è importante che la directory home dell'utente (e qualsiasi directory sopra di esso) è di proprietà root:roote non scrivibile da gruppo / altro. Va bene che le sottodirectory della home directory siano di proprietà dell'utente e / o scrivibili.

    Sì, la home directory dell'utente deve essere di proprietà root e non scrivibile per l'utente. Purtroppo, ci sono buone ragioni per questa limitazione. A seconda della situazione, ChrootDirectory /homepotrebbe essere una buona alternativa.

  3. L'impostazione della shell degli sftponlyutenti su /sbin/nologinnon è né necessaria né dannosa per questa soluzione, poiché SSH ForceCommand internal-sftpsostituisce la shell dell'utente.

    L'uso /sbin/nologinpuò essere utile per impedire loro di accedere in altri modi (console fisica, samba, ecc.).

  4. Questa configurazione non consente rootaccessi diretti su SSH; questo costituisce un ulteriore livello di sicurezza. Se davvero non ha bisogno login di root diretto, modificare la PermitRootLogindirettiva. Valuta di impostarlo su forced-commands-only, prohibit-passworde (come ultima risorsa) yes.

  5. Per i punti bonus, dai un'occhiata a come limitare chi può sufare il root; aggiungere un gruppo di sistema chiamato wheele aggiungere / abilitare auth required pam_wheel.soin /etc/pam.d/su.


2
Questa dovrebbe essere la risposta accettata. Fornisce la soluzione oltre a scomporre il ragionamento alla base di ogni passaggio.
kemotep,

1
Questa è davvero un'ottima risposta con ottimi consigli di sicurezza aggiuntivi, ma mi preoccupo per quegli utenti i cui sistemi si basano su accessi con password, accessi root, ecc. Naturalmente farlo non è buono ma forse sposta le modifiche relative al miglioramento generale della sicurezza nei loro propria sezione in modo che sia disponibile una risposta alla domanda con modifiche minime?
Josh Rumbut,

1
@JoshRumbut Non volevo riscrivere la risposta per le tue (molto corrette) osservazioni, in parte perché in realtà mostra solo My Way ™, e in parte nella speranza che possa essere una sorta di configurazione SSH canonica sicura per impostazione predefinita esempio che molte più persone trovano utili. Come compromesso, ho cercato di chiarire che gli accessi root e l'autenticazione della password non funzioneranno e ho incluso le istruzioni su come riattivarli :)
marcelm

1
Buona risposta, anche se le maggiori carenze delle altre risposte non stavano prendendo in considerazione gli aspetti di sicurezza, principalmente chroot. +1
Rui F Ribeiro,

1
Chroot non funzionerà per un% h generico. Sorprendentemente, si sono tenuti a chown root:rootechmod og-w
kubanczyk

1

basta cambiare la shell predefinita in / sbin / nologin. Supponendo che la maggior parte delle varietà di Linux:

# usermod -s /sbin/nologin username

L'ho provato, ma l'utente non è in grado di accedere tramite sftp, non so perché. Sto usando centos btw.
Sollosa,

@Sollosa Probabilmente o un problema di autorizzazione nel tuo sftp chroot o sshd_config ha un problema. Dovresti aggiornare la tua domanda per includere le autorizzazioni della tua directory chroot e il tuo sshd_config con eventuali informazioni sensibili ridotte.
Kefka,

Credo (anche se non posso provarlo ora) che questo consente SFTP solo se esiste anche Subsystem sftp internal-sftp(o forse ForceCommand internal-sftp). Se è comune Subsystem sftp /path/to/sftp-server, nologinimpedirà anche SFTP.
Martin Prikryl,

@MartinPrikryl Ho frainteso la loro domanda inedita originale chiedendomi come disabilitare l'accesso alla shell per gli utenti su un server sftp altrimenti funzionale. Ero stato sveglio per circa dieci minuti, quindi non ero così lucido come avrei potuto sentire. Anche se non sapevo che sftp-server richiede che un utente abbia una shell valida per funzionare, sembra potenzialmente pericoloso. Uso sempre-sftp solo per abitudine perché è così che l'ho sempre fatto.
Kefka

Vedi la mia risposta a OpenSSH: Differenza tra internal-sftp e sftp-server (in particolare la sezione alla fine)
Martin Prikryl

0

puoi usare tftp. qualsiasi cosa oltre a ssh richiederà un po 'di autenticazione (key | pass).

mentre tftp può essere protetto, può valere la pena rivisitare la decisione di fornire accesso a qualsiasi cosa senza autenticazione.

http://manpages.ubuntu.com/manpages/bionic/man1/tftp.1.html


2
Penso che OP abbia voluto che gli utenti (che presumibilmente hanno nomi utente e password) non fossero in grado di utilizzare un normale client SSH per connettersi al server ed eseguire comandi arbitrari, ma quegli stessi utenti sarebbero in grado di caricare file tramite SFTP.
John_ReinstateMonica,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.