Řešení 1:
rssh shell (http://pizzashack.org/rssh/) je navržen přesně pro tento účel.
Protože RHEL/CentOS 5.2 neobsahuje balíček pro rssh, můžete se podívat sem a získat RPM:http://dag.wieers.com/rpm/packages/rssh/
Chcete-li jej použít, nastavte jej jako shell pro nového uživatele takto:
useradd -m -d /home/scpuser1 -s /usr/bin/rssh scpuser1
passwd scpuser1
..nebo změňte shell za existující takto:
chsh -s /usr/bin/rssh scpuser1
..a upravte /etc/rssh.conf
pro konfiguraci rssh shell - zejména odkomentování allowscp
řádek pro povolení přístupu SCP pro všechny uživatele rssh.
(Možná také budete chtít použít chroot k udržení uživatelů v jejich domovech, ale to je jiný příběh.)
Řešení 2:
Jsem na to pozdě, ale můžete použít klíče ssh a zadat přesný příkaz povolený v jejich souboru ~/.ssh/authorized_keys, např.
no-port-forwarding,no-pty,command="scp source target" ssh-dss ...
Možná budete muset použít ps to na cíli, abyste nastavili správné nastavení příkazu.
PS:Pokud spustíte příkaz test scp s "-v", můžete vidět něco takového
debug1: Sending command: scp -v -t myfile.txt
Všimněte si, že "-t" je nezdokumentovaná volba scp, kterou program používá na druhém konci. To vám dává představu o tom, co musíte vložit do autorizovaných klíčů.
UPRAVIT: Více informací (s několika odkazy) můžete najít v této otázce StackOverflow.
Zde je funkční příklad pro uživatele jménem backup_user
na straně serveru.
~backup_user/.ssh/authorized_keys
obsah na straně serveru (s některými dalšími bezpečnostními omezeními):
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="scp -v -r -d -t ~/CONTENT" ssh-rsa AAAAMYRSAKEY...
Vytvořte odkaz v ~backup_user/, který odkazuje na adresář, kde by měl být obsah přístupný.
$ ln -s /path/to/directory/with/accessible/content ~backup_user/CONTENT
Nyní by měl ze strany klienta fungovat následující příkaz:
scp -v -r -P 2222 -i .ssh/id_rsa_key_file path/to/data [email protected]:~/CONTENT
Co tento příkaz dělá:
- Zobrazuje podrobné informace (volitelné :můžete odstranit
-v
ze souboru příkazů i autorizovaných_klíčů) - Rekurzivně kopíruje obsah cesty/k/datům. (volitelné :můžete odstranit
-r
z příkazového i autorizovaného souboru, pokud nechcete vytvářet rekurzivní kopii) - Pro připojení k serveru používá port 2222 (volitelné :můžete odstranit
-P 2222
z příkazu) - K automatizaci připojení používá a soubor identity (volitelné :můžete odstranit
-i .ssh/id_rsa_key_file
- Obsah
path/to/data
bude zkopírován do/path/to/directory/with/accessible/content/
Chcete-li vytvořit kopii souboru (nebo několika) ze serveru na klienta, měli byste vytvořit skript shellu, který to zpracuje, jak je popsáno zde
Řešení 3:
Na večírek jdu trochu pozdě, ale navrhuji, abyste se podívali na ForceCommand
direktiva OpenSSH.
Subsystem sftp internal-sftp
Match group sftponly
ForceCommand internal-sftp
Je pravda, že toto je SFTP a ne SCP, ale dosahuje stejného cíle, bezpečněji než s omezeným shellem. Kromě toho můžete uživatele chrootovat, pokud chcete.
Řešení 4:
K tomu používám MySecureShell. Můžete nakonfigurovat i další omezení.
https://github.com/mysecureshell/mysecureshell
Omezuje připojení pouze na SFTP/SCP. Žádný přístup k shellu.
Řešení 5:
Doporučuji použít scponly.
Jedná se o omezený shell, který uživatelům umožňuje dělat přesně to, co zní, soubory SCP na server, ale ve skutečnosti se nepřihlašovat. Informace a zdrojové kódy ke stažení pro software jsou k dispozici zde a předkompilované balíčky RPM jsou dostupné prostřednictvím EPEL YUM úložiště.
Po instalaci budete muset nakonfigurovat každý uživatelský účet, ke kterému chcete omezit přístup, aby používal nově nainstalovaný omezený shell. Můžete to udělat ručně přes /etc/passwd nebo použít následující příkaz:usermod -s /usr/bin/scponly USERNAME