{"id":1138,"date":"2011-01-01T13:43:06","date_gmt":"2011-01-01T12:43:06","guid":{"rendered":"http:\/\/my.stargazer.at\/?p=1138"},"modified":"2011-01-01T13:43:06","modified_gmt":"2011-01-01T12:43:06","slug":"how-to-grant-limited-access-to-your-server","status":"publish","type":"post","link":"https:\/\/my.stargazer.at\/de\/2011\/01\/01\/how-to-grant-limited-access-to-your-server\/","title":{"rendered":"Eingeschr\u00e4nkter Zugriff zum Server"},"content":{"rendered":"<p>Bevor wir unseren Server f\u00fcr andere Leute zur Verf\u00fcgung stellen, wollen wir nat\u00fcrlich sichergehen, dass da nichts passieren kann und wir ihnen den Zugriff so weit als nur m\u00f6glich einschr\u00e4nken. Zu diesem Zweck installieren wir uns das Paket RSSH, das f\u00fcr &#8218;Restricted SSH&#8216; steht &#8211; also etwas, wo man den SSH Zugang einschr\u00e4nkt.<\/p>\n<blockquote><p>emerge -av rssh<\/p><\/blockquote>\n<p><!--more-->Damit ist die grundlegende Installation erledigt und wir widmen uns nach vollzogenem Compile der Konfiguration. Damit unsere Gentoo Installation nun von der Shell etwas weis und sie verwenden darf, registrieren wir sie in der Liste der Shells, welche sich in \/etc\/shells befindet. Danach folgt ein kleiner Ausflug in die Datei \/etc\/rssh.conf, wo sich der eigentliche Zirkus nun abspielt. Hier ist meine Beispielkonfiguration:<\/p>\n<blockquote><p>\n# This is the default rssh config file<\/p>\n<p># set the log facility.  &#8222;LOG_USER&#8220; and &#8222;user&#8220; are equivalent.<br \/>\nlogfacility = LOG_USER <\/p>\n<p># Leave these all commented out to make the default action for rssh to lock<br \/>\n# users out completely&#8230;<\/p>\n<p>allowscp<br \/>\nallowsftp<br \/>\n#allowcvs<br \/>\n#allowrdist<br \/>\n#allowrsync<\/p>\n<p># set the default umask<br \/>\numask = 022<\/p>\n<p># If you want to chroot users, use this to set the directory where the root of<br \/>\n# the chroot jail will be located.<br \/>\n#<br \/>\n# if you DO NOT want to chroot users, LEAVE THIS COMMENTED OUT.<br \/>\n# chrootpath = \/home<\/p>\n<p># You can quote anywhere, but quotes not required unless the path contains a<br \/>\n# space&#8230; as in this example.<br \/>\n#chrootpath = &#8222;\/usr\/local\/my chroot&#8220;<\/p>\n<p>##########################################<br \/>\n# EXAMPLES of configuring per-user options<\/p>\n<p>#user=rudy:077:00010:  # the path can simply be left out to not chroot<br \/>\n#user=rudy:077:00010   # the ending colon is optional<\/p>\n<p>#user=rudy:011:00100:  # cvs, with no chroot<br \/>\n#user=rudy:011:01000:  # rdist, with no chroot<br \/>\n#user=rudy:011:10000:  # rsync, with no chroot<br \/>\n#user=&#8220;rudy:011:00001:\/usr\/local\/chroot&#8220;  # whole user string can be quoted<br \/>\n#user=rudy:01&#8243;1:00001:\/usr\/local\/chroot&#8220;  # or somewhere in the middle, freak!<br \/>\n#user=rudy:&#8217;011:00001:\/usr\/local\/chroot&#8216;  # single quotes too<\/p>\n<p># if your chroot_path contains spaces, it must be quoted&#8230;<br \/>\n# In the following examples, the chroot_path is &#8222;\/usr\/local\/my chroot&#8220;<br \/>\n#user=rudy:011:00001:&#8220;\/usr\/local\/my chroot&#8220;  # scp with chroot<br \/>\n#user=rudy:011:00010:&#8220;\/usr\/local\/my chroot&#8220;  # sftp with chroot<br \/>\n#user=rudy:011:00011:&#8220;\/usr\/local\/my chroot&#8220;  # both with chroot<\/p>\n<p># Spaces before or after the &#8218;=&#8216; are fine, but spaces in chrootpath need<br \/>\n# quotes.<br \/>\n#user = &#8222;rudy:011:00001:\/usr\/local\/my chroot&#8220;<br \/>\n#user = &#8222;rudy:011:00001:\/usr\/local\/my chroot&#8220;  # neither do comments at line end<\/p>\n<\/blockquote>\n<p>Solltet ihr euch nur dazu entschieden haben, ssh zu unterbinden und z.B. scp zu erlauben, dann ist das Thema schon so gut wie erledigt und ihr k\u00f6nnt den Benutzern diese Shell zuweisen. <\/p>\n<p><strong>Achtung: diese Shell NIE root zuweisen, da man sich sonst selbst aussperrt!<\/strong><\/p>\n<p>Unser n\u00e4chstes Thema hier heisst nun die User in chroots zu bannen um ihnen die g\u00e4ngigen M\u00f6glichkeit des Missbrauchs unseres Servers zu nehmen. Daf\u00fcr setzen wir den chrootpath in der rssh.conf und am Besten noch eine umask. Der Einfachheit halber m\u00f6chte ich alle Benutzer in \/home beheimaten. Also chroote ich auch dort.<\/p>\n<blockquote><p>\numask = 022<br \/>\nchrootpath=&#8220;\/home&#8220;\n<\/p><\/blockquote>\n<p>Wir erinnern uns: Pakete haben Abh\u00e4ngigkeiten, damit sie laufen. Nun gilt es diese in unsere chroot-Umgebung zu fummeln:<\/p>\n<blockquote><p>\ncd \/home<br \/>\nmkdir -p usr\/bin<br \/>\ncp \/usr\/bin\/scp usr\/bin<br \/>\ncp \/usr\/bin\/rssh usr\/bin<br \/>\nmkdir -p usr\/libexec<br \/>\ncp \/usr\/libexec\/rssh_chroot_helper usr\/libexec<br \/>\nmkdir -p usr\/lib\/misc<br \/>\ncp \/usr\/lib\/misc\/sftp-server usr\/lib\/misc\n<\/p><\/blockquote>\n<p>Damit Dinge wie SCP auch korrekt laufen m\u00fcssen diese auf ihre Abh\u00e4ngigkeiten hin \u00fcberpr\u00fcft werden. Dies geschieht am Besten mit ldd:<\/p>\n<blockquote>\n<pre>ldd \/usr\/bin\/scp \r\n        libutil.so.1 => \/lib\/libutil.so.1 (0x4001c000) \r\n        libz.so.1 => \/usr\/lib\/libz.so.1 (0x4001f000) \r\n        libnsl.so.1 => \/lib\/libnsl.so.1 (0x4002d000) \r\n        libcrypto.so.0.9.6 => \/usr\/lib\/libcrypto.so.0.9.6 (0x40042000) \r\n        libc.so.6 => \/lib\/libc.so.6 (0x40106000) \r\n        libdl.so.2 => \/lib\/libdl.so.2 (0x40235000) \r\n        \/lib\/ld-linux.so.2 => \/lib\/ld-linux.so.2 (0x40000000)<\/pre>\n<\/blockquote>\n<p>Da SCP ohne diese Abh\u00e4ngigkeiten nicht l\u00e4uft, kopieren wir die Abh\u00e4ngigkeiten. Theoretisch k\u00f6nnte man genauso gut auch Symlinks setzen, doch rate ich davon ab, da man damit die Abschottung der chroots wieder durchbricht und somit am echten System Schaden anrichten k\u00f6nnte und der ganze Aufwand des chroots somit umsonst w\u00e4re.<\/p>\n<blockquote><p>\ncd \/home<br \/>\nmkdir lib<br \/>\ncp \/lib\/libutil.so.1 lib<br \/>\ncp \/lib\/libnsl.so.1 lib<br \/>\ncp \/lib\/libc.so.6 lib<br \/>\ncp \/lib\/libdl.so.2 lib<br \/>\ncp \/lib\/ld-linux.so.2 lib<br \/>\nmkdir -p usr\/lib<br \/>\ncp \/usr\/lib\/libz.so.1 usr\/lib<br \/>\ncp \/usr\/lib\/libcrypto.so.0.9.6 usr\/lib\n<\/p><\/blockquote>\n<p>Die selbe \u00dcbung gilt es nun auch noch f\u00fcr die anderen Dateien zu machen, wie rssh, rssh_chroot_helper, den sftp_server und was noch alles in dem chroot angeboten werden soll. Dann wird es f\u00fcr unseren Testuser ernst, wenn wir ihm die Shell zuweisen: usermod -s \/usr\/bin\/rssh testuser <\/p>\n<p>Unser Testlauf:<\/p>\n<blockquote><p>sftp testuser@example.com<br \/>\nConnecting to example.com&#8230;<br \/>\ntestuser@example.com&#8217;s password:<br \/>\nsftp> ls<br \/>\n.<br \/>\n..<br \/>\n.bash_profile<br \/>\n.bashrc<br \/>\nsftp> pwd<br \/>\nRemote working directory: \/testuser<br \/>\nsftp> exit\n<\/p><\/blockquote>\n<p>Und nun das verbotene SSH:<\/p>\n<blockquote><p>ssh testuser@example.com<br \/>\ntestuser@example.com&#8217;s password: <\/p>\n<p>This account is restricted to scp or sftp. <\/p>\n<p>If you believe this is in error, please contact your system administrator. <\/p>\n<p>Connection to example.com closed.\n<\/p><\/blockquote>\n<p>&#8230; und da geht er hin &#8211; bzw seine Verbindung. Wenn man nun den SSH Dienst oder die Shell updated, sollte man die chroots nicht vergessen, da diese sonst noch immer auf den alten Dateien und Libraries laufen, was sich negativ auf die Systemsicherheit auswirkt.<\/p>","protected":false},"excerpt":{"rendered":"<p>Bevor wir unseren Server f\u00fcr andere Leute zur Verf\u00fcgung stellen, wollen wir nat\u00fcrlich sichergehen, dass da nichts passieren kann und wir ihnen den Zugriff so weit als nur m\u00f6glich einschr\u00e4nken. Zu diesem Zweck installieren wir uns das Paket RSSH, das f\u00fcr &#8218;Restricted SSH&#8216; steht &#8211; also etwas, wo man den SSH Zugang einschr\u00e4nkt. emerge -av rssh<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[244,39,170,346],"class_list":["post-1138","post","type-post","status-publish","format-standard","hentry","category-it-related-stuff","tag-chroot","tag-gentoo","tag-security","tag-ssh"],"_links":{"self":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/1138","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/comments?post=1138"}],"version-history":[{"count":0,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/1138\/revisions"}],"wp:attachment":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/media?parent=1138"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/categories?post=1138"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/tags?post=1138"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}