SSH für einzelnen Benutzer nur von einer IP gestatten?

Post Reply
Message
Author
pkrix
Posts: 11
Joined: 03. Apr 2009 10:24

SSH für einzelnen Benutzer nur von einer IP gestatten?

#1 Post by pkrix »

Hallo zusammen,

ich habe ein Problem, bzw. eher eine Frage zu SSH. Ich habe Scripte, die via SSH von einem bestimmten Host (nennen wir ihn mal A) auf einem bestimmten Host (dann halt B :wink: ) befehle ausführen können soll. das ganze läuft über eine selbstgeschriebene web-anwendung. der public-rsakey des apache-users ist in der autorized_keys des zielusers auf dem zielhost eingetragen. login ohne passwort geht auch. der zieluser ist für genau einen prozess, der in seinem homeverzeichnis läuft zuständig. sonst für nichts. des weiteren soll der user aber auch als ftp-login genutzt werden können.

und da ist das problem: wenn ich die ftp-zugangsdaten rausgebe, dann kann sich ja derjenige, dem ich diese gebe auch via ssh auf dem system anmelden. und das soll auf keinen fall möglich sein. gibt es da eine möglichkeit, die nur einem ganz bestimmten user von host a den consolenzugriff auf zieluser@hostb gestattet? wenn es nur nach hosts möglich ist (also nicht apacheuser@hosta sondern nur hosta auch zieluser@hostb, dann ist das auch ok ..

ich hoffe, ich habe mein anliegen verständlich vorgebracht ;) falls nicht, dann bitte einfach nachfragen ;)

im voraus schonmal vielen dank!
gruß patrick

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#2 Post by Janka »

Nimm einen FTP-Server, der eine eigene Benutzerverwaltung hat, z.B. vsftpd. Alternativ schaltest du das Password-Login bei sshd ab (und am besten auch gleich Protokollversion 1).

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

pkrix
Posts: 11
Joined: 03. Apr 2009 10:24

#3 Post by pkrix »

:?: Ähm ich habe vsftp auf der kiste rennen, jedoch bin ich nicht so der ftp-freak xD bin was ftp betrifft normalerweise nur der anwender ^^ könntest du mir vielleicht genauer erklären, wie du das mit der eigenen benutzerverwaltung meinst?
wichtig ist bei mir halt, dass ich in dem ordner mit dem ftp-benutzer hochladen und auch löschen kann. jedoch müssen die dateien, die über ftp hochgeladen werden, dem user zugewiesen sein, der später die anwendung starten soll (via ssh). wenn man den vsftp-user irgendwie auf den unix-user maskieren könnte (ka ob sowas möglich ist ;) ) dann wäre das ja schon die lösung des problems, weil der ftp-user dann andere zugangsdaten hätte als der unix-benutzer, der via ssh zum arbeiten aufgefordert wird ^^

wenn man optional beim ftp noch für jeden user eigene einstellungen treffen darf in richtung erlaubter dateiendungen, dann wäre das für später auch noch interessant ;)

vielen dank und gruß,
patrick

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#4 Post by Janka »

http://www.nulldevice.de/2007/06/vsftpd ... len-usern/
Lesen musst du jetzt aber selbst.

Allerdings kapiere ich selbst beim dritten Durchlesen nicht, wo genau dein Problem liegt. Einerseits soll der Nutzer, der per FTP Daten hochgeladen hat sich per SSH nicht anmelden können, andererseits soll er deine bestimmte Anwendung starten können. Dann richte doch einfach als Shell für diesen Benutzer in /etc/passwd statt /bin/bash deine Anwendung ein. Wenn die keine Möglichkeit bietet, irgendeine Shell aufzurufen bist du doch schon am Ziel.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

pkrix
Posts: 11
Joined: 03. Apr 2009 10:24

#5 Post by pkrix »

ich versuche das problem mal anders zu beschreiben.. auf host a läuft ein webinterface. dieses webinterface schickt über den user wwwrun@hosta via exec() aus php einen ssh befehl (ssh xy@hostb startbefehl_für_die_anwendung) an den hostb. und nur auf diesem einen wege soll für den xy@hostb der ssh-zugriff gestattet sein.
da jedoch für die anwendung regelmäßig neue dateien hochgeladen werden müssen, soll ein ftp-zugriff auf das homeverzeichnis von xy@hostb möglich sein. wenn ich jedoch jetzt das pw für den ftp-zugang rausgebe, und einer so schlau ist und die logindaten mal für ssh benutzt, dann ist der user im system. Dies will ich vermeiden.
lege ich jedoch einen anderen ftp-account zum hochladen der dateien an, dann haben die dateien nicht mehr die berechtigungen xy.users, sondern beispielsweise ftp1.ftp und damit eindeutig die falschen rechte ;) alles auf 777 stellen ist meiner meinung nach auch nicht sinn des erfinders, also suche ich nach einer lösung, die mir diese konstellation ermöglicht ;)
und dazu werde ich mir mal den link anschauen, den du mir geschickt hast. vielen dank dafür!!

in der hoffnung, dass ich die situation jetzt verständlich rüberbringen konnte (formulieren war noch nie mein ding xD) verbleibe ich mit bestem dank und gruß,
patrick

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#6 Post by Janka »

pkrix wrote: auf host a läuft ein webinterface. dieses webinterface schickt über den user wwwrun@hosta via exec() aus php einen ssh befehl (ssh xy@hostb startbefehl_für_die_anwendung) an den hostb. und nur auf diesem einen wege soll für den xy@hostb der ssh-zugriff gestattet sein.
Schicke keinen Startbefehl für die Anwendung, sondern trage in der /etc/passwd von hostb statt /bin/bash deine Anwendung für den Benutzer xy als Shell ein. Dann startet ein einfaches "ssh xy@hostb" automatisch genau diese Anwendung. Es gibt sonst keine Möglichkeit zu verhindern, dass xy auf hostb andere Befehle als den einen gewünschten ausführt. Falls du mehrere verschiedene Befehle absetzen willst oder wechselnde Parameter benötigst, verwende statt /bin/bash eine "restricted shell", also /usr/bin/rbash und lies dir die Manpage von bash, Sektion "RESTRICTED SHELL" genau durch.

Zusätzlich oder alternativ kannst du die SSH noch so konfigurieren, dass sie den Zugriff ausschließlich von hosta aus erlaubt. Oder du schaltest Password-basierte Logins völlig ab, dann geht es nur noch per Key. Und den Key hat der FTP-Nutzer ja nicht.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

pkrix
Posts: 11
Joined: 03. Apr 2009 10:24

#7 Post by pkrix »

Hallo, danke für die antwort.
Schicke keinen Startbefehl für die Anwendung, sondern trage in der /etc/passwd von hostb statt /bin/bash deine Anwendung für den Benutzer xy als Shell ein.
das klingt interessant ;) muss ich dann einfach nur statt /bin/bash einfach nur beispielsweise /home/xy/anwendung.sh eintragen? wieder was gelernt xD jedoch hilft mir das bei meinem vorhaben nicht weiter, weil ich eine kleine liste von befehlen brauche.. daher dann eher dies:
Falls du mehrere verschiedene Befehle absetzen willst oder wechselnde Parameter benötigst, verwende statt /bin/bash eine "restricted shell"
werde ich mir mal genauer anschauen.. auch wenn dann der user sich immer noch auf die restricted shell einloggen könnte..
Zusätzlich oder alternativ kannst du die SSH noch so konfigurieren, dass sie den Zugriff ausschließlich von hosta aus erlaubt
dies wäre die ideallösung und hatte ich eigenlich auch vor, jedoch nur für einen einzigen user, nicht für den gesamten ssh-deamon.. ist das machbar?

vielen dank für dein bemühen!!
gruß patrick

p.s.: das mit den virtuellen ftp-accounts bin ich grad am testen, habs aber noch nicht hinbekommen ;) werde es aber weiter versuchen ^^

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#8 Post by Janka »

pkrix wrote: dies wäre die ideallösung und hatte ich eigenlich auch vor, jedoch nur für einen einzigen user, nicht für den gesamten ssh-deamon.. ist das machbar?
Nein. Allerdings ist das Password-Login ohnehin nicht besonders sicher oder bequem. Wie viele Nutzer müsstest du denn auf Key-Logins umstellen?

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

pkrix
Posts: 11
Joined: 03. Apr 2009 10:24

#9 Post by pkrix »

puh.. ka.. das kommt drauf an, ob ich das mit dem virtuellen ftp-accounts hinbekomme.. weil wenn dies möglich ist, dann kann man, so wie ich es verstanden habe ja in dem homeverzeichnis von einem unixuser (/home/xy/.) einzelne unterordner erstellen, die den namen des virtuellen ftp-accounts haben. und wenn man über den virtuellen ftp-account sachen hochlädt, dann haben sollten die die berechtigugnen des unix-users haben. (hoffe das hab ich so richtig verstanden, habs bis jetzt noch nicht ans laufen gebracht..)
sollte dies so funktionieren, dann betrifft es eine hand voll user und wäre kein thema..

ursprünglich dachte ich ja für jeden user, der in dem falle ein virtueller ftp-account wäre müsste ich einen unix-user anlegen.. dann wäre das ne ganze menge arbeit alle auf keys umzustellen.. sollte das mit den virtuellen ftp-accounts funktionieren müsste ich nicht das kennwort des unix-users rausgeben, da ja jeder über seinen virtuellen ftp-account sein eigenes kennwort hätte..

kurz gefasst: bekomme ich das mit den virtuellen linux-accounts hin, dann ist mein problem gelöst und der thread könnte geschlossen werden.. nur im moment bekomme ich nen haufen fehlermeldungen raus..
ich habe auf basis dieses Tutorials (http://alien2thisworld.net/sitePages/tu ... setup.html) versucht die virtuellen accounts in einer virtuellen suse 11.0 maschine zu realisieren, aber irgendwie will der nicht so richtig.. werde es weiter versuchen in der hoffnung, dass es dann mal iwann funktioniert und ich es auf meinen server übertragen kann ^^

wenn du dazu noch gute tipps hättest, dann würde ich mich sehr darüber freuen ;)

danke auf jeden fall für deine bemühungen!! find ich top!!
gruß, patrick

pkrix
Posts: 11
Joined: 03. Apr 2009 10:24

Probleme beim Virtuellen FTP

#10 Post by pkrix »

Moin zusammen,

ich habe mich mit ein paar How-To's auf einer virtuellen SuSE-Maschine an den virtuellen FTP-Accounts versucht, bin jedoch leider gescheitert (zumindest teilweise).

Ich bekomme folgende Fehlermeldung: 500 OOPS: tcp_wrappers is set to YES but no tcp wrapper support compiled in

wenn ich jedoch nach tcp wrapper für suse suche, bekomme ich keine brauchbaren ergebnisse bei google.. kennt jemand dieses verhalten vom ftp vllt schon?

gruß

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#11 Post by Janka »

Ein tcp-Wrapper wird z.B. von xinetd benutzt. Der "Netzwerk"-Server braucht dann selbst keine Netzwerkfunktionalität zu besitzen, er bekommt den fertig verbundenen Socket von xinetd als stdin und stdout angebunden. Das kann jedes Programm.

Manche Serverdaemons können sowohl standalone als auch per xinetd benutzt werden. Xinted hat nämlich den Vorteil, dass der jeweilige Server-Prozess erst dann gestartet wird, wenn tatsächlich eine Verbindungsanforderung vorliegt. Man spart so also RAM. Vsftpd kann wohl prinzipiell beides, nur das Binary was du da hast eben nicht.

Zwei Möglichkeiten:

* vsftpd selbst kompilieren und Support für TCP-Wrapper einschalten.
* Eine Anleitung suchen, die das mit den virtuellen FTP-Accounts hinbekommt, *ohne* xinetd/TCP-Wrapper zu brauchen.

Vermutlich hängst du auch zu sehr wörtlich an der Anleitung, deshalb bist du über dieses Problem gestolpert.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

pkrix
Posts: 11
Joined: 03. Apr 2009 10:24

#12 Post by pkrix »

sry, dass ich mich jetzt ne zeit nicht gemeldet hab, aber karneval hat mich doch sehr beansprucht ;)

ich werde dann mal versuchen mir vsftp zum selbstkompilieren zu holen.. mal gucken, ob es damit besser klappt.. hatte ursprünglich das vsftp, was bei suse 11 unter yast angeboten wird.. ich probiere es einfach mal aus.. melde mich dann wieder!!

Danke und Gruß

pkrix
Posts: 11
Joined: 03. Apr 2009 10:24

#13 Post by pkrix »

ich hab mich nochmal daran versucht.. ich habe vsftp 2.2.2 (ftp://vsftpd.beasts.org/users/cevans/vs ... 2.2.tar.gz) heruntergeladen. anschließend entpackt und mit make kompiliert. anschließend habe ich die entstandene datei vsftpd nach /usr/sbin/vsftpd kopiert (die alte überschrieben) und durch den befehl vsftpd -v die version überprüft. als ausgabe bekam ich vorher 2.0.7 und nun 2.2.2. daher schließe ich, dass das kompilieren und die installation funktioniert haben sollte?!

dann bin ich nach folgender anleitung vorgegangen, jedoch hat es trotzdem nicht funktioniert (ich bekomme immer fehler 530 login incorrect, obwohl ich das passwort durch kopieren 1 zu 1 übernommen habe)

die anleitung:
Step 0)
mkdir -p /etc/vsftpd

Step 1) Create the virtual users database.
We are going to use pam_userdb to authenticate the virtual users.

To create a "db" format file, first create a plain text files with the
usernames and password on alternating lines.
tom
foo
fred
bar

Whilst logged in as root, create the actual database file like this:
db_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db
==> This will create /etc/vsftpd/vsftpd_login.db.

chmod 600 /etc/vsftpd/vsftpd_login.db

Step 2) Create a PAM file which uses your new database.
vi /etc/pam.d/ftp
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

Step 3) Set up the location of the files for the virtual users.
useradd -d /home/ftpsite virtual

ls -ld /home/ftpsite
drwx------ 3 virtual virtual 4096 Jul 30 00:39 /home/ftpsite

Step 4) Create your vsftpd.conf config file.
# This disables anonymous FTP for security, and enables non-anonymous FTP (which
# is what virtual users use).
anonymous_enable=NO
local_enable=YES

# These ensure that for security purposes, no write commands are allowed.
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

# This makes sure that the virtual user is restricted to the virtual FTP area
# /home/ftpsite we set up above.
chroot_local_user=YES

# The guest_enable is very important - it activates virtual users! And
# guest_username says that all virtual users are mapped to the real user
# "virtual" that we set up above. This will also determine where on the
# filesystem the virtual users end up - the home directory of the user
# "virtual", /home/ftpsite.
guest_enable=YES
guest_username=virtual

# These put a port range on passive FTP incoming requests - very useful if
# you are configuring a firewall.
pasv_min_port=30000
pasv_max_port=30999


Step 5) Activate per-user configurability.
# To activate this powerful vsftpd feature, add the following
user_config_dir=/etc/vsftpd/user_conf
# And, create this directory:
# mkdir /etc/vsftpd/user_conf

# For the tom user, supply a config setting override for
# anon_world_readable_only:
echo "anon_world_readable_only=NO" > /etc/vsftpd/user_conf/tom
# Check it out - login as tom and now "ls" will return a directory listing!
# Log in as fred and it won't.

# Give fred the ability to read all files / directories and create
# new ones but not interfere with existing files.
echo "anon_world_readable_only=NO" > /etc/vsftpd/user_conf/fred
echo "write_enable=YES" >> /etc/vsftpd/user_conf/fred
echo "anon_upload_enable=YES" >> /etc/vsftpd/user_conf/fred

# Check it out - login as tom and you can't upload. Log in as fred and you can!
# Try and delete a file as both tom and fred - you can't.
(Quelle: http://www.linux-club.de/viewtopic.php? ... 12&start=0)

einzig die funktion mit den ports (pasv_min_port und pasv_max_port hab ich weggelassen, weil ich erstmal das ding im allgemeinen laufen haben will und da keine ports einschränken will.. (firewall ist in der testumgebung deaktiviert)

ich bin mir jedoch fast sicher, dass es nur an irgendeiner kleinigkeit hängen kann, die ich bis jetzt übersehen habe... über vorschläge bzw. ideen würd ich mich freuen ;)

danke im voraus und gruß,
patrick

Post Reply