Vraag Sta SCP toe maar niet echt aanmelden met SSH


Is er een manier om een ​​gebruiker in een Linux-box te configureren (in dit geval Centos 5.2), zodat ze scp kunnen gebruiken om bestanden op te halen, maar niet echt met SSH kunnen inloggen op de server?


58
2017-11-12 02:44


oorsprong


Ik heb geprobeerd de inlogshell in / bin / false in te stellen, maar dat zorgt ervoor dat scp helemaal niet werkt. - DrStalker


antwoorden:


shell rssh (http://pizzashack.org/rssh/) is precies voor dit doel ontworpen.

Omdat RHEL / CentOS 5.2 geen pakket voor rssh bevat, kunt u hier kijken om een ​​RPM te verkrijgen: http://dag.wieers.com/rpm/packages/rssh/

Om het te gebruiken stel je het gewoon in als een shell voor een nieuwe gebruiker zoals deze:

useradd -m -d /home/scpuser1 -s /usr/bin/rssh scpuser1
passwd scpuser1

..of verander de shell voor een bestaande zoals deze:

chsh -s /usr/bin/rssh scpuser1

..en bewerken /etc/rssh.conf om rssh shell te configureren - met name uncomment allowscp regel om SCP-toegang voor alle rssh-gebruikers in te schakelen.

(Misschien wilt u ook chroot gebruiken om de gebruikers in hun huizen te houden, maar dat is een ander verhaal.)


41
2017-11-12 03:14



dat is geweldig - ik ben ook al een tijdje op zoek naar zoiets - warren
het idee achter rssh is leuk, maar iirc rssh was niet bepaald een wonder van beveiliging in programmeertermen. Een simpele Google op 'rssh exploit' levert meer resultaten op dan waar ik me comfortabel bij voel ... - wzzrd
scponly is min of meer hetzelfde en blijkbaar minder exploits-gevoelig: sublimation.org/scponly/wiki/index.php/Main_Page - François Feugeas
lijkt schijnbaar verplaatst te zijn naar github. De sublimatielink is dood. github.com/scponly/scponly/wiki - spazm


Ik ben hier veel te laat, maar je kunt ssh-sleutels gebruiken en de exacte opdracht opgeven die is toegestaan ​​in hun bestand ~ / .ssh / authorized_keys, bijvoorbeeld

no-port-forwarding, no-pty, command = "scp source target" ssh-dss ...

Mogelijk moet u ps gebruiken om op het doelwit de juiste opdrachtinstellingen in te stellen.

PS: Als je een test scp-opdracht uitvoert met "-v", zie je zoiets als dit

debug1: Sending command: scp -v -t myfile.txt

Merk op dat "-t" een scp-optie zonder papieren is, gebruikt door het programma aan het andere uiteinde. Dit geeft u het idee van wat u moet doen in authorized_keys.

BEWERK: U kunt meer informatie (met verschillende links) vinden in deze StackOverflow-vraag.

Hier is een werkend voorbeeld van, voor een gebruiker met de naam backup_user aan de serverkant.

~backup_user/.ssh/authorized_keys inhoud op de server (met wat meer beveiligingsbeperkingen):

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="scp -v -r -d -t ~/CONTENT" ssh-rsa AAAAMYRSAKEY...

Maak een link in ~ backup_user / die linkt naar de map waar de inhoud toegankelijk moet zijn.

$ ln -s /path/to/directory/with/accessible/content ~backup_user/CONTENT

Vanaf de clientzijde zou de volgende opdracht moeten werken:

scp -v  -r  -P 2222 -i .ssh/id_rsa_key_file path/to/data backup_user@SERVER:~/CONTENT

Wat deze opdracht doet:

  • Het toont uitgebreide informatie (Facultatieve: u kunt de verwijderen -v uit zowel commando- als authorized_keys-bestand)
  • Het kopieert recursief de inhoud van het pad / naar / data. (Facultatieve: je kunt verwijderen -r uit zowel command als authorized_keys bestand als u geen recursieve kopie wilt maken)
  • Het gebruikt poort 2222 om verbinding te maken met de server (Facultatieve: je kunt verwijderen -P 2222 van de opdracht)
  • Het gebruikt en identiteitsbestand om de verbinding te automatiseren (Facultatieve: je kunt verwijderen -i .ssh/id_rsa_key_file
  • De inhoud van path/to/data wordt gekopieerd naar /path/to/directory/with/accessible/content/

Als u een kopie van een bestand (of meerdere) van de server naar de client wilt maken, moet u een shellscript maken dat hiermee omgaat zoals hier beschreven


35
2017-11-27 17:52



Wat moet de gebruiker stoppen met scoppen over zijn authorized_keys-bestand? Kan het worden beperkt om niet door de gebruiker zelf te worden bezeten? - Dan
@Dan - Het moet mogelijk zijn om alleen-lezen machtigingen in te stellen voor het bestand authorized_keys, dwz. chmod 400 ~/.ssh/authorized_keys. - Roger Dueck
Je zou ook moeten maken ~/.bashrc (en wat ook anders Bash uitvoert) en ~/.ssh/rc alleen lezen. Maar als de kwaadwillende gebruiker toegang heeft tot rsync of sftp, kan hij nog steeds verwijderen ~/.bashrcen upload een nieuwe. Omdat het moeilijk te beschermen is, raad ik aan om deze methode te gebruiken (command="..."). - pts


Ik ben een beetje laat op het feest, maar ik zal voorstellen dat je de ForceCommand richtlijn van OpenSSH.

Subsystem sftp internal-sftp

Match group sftponly
         ForceCommand internal-sftp

Toegegeven, dit is SFTP en geen SCP, maar het bereikt hetzelfde doel, veiliger dan met een beperkte shell. Bovendien kunt u de gebruiker chrooten als u dat wilt.


29
2017-11-12 10:56



voeg het toe chrootDirectory %h en AllowTcpForwarding no  na de wedstrijdsectie om de enkelfanige gebruikers te dwingen naar hun huis te chrooten. houd er rekening mee dat de overeenkomst (moet!) het laatste gedeelte van de SSC-configuratie en -opties zijn, daarna alleen opties voor de overeenkomende gebruikers - higuita
ForceCommand internal-sftp -u 0077 -d /uploaddir kan het verder verharden door een umask in een uploaddirectory te forceren. In combinatie met 'ChrootDirectory` creëert dit een zeer gecontroleerde, geïsoleerde uploadomgeving. Bonusnotitie: de standaard-dir en de umask moet in de ForceCommand, niet in de Subsystem richtlijn, als u wilt dat ze werken. - Marcin
Een langer artikel waarin dit wordt uitgelegd, is verkrijgbaar bij debian-administration.org/article/590/... - koppor


Ik zou aanraden om scponly te gebruiken.

Het is een beperkte shell die gebruikers toestaat om precies te doen wat het klinkt, SCP-bestanden naar de server, maar niet daadwerkelijk in te loggen. Informatie en broncode-downloads voor de software zijn beschikbaar hier en de voorgecompileerde RPM-pakketten zijn beschikbaar via de EPEL YUM repositories.

Na de installatie moet u elk gebruikersaccount configureren, waartoe u de toegang wilt beperken, om de pas geïnstalleerde beperkte shell te gebruiken. U kunt dit handmatig doen via / etc / passwd of gebruik de volgende opdracht: usermod -s /usr/bin/scponly USERNAME


5
2018-01-25 20:30



Ik tweede dit. scponly is ONTWORPEN voor precies dit doel. - UtahJarhead
scponly lijkt dood te zijn. debian lijkt het te hebben verwijderd: packages.debian.org/search?keywords=scponly en de code op githubis ook dood. Vervolggesprek: serverfault.com/questions/726519/... - koppor


Ik gebruik MySecureShell om dit te doen. Je kunt ook andere beperkingen configureren.

https://github.com/mysecureshell/mysecureshell

Beperkt alleen verbindingen met SFTP / SCP. Geen shell-toegang.


5
2017-11-12 07:21





Zeer laat op het feest, maar stel gewoon de shell van de git-gebruiker in op / usr / bin / git-shell. Het is een beperkte shell die interactieve login niet toestaat. Je kunt nog steeds su in voor de gebruiker met 'su -s / bin / bash git' of hoe je git-gebruikersnaam ook is.


2
2017-10-01 19:54





We gebruiken een psudo-shell genaamd scponly op onze beveiligde ftp-servers voor gebruikers willen we alleen scp-bestanden kunnen scenen, maar niet inloggen.


1
2017-11-27 18:05