¿Puedo crear un usuario SSH que solo pueda acceder a cierto directorio?

45

Tengo un servidor privado virtual al que me puedo conectar usando SSH con mi cuenta raíz, pudiendo ejecutar cualquier comando de Linux y acceder a toda el área del disco, obviamente.

Me gustaría crear otra cuenta de usuario, que también podría acceder a este servidor utilizando SSH, pero solo a un determinado directorio, por ejemplo /var/www/example.com/

Por ejemplo, imagine que este usuario tiene un enorme archivo de error.log (500 MB) ubicado en /var/www/example.com/logs/error.log Al acceder a este archivo mediante FTP, este usuario necesita descargar 500 MB para ver las últimas líneas del registro, pero me gustaría que fuera capaz de ejecutar algo como esto:

tail error.log

Por lo tanto, necesito que pueda acceder al servidor utilizando SSH, pero no quiero otorgarle acceso a todas las áreas del servidor.

¿Cómo puedo hacer esto?

Richard Rodriguez
fuente

Respuestas:

29

chroot el usuario.


Actualizar:

El artículo de TechRepublic de Vincent Danen dice:

Con el lanzamiento de OpenSSH 4.9p1, ya no tiene que depender de hacks de terceros o configuraciones complicadas de chroot para limitar a los usuarios a sus directorios personales o darles acceso a los servicios SFTP.

edite / etc / ssh / sshd_config (/ etc / sshd_config en algunas distribuciones) y configure las siguientes opciones:

Subsystem     sftp   internal-sftp
Match Group sftp
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Asegúrese de que la directiva "Match" se encuentra al final del archivo. Esto le dice a OpenSSH que todos los usuarios en el grupo sftp deben pasar a su directorio de inicio (que% h representa en el comando ChrootDirectory

Para cualquier usuario que desee modificar, agréguelo al grupo sftp usando:

# usermod -G sftp joe
# usermod -s /bin/false joe
# chown root:root /home/joe
# chmod 0755 /home/joe

El comando usermod anterior agregará el usuario joe al grupo sftp y establecerá su shell en / bin / false para que nunca puedan obtener acceso al shell. Los comandos chown y chmod establecerán los permisos necesarios para el directorio. Con estos permisos establecidos, el usuario podrá cargar y descargar archivos, pero no podrá crear directorios o archivos en el directorio raíz

Chrooting cuentas de shell es un poco más complicado ya que requiere que ciertos archivos de dispositivo y un shell estén disponibles en el directorio de inicio del usuario. Los siguientes comandos configurarán un sistema chroot muy básico en Mandriva Linux:

# mkdir /chroot
# cd /chroot
# mkdir {bin,dev,lib}
# cp -p /bin/bash bin/
# cp -p /lib/{ld-linux.so.2,libc.so.6,libdl.so.2,libtermcap.so.2} lib/
# mknod dev/null c 1 3
# mknod dev/zero c 1 5
# chmod 0666 dev/{null,zero}
# mkdir -p /chroot/home/joe

Con lo anterior, el usuario Joe puede ingresar y estará restringido al chroot. Desafortunadamente, esto no hace mucho, pero le da una idea de cómo se puede configurar. Según lo que desee proporcionar, deberá instalar bibliotecas y binarios adicionales.


El sitio web de la comunidad Ubuntu dice

Creando un chroot

  1. Instale los paquetes dchroot y debootstrap.

  2. Como administrador (es decir, usando sudo), cree un nuevo directorio para el chroot. En este procedimiento, /var/chrootse utilizará el directorio . Para hacer esto, escriba sudo mkdir /var/chroot en una línea de comando.

  3. Como administrador, abra /etc/schroot/schroot.confen un editor de texto. Escriba cd /etc/schroot, seguido de gksu gedit schroot.conf. Esto te permitirá editar el archivo.

  4. Agregue las siguientes líneas schroot.confy luego guarde y cierre el archivo. Reemplace your_usernamecon su nombre de usuario.

    Descripción [lucid] = Ubuntu Lucid location = / var / chroot priority = 3 usuarios = your_username groups = sbuild root-groups = root

Abra una terminal y escriba:

sudo debootstrap --variant=buildd --arch i386 lucid /var/chroot/ \ 
http://mirror.url.com/ubuntu/

Esto creará una 'instalación' básica de Ubuntu 10.04 (Lucid Lynx) en el chroot. Los paquetes pueden tardar un tiempo en descargarse. Nota: Puede reemplazar lucid con la versión de Ubuntu que elija. Nota: Debe cambiar lo anterior mirror.url.comcon la URL de un espejo de archivo válido local para usted. Ahora se debería haber creado un chroot básico. Escriba sudo chroot /var/chroot para cambiar a un shell de raíz dentro del chroot.

Preparando el chroot

Hay algunos pasos básicos que puede seguir para configurar el chroot, proporcionando servicios como la resolución de DNS y el acceso /proc.

Nota: Escriba estos comandos en un shell que está fuera del chroot.

Escriba lo siguiente para montar el /proc sistema de archivos en el chroot (requerido para administrar procesos):

sudo mount -o bind /proc /var/chroot/proc  

Escriba lo siguiente para permitir la resolución DNS desde dentro del chroot (requerido para el acceso a Internet):

sudo cp /etc/resolv.conf /var/chroot/etc/resolv.conf 

Muy pocos paquetes se instalan por defecto en un chroot (incluso sudo no está instalado). Úselo apt-get install package_namepara instalar paquetes.

RedGrittyBrick
fuente