Come aggiungere un utente ssh che dispone solo delle autorizzazioni per accedere a una cartella specifica?


17

Come aggiungere un utente ssh che dispone solo delle autorizzazioni per accedere a una cartella specifica?

useradd -d /var/www/xyz.com.tr/musteri  -s /bin/bash -g sshd musteri

Ho creato un utente chiamato musteri. Ho impostato la cartella principale e il gruppo. Quindi, voglio integrare gli musteriutenti in "/var/www/xyz.com.tr/musteri". Non voglio che acceda a un'altra cartella.


Vuoi che l'utente abbia pieno accesso alla shell, o solo protocolli di copia dei file come sftp e rsync?
Gilles 'SO- smetti di essere malvagio' il

In quest'ultimo caso, potresti voler esaminare scponlyuna shell, possibilmente operando in chrootmodalità per limitare il suo accesso a quella directory e da nessun'altra parte.
Shadur,

1
@Gilles - Voglio accedere tramite sftp. Ma non voglio che acceda a un'altra cartella.
Cell-o

1
@ Cell-o: se hai solo bisogno di alcuni protocolli di trasferimento file e non di shell, usa chroot plus scponly o rssh (Google scponly chrooto rssh chrootdovresti portare a howtos).
Gilles 'SO- smetti di essere malvagio' il

Che ne dici di usare ACL?
fpmurphy,

Risposte:


19

Sembra che tu voglia che il tuo müşteriler abbia accesso al trasferimento di file in una cartella senza realmente dare loro delle shell. Questa è una buona cosa perché, come sottolineato da binfalse , dare alle persone shell con accesso limitato è difficile perché le shell devono accedere a tutti i tipi di cose sparse sul sistema solo per funzionare.

Per consentire a SFTP di accedere a una cartella specifica, puoi fare qualcosa del genere.

  1. Aggiungi un nuovo gruppo al sistema, dì "sftponly".
  2. Aggiungi eventuali utenti sul tuo sistema che dovrebbero avere diritti limitati a questo gruppo. Potresti anche dare loro shell ristrette come / bin / true, ma non è richiesto.
  3. Cambia il tuo file di configurazione ssh (di solito /etc/ssh/sshd_config) con queste righe
    Sottosistema sftp internal-sftp

    Match Group sftponly
        ChrootDirectory% h
        AllowTCPForwarding no
        X11 Inoltro n
        ForceCommand internal-sftp

Ciò attiverebbe il sottosistema sftp all'interno di SSH e costringerebbe i membri di quel gruppo di sistema a usare solo quel sistema durante l'accesso. Inoltre, li avrebbe chroot nelle loro directory home. Puoi cambiarlo in una sottocartella dei loro home director e qualcosa del genere in ChrootDirectory %h/musteri_sftpmodo che non possano vedere il resto dei loro file di sistema ma accedano direttamente a una speciale sottocartella della loro cartella home.

Kolay gelsin.


Öncelikle teşekkürler. ;) Come hai detto, ho impostato SFTP, ma ho un problema con iptables. Ecco la mia regola. -> A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
Cell-o

1
Birşey değil. Mentre FTP userebbe la porta 21, SFTP è un protocollo simile a ftp che funziona sul canale SSH, quindi utilizzerà la porta SSH che per impostazione predefinita è 22.
Caleb

Nota che dovresti anche localizzare e commentare qualsiasi comando del sottosistema precedentemente esistente (es. Sottosistema sftp / usr / lib / openssh / sftp-server)
CnrL

Risolto il mio problema E imparato alcune frasi turche a portata di mano! Bonus!
eimajenthat

2

Secondo me questo è molto difficile, se non impossibile. Quando l'utente si connette tramite SSH ha almeno bisogno di una shell, nel tuo caso il bash. Per eseguire /bin/bashha bisogno delle autorizzazioni per accedere /bin. bashstesso deve leggere alcune cose da /etc(ad esempio /etc/bash.bashrc), quindi l'utente deve anche accedervi /etc. Supponendo che l'utente non voglia solo rimanere in giro in questa directory, potrebbe voler leggere un file, ma per eseguire ad esempio vimha anche bisogno di accedere a /usr/bin.
Questa è solo una leggera dimostrazione, ci sono alcune dipendenze in più, ad esempio non so davvero cosa succederà se l'utente non ha accesso a /tmp...

Dovresti pensare alla tua intenzione. Vuoi che qualcuno abbia accesso in lettura / scrittura a una parte del tuo servizio web? Quindi potresti impostare qualcosa come FTP per esportare una directory specifica per questo utente. Quindi è in grado di leggere / scrivere questi file senza accesso a SSH.
Un'altra bella soluzione sarebbe un repository. Ad esempio, impostare un repository GIT e consentire all'utente di clonarlo. Può apportare le modifiche localmente e inviarti una patch. Puoi decidere se applicare questa patch o meno, anche un rollback per le patch buggy è molto semplice.


rbashè progettato per fare esattamente questo.
bahamat,

Questa cosa si chiama shell ristretta . Ma dato che Cell-o vuole solo consentire i trasferimenti di file, non è lo strumento giusto.
Gilles 'SO- smetti di essere malvagio' il
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.