{"id":413,"date":"2011-01-31T22:05:01","date_gmt":"2011-02-01T03:05:01","guid":{"rendered":"https:\/\/rafael.bonifaz.ec\/blog\/?p=413"},"modified":"2011-01-31T22:05:01","modified_gmt":"2011-02-01T03:05:01","slug":"sshsftp-enjaulado","status":"publish","type":"post","link":"https:\/\/rafael.bonifaz.ec\/blog\/2011\/01\/sshsftp-enjaulado\/","title":{"rendered":"SSH\/SFTP Enjaulado"},"content":{"rendered":"<p>SSH es una herramienta extremadamente poderosa. Mucho poder quiere decir mucha responsabilidad. Si alguna vez tenemos que dar acceso de SSH o SFTP a nuestro servidor a alguien que no conozcamos, entonces es buena idea darles lo m\u00ednimo necesario para que realicen sus tareas.<br \/>\nLas buenas noticias es que podemos crear ambientes aislados a los usuarios con el conjunto de herramientas que ellos necesitan. . Entre otras cosas, estas herramientas pueden servir ser sincronizar directorios  utilizando rsync sobre ssh, tener acceso para subir archivos de forma segura al servidor utilizando SFTP, entre otras.<br \/>\nLa primera vez que me toc\u00f3 crear un ambiente chroot para un usuario era necesario compilar una versi\u00f3n modificada de ssh. Si bien era un trabajo tedioso, existe buena documentaci\u00f3n en Internet y se podr\u00eda seguir how-tos bastante bien documentados. Recientemente investigu\u00e9 otra vez sobre el tema y veo que ahora ssh soporta nativamente ambientes enjaulados y existe un script que nos permite crear los ambientes enjaulados.<\/p>\n<p style=\"padding-left: 30px;\"><strong>Nota<\/strong>: Todos los ejemplos que pongo a continuaci\u00f3n con SSH se podr\u00eda utilizar con cliente SFTP como Filezilla.<!--more--><\/p>\n<p>Descargar el script make_chroot_jail y guardarlo en \/usr\/local\/sbin:<\/p>\n<p style=\"padding-left: 30px;\"><code>cd \/usr\/local\/sbin<br \/>\nwget http:\/\/www.fuschlberger.net\/programs\/ssh-scp-sftp-chroot-jail\/make_chroot_jail.sh<br \/>\nchmod 700  make_chroot_jail.sh<br \/>\n<\/code><\/p>\n<p>La raz\u00f3n por la que guardamos el archivo en \/usr\/local\/sbin, es porque es una ruta estandard para poner aplicaciones o scripts que no vienen con la distribuci\u00f3n que usamos y que deben ser ejecutadas solo por el administrador. Adem\u00e1s tiene la ventaja de estar incluido en el path de los administradores por lo que se puede ejecutar directamente escribiendo make_chroot_jail.sh en lugar de la ruta completa.<\/p>\n<h2>Modificaciones al script<\/h2>\n<p>Antes de ejecutar el script, me encontr\u00e9 con algunos detalles que deben ser cambiados para que funcione perfectamente. El primer cambio que se debe hacer es cambiar la primera l\u00ednea del archivo. En lugar de decir:<\/p>\n<p style=\"padding-left: 30px;\"><code>#!\/bin\/sh<\/code><\/p>\n<p>Deber\u00ed\u00e1 decir<\/p>\n<p style=\"padding-left: 30px;\">\n<code>#!\/bin\/bash<\/code><\/p>\n<p>Normalmente el comado \/bin\/sh es un link a \/bin\/bash, pero esto no es cierto en todas las distros. Para que este script funcione correctamente deber\u00edamos ejecutarlo con el shell bash.<\/p>\n<p>En el caso de mis pruebas con Ubuntu 10.4 y Debian Squeeze es necesario modificar la l\u00ednea 472 y cambiar la librer\u00eda:<\/p>\n<p style=\"padding-left: 30px;\"><code>\/lib\/libcap.so.1<\/code><\/p>\n<p>por<\/p>\n<p style=\"padding-left: 30px;\"><code>\/lib\/libcap.so.2<\/code><\/p>\n<p>En este script Ubuntu es reconocido como Debian. As\u00ed que en los 2 casos hay que modificar la l\u00ednea 472. Si estas usando una distro como Suse, Fedora u otra, habr\u00eda que modificar la l\u00ednea correspondiente.<\/p>\n<h2>Personalizar el Ambiente<\/h2>\n<p>La \u00faltima modificaci\u00f3n que debemos hacer al script es agregar o quitar (lo dudo) las aplicaciones que queremos darle al usuario. En el caso de Debian\/Ubuntu deber\u00edamos modifcar la l\u00ednea 119.<\/p>\n<p>Crear el primer usuario:<br \/>\nLa forma m\u00e1s b\u00e1sica de crear el usuario es:<\/p>\n<p style=\"padding-left: 30px;\"><code>make_chroot_jail.sh gnu<\/code><\/p>\n<p>En este caso creamos el usuario gnu que ser\u00e1 un usuario enjaulado. Ahora intentemos ingresar al servidor y listemos algunos directorios para ver si todo esta en orden.<\/p>\n<p style=\"padding-left: 30px;\"><code>ssh gnu@servidorremoto.com<br \/>\nls \/<\/code><\/p>\n<p>Si la salida del comando es la siguiente hemos creado exitosamente nuestra Jaula.<\/p>\n<p style=\"padding-left: 30px;\"><code>bin  dev  etc  home  lib  sbin  usr<\/code><\/p>\n<p>Por defecto la jaula se crear\u00e1 en el directorio \/home\/jail. Este directorio se podr\u00eda cambiar pasando argumentos al comando. Para ver lo que se puede hacer con este script podemos ejecutarlo de la siguiente forma<\/p>\n<p style=\"padding-left: 30px;\"><code>make_chroot_jail.sh | less<br \/>\n<\/code><\/p>\n<p>Si quisieramos podr\u00edamos crear varios usuarios dentro de la misma jaula.<\/p>\n<h2>Crear varias Jaulas ssh<\/h2>\n<p>Es muy probable que queramos tener varias usuarios y cada uno con su propio ambiente chroot. Esto es algo muy \u00fatil si alguien vende hosting y quiere que sus usuarios utilicen SFTP en lugar de FTP, aumentando mucho la seguridad para los usuarios y para el servidor. Para crear los usuarios en un ambiente distinto se les debe asignar un shell propio y un directorio donde estar\u00e1 la jaula.<\/p>\n<p>Con un ejemplo se entiende mejor. Vamos crear 2 ambientes enjaulados. El primero tendr\u00e1 su shell como \/usr\/local\/bin\/shelltuxs y su ambiente chroot estar\u00e1 en \/jaulas\/tuxs. El segundo tendr\u00e1 su shell como \/usr\/local\/bin\/shellgnues y su ambiente chroot estar\u00e1 en \/jaulas\/gnues. Podr\u00edamos tener tantos ambientes enjaulados como quisieramos, pero cada uno deber\u00e1 tener su propio shell. Los shells que estamos creando podr\u00ed\u00e1n estar en cualquier directorio y llamarse de cualquier forma. El script los crear\u00e1.<\/p>\n<p>Crear usuarios gnues y su ambiente<\/p>\n<p style=\"padding-left: 30px;\">\n<code>make_chroot_jail.sh gnu1 \/usr\/local\/bin\/shellgnues \/jaulas\/gnues\/<br \/>\nmake_chroot_jail.sh gnu2 \/usr\/local\/bin\/shellgnues \/jaulas\/gnues\/<br \/>\nmake_chroot_jail.sh gnu3 \/usr\/local\/bin\/shellgnues \/jaulas\/gnues\/<br \/>\n<\/code><\/p>\n<p>Crear usuarios tux y su ambiente:<\/p>\n<p style=\"padding-left: 30px;\"><code>make_chroot_jail.sh tux1 \/usr\/local\/bin\/shelltuxs \/jaulas\/tuxs\/<br \/>\nmake_chroot_jail.sh tux2 \/usr\/local\/bin\/shelltuxs \/jaulas\/tuxs\/<br \/>\nmake_chroot_jail.sh tux3 \/usr\/local\/bin\/shelltuxs \/jaulas\/tuxs\/<\/code><\/p>\n<p>Listo hemos creado 2 ambientes enjaulados y cada ambiente enjaulado. La verdad esta mucho m\u00e1s f\u00e1cil que hace algunos a\u00f1os atr\u00e1s cuando hice esto por primera vez.<\/p>\n<h2>Algunas consideraciones.<\/h2>\n<p>Si bien este script nos facilita la vida, tiene algunas errores. Si se actualiza varias veces el mismo usuario, habr\u00eda que revisar el archivo \/etc\/passwd tanto en el ambiente real como el enjaulado para que no tenga usuarios repetidos. Lo mismo se deber\u00eda hacer con el comando visudo y borrar los usuarios repetidos.<\/p>\n<h3 class='related_post_title'>Art\u00edculos relacionados<\/h3><ul class='related_post'><li><a href=\"https:\/\/rafael.bonifaz.ec\/blog\/2015\/02\/acceder-a-un-computado-a-traves-de-tor-sin-ip-publico\/\" title=\"Acceder a un Computador a trav\u00e9s de Tor sin IP P\u00fablico\">Acceder a un Computador a trav\u00e9s de Tor sin IP P\u00fablico<\/a><\/li><li><a href=\"https:\/\/rafael.bonifaz.ec\/blog\/2011\/02\/tips-ssh\/\" title=\"11 + 1 Tips SSH\">11 + 1 Tips SSH<\/a><\/li><li><a href=\"https:\/\/rafael.bonifaz.ec\/blog\/2011\/02\/proteger-ssh-con-fail2ban\/\" title=\"Proteger SSH con Fail2Ban\">Proteger SSH con Fail2Ban<\/a><\/li><\/ul>","protected":false},"excerpt":{"rendered":"<p>SSH es una herramienta extremadamente poderosa. Mucho poder quiere decir mucha responsabilidad. Si alguna vez tenemos que dar acceso de SSH o SFTP a nuestro servidor a alguien que no conozcamos, entonces es buena idea darles lo m\u00ednimo necesario para que realicen sus tareas. Las buenas noticias es que podemos crear ambientes aislados a los [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[70,1,3],"tags":[87,86,83,84],"class_list":["post-413","post","type-post","status-publish","format-standard","hentry","category-comos","category-general","category-software-libre","tag-chroot","tag-sftp","tag-ssh","tag-tips"],"_links":{"self":[{"href":"https:\/\/rafael.bonifaz.ec\/blog\/wp-json\/wp\/v2\/posts\/413","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rafael.bonifaz.ec\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rafael.bonifaz.ec\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rafael.bonifaz.ec\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rafael.bonifaz.ec\/blog\/wp-json\/wp\/v2\/comments?post=413"}],"version-history":[{"count":2,"href":"https:\/\/rafael.bonifaz.ec\/blog\/wp-json\/wp\/v2\/posts\/413\/revisions"}],"predecessor-version":[{"id":415,"href":"https:\/\/rafael.bonifaz.ec\/blog\/wp-json\/wp\/v2\/posts\/413\/revisions\/415"}],"wp:attachment":[{"href":"https:\/\/rafael.bonifaz.ec\/blog\/wp-json\/wp\/v2\/media?parent=413"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rafael.bonifaz.ec\/blog\/wp-json\/wp\/v2\/categories?post=413"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rafael.bonifaz.ec\/blog\/wp-json\/wp\/v2\/tags?post=413"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}