One place for hosting & domains

      Configurar

      Cómo configurar NFS Mount en Ubuntu 20.04


      Introducción

      NFS, o Network File System (Sistema de archivos en red) es un protocolo de sistema de archivos distribuido que le permite montar directorio remotos en su servidor. Esto le permite gestionar el espacio de almacenamiento en una ubicación diferente y escribir en ese espacio desde múltiples clientes. NFS proporciona una forma relativamente estándar y eficiente de acceder a sistemas remotos sobre una red y funciona bien en aquellas situaciones en las que debe accederse a los recursos regularmente.

      En esta guía repasaremos cómo instalar el software necesario para la funcionalidad NFS en Ubuntu 20.04, configuraremos dos montajes NFS en un servidor y cliente, y montaremos y desmontaremos los intercambios remotos.

      Requisitos previos

      Usaremos dos servidores en este tutorial, con uno compartiendo parte de su sistema de archivos con el otro. Para continuar, necesitará lo siguiente:

      • Dos servidores Ubuntu 20.04. Cada uno de estos debería tener un usuario no root con privilegios sudo, un firewall configurado con UFW y una red privada, si está disponible.

      A lo largo de este tutorial, nos referimos al servidor que comparte sus directorios como el host y al servidor que monta estos directorios como el client. Necesitará conocer la dirección IP de ambos. Asegúrese de usar la dirección de red privada, si está disponible.

      A lo largo de este tutorial, nos referiremos a estas direcciones IP por los marcadores de posición host_ip y client_ip. Sustituya según sea necesario.

      Paso 1: Descargar e instalar los componentes

      Comenzaremos instalando los componentes necesarios en cada servidor.

      En el host

      En el servidor host, instale el paquete nfs-kernel-server, que le permitirá compartir sus directorios. Ya que esta es la primera operación que está realizando con apt en esta sesión, actualice su índice de paquetes locales antes de la instalación:

      • sudo apt update
      • sudo apt install nfs-kernel-server

      Una vez instalados estos paquetes, cambie al servidor cliente.

      En el cliente

      En el servidor cliente, debemos instalar un paquete llamado nfs-common, que proporciona funcionalidad NFS sin incluir componentes del servidor. De nuevo, actualice el índice de paquetes locales antes de la instalación para garantizar que tiene información actualizada:

      • sudo apt update
      • sudo apt install nfs-common

      Ahora que ambos servidores tienen los paquetes necesarios, podemos comenzar a configurarlos.

      Paso 2: Crear los directorios compartidos en el host

      Vamos a compartir dos directorios independientes, con diferentes ajustes de configuración, para ilustrar dos formas clave en las que pueden configurarse los montajes NFS con respecto al acceso de un súper usuario.

      Los súper usuarios pueden hacer cualquier cosa en cualquier parte del sistema. Sin embargo, los directorios montados en NFS no son parte del sistema sobre el cual se montan, de forma que por defecto, el servidor NFS rechaza realizar operaciones que requieran privilegios de súper usuario. Esta restricción predeterminada significa que los súper usuarios en el client no pueden escribir archivos como root, reasignar propiedad, o realizar cualquier otra tarea de súper usuario en el montaje NFS.

      A veces, sin embargo, existen usuarios de confianza en el sistema client que necesitan realizar estas acciones sobre el sistema de archivo montado pero no tienen necesidad de acceso de súper usuario en el host. Puede configurar el servidor NFS para permitir esto, aunque introduce un elemento de riesgo, ya que como tal un usuario podría obtener acceso root a todo el sistema host.

      Ejemplo 1: Exportar un montaje de finalidad general

      En el primer ejemplo, crearemos un montaje NFS de finalidad general que utiliza el comportamiento NFS para hacer que sea difícil para un usuario con privilegios root sobre el equipo cliente interactuar con el host usando los privilegios de súper usuario del cliente. Puede usar algo como esto para guardar los archivos que se subieron usando un sistema de administración de contenidos o para crear espacio para que los usuarios compartan fácilmente los archivos de los proyectos.

      Primero, cree el directorio compartido:

      • sudo mkdir /var/nfs/general -p

      Ya que estamos creándolo con sudo, el directorio es propiedad del usuario root del host:

      Output

      drwxr-xr-x 2 root root 4096 May 14 18:36 .

      NFS traducirá cualquier operación root sobre el cliente a las credenciales nobody:nogroup como medida de seguridad. Por tanto, debemos cambiar la propiedad del directorio para que coincida con esos credenciales.

      • sudo chown nobody:nogroup /var/nfs/general

      Ahora está listo para exportar este directorio.

      Ejemplo 2: Exportar el directorio de inicio

      En nuestro segundo ejemplo, el objetivo es hacer que los directorios de inicio del usuario guardados en el host estén disponibles en los servidores cliente, permitiendo al mismo tiempo a los administradores de confianza de esos servidores cliente el acceso para administrar convenientemente a los usuarios.

      Para hacer esto, exportaremos el directorio /home. Debido a que ya existe, no necesitamos crearlo. No cambiaremos los permisos tampoco. Si lo hiciésemos, podría provocar varios problemas para cualquiera con un directorio de inicio en el equipo host.

      Paso 3: Configurar las exportaciones NFS en el servidor host

      A continuación, profundizaremos en el archivo de configuración NFS para configurar el intercambio de estos recursos.

      En el equipo host, abra el archivo /etc/exports en su editor de texto con privilegios root:

      El archivo tiene comentarios que muestran la estructura general de cada línea de configuración. La sintaxis es la siguiente:

      /etc/exports

      directory_to_share    client(share_option1,...,share_optionN)
      

      Deberemos crear una línea para cada uno de los directorios que queremos compartir. Asegúrese de cambiar el marcador de posición client_ip mostrado aquí a su dirección IP real:

      /etc/exports

      /var/nfs/general    client_ip(rw,sync,no_subtree_check)
      /home               client_ip(rw,sync,no_root_squash,no_subtree_check)
      

      Aquí, estamos usando las mismas opciones de configuración para ambos directorios con la excepción de no_root_squash. Vamos a echar un vistazo a lo que significa cada una de estas opciones:

      • rw: esta opción proporciona al equipo client acceso de lectura y escritura para el volumen.
      • sync: esta opción fuerza a NFS a escribir los cambios en el disco antes de responder. Esto resulta en un entorno más estable y consistente ya que la respuesta refleja el estado real del volumen remoto. Sin embargo, también reduce la velocidad de las operaciones de archivo.
      • no_subtree_check: esta opción evita la comprobación del subtree, que es un proceso por el cual el host debe comprobar si el archivo está realmente disponible aún en el árbol exportado para cada solicitud. Esto puede causar muchos problemas cuando se cambia el nombre a un archivo mientras el client lo tiene abierto. En casi todos los casos, es mejor deshabilitar la comprobación del subtree.
      • no_root_squash: por defecto, NFS traduce las solicitudes desde un usuario root remotamente a un usuario sin privilegios en el servidor. Esto estaba pensado como función de seguridad para evitar que una cuenta root en el client usara el sistema de archivos del host como root. no_root_squash deshabilita este comportamiento para ciertos intercambios.

      Una vez que termine de hacer estos cambios, guarde y cierre el archivo. A continuación, para hacer que los intercambios estén disponibles para los clientes que ha configurado, reinicie el servidor NFS con el siguiente comando:

      • sudo systemctl restart nfs-kernel-server

      Antes de poder usar realmente los nuevos intercambios, sin embargo, deberá asegurar que las reglas del firewall permiten ese tráfico a los intercambios.

      Paso 4: Ajustar el firewall en el host

      Primero, vamos a comprobar el estado del firewall para ver si está habilitado, y si es así, para ver qué permite actualmente:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)

      En nuestro sistema, solo se permite el tráfico SSH, así que necesitaremos añadir una regla para el tráfico NFS.

      Con muchas aplicaciones, puede usar sudo ufw app list y habilitarlas por su nombre, pero nfs no es una de esas. Sin embargo, debido a que ufw también comprueba /etc/services para el puerto y el protocolo de un servicio, aún podemos añadir NFS por nombre. Las buenas prácticas recomiendan que permita la regla más restrictiva que seguirá permitiendo el tráfico que desea permitir, de forma que permitir el tráfico desde cualquier sitio, será específico.

      Utilice el siguiente comando para abrir el puerto 2049 en el host, asegurando de sustituir la dirección IP del client:

      • sudo ufw allow from client_ip to any port nfs

      Puede verificar el cambio escribiendo lo siguiente:

      Debería ver el tráfico permitido desde el puerto 2049 en el resultado:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 2049 ALLOW 203.0.113.24 OpenSSH (v6) ALLOW Anywhere (v6)

      Esto confirma que UFW solo permitirá el tráfico NFS en el puerto 2049 desde nuestro equipo client.

      Paso 5: Crear puntos de montaje y directorios de montaje en el cliente

      Ahora que el servidor host se configura y presenta sus intercambios, prepararemos nuestro client.

      Para hacer que los intercambios remotos estén disponibles en el client, debemos montar los directorios en el host que queremos compartir para vaciar los directorios en el client.

      Nota: Si hay archivos y directorios en su punto de montaje, se ocultarán tan pronto como monte el intercambio NFS. Para evitar la pérdida de archivos importantes, asegúrese de que si monta en un directorio que ya existe que ese directorio esté vacío.

      Crearemos dos directorios para nuestros montajes:

      • sudo mkdir -p /nfs/general
      • sudo mkdir -p /nfs/home

      Ahora que tenemos una ubicación para poner los intercambios remotos y hemos abierto el firewall, podemos montar los intercambios usando la dirección IP de nuestro servidor host:

      • sudo mount host_ip:/var/nfs/general /nfs/general
      • sudo mount host_ip:/home /nfs/home

      Estos comandos montarán los intercambios desde el equipo host sobre el equipo client. Puede comprobar que se montan correctamente de varias formas. Puede comprobar esto con un comando mount o findmnt, pero df-h proporciona una resultado más legible:

      Output

      Filesystem Size Used Avail Use% Mounted on udev 474M 0 474M 0% /dev tmpfs 99M 936K 98M 1% /run /dev/vda1 25G 1.8G 23G 8% / tmpfs 491M 0 491M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup /dev/vda15 105M 3.9M 101M 4% /boot/efi tmpfs 99M 0 99M 0% /run/user/1000 10.132.212.247:/var/nfs/general 25G 1.8G 23G 8% /nfs/general 10.132.212.247:/home 25G 1.8G 23G 8% /nfs/home

      Ambos intercambios que montamos aparecen en la parte inferior. Debido a que se montaron a partir del mismo sistema de archivos, muestran el mismo uso de disco. Para ver cuánto espacio se está usando bajo cada punto de montaje, utilice el comando de uso del disco du y la ruta del montaje. El indicador -s proporciona un resumen de uso en vez de mostrar el uso de cada archivo. -h imprime un resultado legible por el ser humano.

      Por ejemplo:

      Output

      36K /nfs/home

      Esto nos muestra que el contenido de todo el directorio de inicio está usando solo 36k del espacio disponible.

      Paso 6: Probar el acceso NFS

      A continuación, vamos a acceder a los intercambios escribiendo algo a cada uno de ellos.

      Ejemplo 1: El intercambio de finalidad general

      Primero, escriba un archivo de prueba al intercambio /var/nfs/general:

      • sudo touch /nfs/general/general.test

      A continuación, compruebe su propiedad:

      • ls -l /nfs/general/general.test

      Output

      -rw-r--r-- 1 nobody nogroup 0 Aug 1 13:31 /nfs/general/general.test

      Debido a que montamos este volumen si cambiar el comportamiento predeterminado de NFS y creamos el archivo como el usuario root del equipo cliente a través del comando sudo, la propiedad del archivo cae a nobody:nogroup. Los súper usuarios del cliente no podrán realizar las acciones administrativas típicas, como cambiar el propietario de un archivo o crear un nuevo directorio para un grupo de usuarios en este intercambio montado en NFS.

      Ejemplo 2: El intercambio del directorio de inicio

      Para comparar los permisos del intercambio de finalidad general con el intercambio del directorio de inicio, cree un archivo en /nfs/home de la misma forma:

      • sudo touch /nfs/home/home.test

      A continuación observe la propiedad del archivo:

      • ls -l /nfs/home/home.test

      Output

      -rw-r--r-- 1 root root 0 Aug 1 13:32 /nfs/home/home.test

      Creamos home.test como root usando el comando sudo, exactamente de la misma forma en que creamos el archivo general.test. Sin embargo, en este caso es propiedad de root porque anulamos el comportamiento predeterminado cuando especificamos la opción no_root_squash en este montaje. Esto permite que nuestros usuarios root en el equipo cliente actúe como root y hace que la administración de las cuentas de usuario sea mucho más conveniente. Al mismo tiempo, significa que no tenemos que proporcionar a estos usuarios acceso root en el host.

      Paso 7: Montaje de los directorios NFS remotos en el arranque

      Podemos montar los intercambios NFS remotos automáticamente al arranque añadiéndolos al archivo /etc/fstab en el client.

      Abra este archivo con privilegios root en su editor de texto:

      En la parte inferior del archivo, añada una línea para cada uno de nuestros intercambios. Tendrán el siguiente aspecto:

      /etc/fstab

      . . .
      host_ip:/var/nfs/general    /nfs/general   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
      host_ip:/home               /nfs/home      nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
      
      

      Nota: Puede encontrar más información sobre las opciones que especificamos aquí en la página man de NFS. Puede acceder a esto ejecutando el siguiente comando:

      El client montará automáticamente las particiones remotas en el arranque, aunque puede tardar algo de tiempo en establecer la conexión y para que los intercambios estén disponibles.

      Paso 8: Desmontar un intercambio remoto NFS

      Si ya no desea que el directorio remoto se monte en su sistema, puede desmontarlo saliendo de la estructura del directorio del intercambio y desmontando, de esta forma:

      • cd ~
      • sudo umount /nfs/home
      • sudo umount /nfs/general

      Observe que el comando se llama umount no unmount como podría esperar.

      Esto eliminará los intercambios remotos, dejando solo su almacenamiento local accesible:

      Output

      Filesystem Size Used Avail Use% Mounted on udev 474M 0 474M 0% /dev tmpfs 99M 936K 98M 1% /run /dev/vda1 25G 1.8G 23G 8% / tmpfs 491M 0 491M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup /dev/vda15 105M 3.9M 101M 4% /boot/efi tmpfs 99M 0 99M 0% /run/user/1000

      Si también desea impedir que se vuelvan a montar en el siguiente reinicio, edite /etc/fstab y elimine la línea u omítala colocando un carácter # al principio de la línea. También puede evitar el montaje automático eliminado la opción auto, que le permitirá montarlo manualmente.

      Conclusión

      En este tutorial, creamos un host NFS e ilustramos algunos comportamientos NFS claves al crear dos montajes NFS diferentes, que compartimos con un cliente NFS.

      Si desea implementar NFS en producción, es importante observar que el protocolo no está cifrado. En los casos en que esté compartiendo sobre una red privada, esto puede no ser un problema. En otros casos, será necesaria una VPN o algún otro tipo de túnel cifrado para proteger sus datos.



      Source link

      Como configurar uma montagem NFS no Ubuntu 20.04


      Introdução

      NFS, ou Network File System, é um protocolo de sistema distribuído de arquivos que permite a montagem de diretórios remotos no seu servidor. Isso permite que você gerencie o espaço de armazenamento em um local diferente e grave nesse espaço a partir de vários clientes. O NFS fornece uma maneira relativamente padronizada e de bom desempenho para acessar sistemas remotos através de uma rede e funciona bem em situações onde os recursos compartilhados precisam ser acessados regularmente.

      Neste guia, vamos analisar como instalar os softwares necessários para a funcionalidade NFS no Ubuntu 20.04. Além disso, vamos configurar duas montagens NFS em um servidor e cliente, e montar e desmontar os compartilhamentos remotos.

      Pré-requisitos

      Usaremos dois servidores neste tutorial, com um deles compartilhando seu sistema de arquivos com o outro. Para acompanhar, você precisará de:

      • Dois servidores Ubuntu 20.04. Cada um deles deve possuir um usuário não root com privilégios sudo, um firewall configurado com o UFW e uma rede privada, se estiver disponível para você.

      Ao longo deste tutorial, chamaremos o servidor que compartilha seus diretórios de host e o servidor que monta esses diretórios de cliente. Você precisará saber o endereço IP de ambos. Certifique-se de usar o endereço de rede privado, se estiver disponível.

      Ao longo deste tutorial, vamos nos referir a esses endereços IP pelos seus espaços reservados host_ip e client_ip. Por favor, substitua-os conforme necessário.

      Passo 1 — Baixando e instalando os componentes

      Vamos começar instalando os componentes necessários em cada servidor.

      No host

      No servidor host, instale o pacote nfs-kernel-server, o qual permitirá que você compartilhe seus diretórios. Como esta é a primeira operação que você está executando com o apt nesta sessão, atualize seu índice de pacotes local antes da instalação:

      • sudo apt update
      • sudo apt install nfs-kernel-server

      Assim que esses pacotes estiverem instalados, vá para o servidor cliente.

      No cliente

      No servidor cliente, precisamos instalar um pacote chamado nfs-common, que proporciona funcionalidade NFS sem incluir nenhum componente de servidor. Novamente, atualize o índice de pacotes local antes da instalação para garantir que tenha informações atualizadas:

      • sudo apt update
      • sudo apt install nfs-common

      Agora que os dois servidores possuem os pacotes necessários, podemos começar a configurá-los.

      Passo 2 — Criando os diretórios de compartilhamento no host

      Vamos compartilhar dois diretórios separados, com diferentes configurações. Faremos isso para ilustrar duas maneiras importantes com as quais montagens NFS podem ser configuradas em relação ao acesso de superusuário.

      Os superusuários podem fazer qualquer coisa no sistema deles. No entanto, os diretórios montados via NFS não fazem parte do sistema no qual eles estão montados. Sendo assim, por padrão, o servidor NFS recusa a executar operações que requerem privilégios de superusuário. Esta restrição padrão significa que os superusuários no cliente não podem gravar arquivos como root, reatribuir a posse, ou executar quaisquer outras tarefas de superusuário na montagem NFS.

      Algumas vezes, no entanto, existem usuários confiáveis no sistema cliente que precisam realizar essas ações no sistema de arquivos montado, mas não precisam de acesso de superusuário no host. Você pode configurar o servidor NFS para que permita isso, embora essa ação introduza um elemento de risco, pois esse usuário poderia obter acesso root todo o sistema de host.

      Exemplo 1: exportando um montagem de uso geral

      No primeiro exemplo, criaremos uma montagem NFS de uso geral que usa o comportamento NFS padrão para dificultar a interação de um usuário com privilégios de root na máquina cliente com o host usando esses privilégios de superusuário do cliente. Você pode usar algo parecido para armazenar arquivos que foram armazenados usando um sistema de gerenciamento de conteúdo ou para criar espaço para os usuários compartilharem arquivos de projeto com facilidade.

      Primeiro, crie o diretório de compartilhamento:

      • sudo mkdir /var/nfs/general -p

      Como estamos criando-o com o sudo, o diretório é propriedade do usuário root do host:

      Output

      drwxr-xr-x 2 root root 4096 May 14 18:36 .

      O NFS traduzirá toda operação root no cliente para as credenciais nobody:nogroup como uma medida de segurança. Portanto, precisamos alterar a posse do diretório para que corresponda a essas credenciais.

      • sudo chown nobody:nogroup /var/nfs/general

      Agora, você está pronto para exportar este diretório.

      Exemplo 2: exportando o diretório home

      Em nosso segundo exemplo, o objetivo é tornar os diretórios home armazenados no host disponíveis nos servidores cliente, ao mesmo tempo em que permite administradores confiáveis desses servidores cliente o acesso que eles precisam para gerenciar os usuários de maneira conveniente.

      Para fazer isso, vamos exportar o diretório /home. Como ele já existe, não precisamos criá-lo. Também não vamos alterar as permissões. Se tivéssemos feito isso, uma variedade de problemas poderia ocorrer para qualquer um com um diretório home na máquina de host.

      Passo 3 — Configurando as exportações NFS no servidor host

      Em seguida, vamos nos aprofundar no arquivo de configuração do NFS para configurar o compartilhamento desses recursos.

      Na máquina host, abra o arquivo /etc/exports em seu editor de texto com privilégios root:

      O arquivo possui comentários mostrando a estrutura geral de cada linha de configuração. A sintaxe é a seguinte:

      /etc/exports

      directory_to_share    client(share_option1,...,share_optionN)
      

      Vamos precisar criar uma linha para cada um dos diretórios que planejamos compartilhar. Certifique-se de trocar o espaço reservado client_ip mostrado pelo seu endereço IP:

      /etc/exports

      /var/nfs/general    client_ip(rw,sync,no_subtree_check)
      /home               client_ip(rw,sync,no_root_squash,no_subtree_check)
      

      Aqui, estamos usando as mesmas opções de configuração para ambos os diretórios, exceto a no_root_squash. Vamos dar uma olhada no que cada uma dessas opções significa:

      • rw: essa opção fornece ao computador do cliente tanto o acesso à leitura quanto gravação no volume.
      • sync: essa opção obriga o NFS a gravar alterações no disco antes de responder. Isso resulta em um ambiente mais estável e consistente, uma vez que a resposta reflete o estado real do volume remoto. No entanto, isso também reduz a velocidade das operações de arquivos.
      • no_subtree_check: essa opção impede a verificação de subárvore, que é um processo onde o host deve verificar se o arquivo está de fato disponível na árvore exportada para cada pedido. Isso pode causar muitos problemas quando um arquivo é renomeado enquanto o cliente tem ele aberto. Em quase todos os casos, é melhor desativar a verificação de subárvore.
      • no_root_squash: por padrão, o NFS traduz as solicitações de um usuário root remotamente como um usuário sem privilégios no servidor. Isso foi usado como medida de segurança para evitar que uma conta root no cliente utilize o sistema de arquivos do host como root. A opção no_root_squash desativa esse comportamento para certos compartilhamentos.

      Quando terminar de fazer suas alterações, salve e feche o arquivo. Em seguida, para tornar os compartilhamentos disponíveis nos clientes que você configurou, reinicie o servidor NFS com o seguinte comando:

      • sudo systemctl restart nfs-kernel-server

      Antes de usar os novos compartilhamentos, no entanto, você precisará garantir que o tráfego neles seja permitido pelas regras de firewall.

      Passo 4 — Ajustando o firewall no host

      Primeiro, vamos verificar o status do firewall para ver se ele está habilitado e, caso esteja, para ver o que está atualmente sendo permitido:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)

      Em nosso sistema, apenas o tráfego SSH está sendo permitido. Dessa forma, precisaremos adicionar uma regra para o tráfego NFS.

      Para muitos aplicativos, é possível utilizar sudo ufw app list para habilitá-los pelo nome, mas o nfs não é um desses casos. No entanto, como o ufw também verifica o /etc/services para a porta e o protocolo de um serviço, ainda podemos adicionar o NFS pelo nome. É recomendado que você habilite a regra mais restritiva que ainda permitirá o tráfego que deseja. Dessa forma, ao invés de habilitar o tráfego vindo de qualquer lugar, seremos específicos.

      Use o seguinte comando para abrir a porta 2049 no host, certificando-se de colocar seu endereço IP do cliente:

      • sudo ufw allow from client_ip to any port nfs

      Você pode verificar a mudança digitando:

      Você deve ver que o tráfego está sendo permitido da porta 2049 no resultado:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 2049 ALLOW 203.0.113.24 OpenSSH (v6) ALLOW Anywhere (v6)

      Isso confirma que o UFW permitirá apenas o tráfego NFS na porta 2049 a partir da nossa máquina cliente.

      Passo 5 — Criando os pontos de montagem e montando diretórios no cliente

      Agora que o servidor host está configurado e está servindo seus compartilhamentos, vamos preparar nosso cliente.

      Para tornar os compartilhamentos remotos disponíveis no cliente, precisamos montar os diretórios que queremos compartilhar no host em diretórios vazios no cliente.

      Nota: se houver arquivos e diretórios em seu ponto de montagem, eles se tornarão ocultos assim que você montar o compartilhamento NFS. Para evitar a perda de arquivos importantes, certifique-se de que o diretório esteja vazio, caso esteja montando em um diretório que já exista.

      Criaremos dois diretórios para nossas montagens:

      • sudo mkdir -p /nfs/general
      • sudo mkdir -p /nfs/home

      Agora que temos um local para colocar os compartilhamentos remotos e que abrimos o firewall, podemos montar os compartilhamentos usando o endereço IP do nosso servidor host:

      • sudo mount host_ip:/var/nfs/general /nfs/general
      • sudo mount host_ip:/home /nfs/home

      Esses comandos montarão os compartilhamentos do computador host na máquina cliente. Você pode verificar novamente se eles foram montados com sucesso de diversas maneiras. Faça isso com um comando mount ou findmnt, mas o df -h fornece um resultado mais legível:

      Output

      Filesystem Size Used Avail Use% Mounted on udev 474M 0 474M 0% /dev tmpfs 99M 936K 98M 1% /run /dev/vda1 25G 1.8G 23G 8% / tmpfs 491M 0 491M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup /dev/vda15 105M 3.9M 101M 4% /boot/efi tmpfs 99M 0 99M 0% /run/user/1000 10.132.212.247:/var/nfs/general 25G 1.8G 23G 8% /nfs/general 10.132.212.247:/home 25G 1.8G 23G 8% /nfs/home

      Ambos os compartilhamentos que montamos aparecem no final. Como eles foram montados do mesmo sistema de arquivos, eles exibem o mesmo uso de disco. Para ver quanto espaço está sendo efetivamente usado em cada ponto de montagem, utilize o comando de uso de disco du e o caminho da montagem. O sinalizador -s fornece um resumo de uso em vez de exibir o uso para cada arquivo. O -h imprime um resultado que pode ser lido por um humano.

      Por exemplo:

      Output

      36K /nfs/home

      Isso nos mostra que todo o conteúdo do diretório home está usando apenas 36K do espaço disponível.

      Passo 6 — Testando o acesso NFS

      Em seguida, vamos testar o acesso aos compartilhamentos, gravando algo em cada um deles.

      Exemplo 1: o compartilhamento de uso geral

      Primeiro, escreva um arquivo de teste no compartilhamento /var/nfs/general:

      • sudo touch /nfs/general/general.test

      Em seguida, verifique quem tem sua posse:

      • ls -l /nfs/general/general.test

      Output

      -rw-r--r-- 1 nobody nogroup 0 Aug 1 13:31 /nfs/general/general.test

      Como montamos esse volume sem alterar o comportamento padrão do NFS e criamos o arquivo como o usuário root da máquina cliente pelo comando sudo, o proprietário padrão do arquivo fica o nobody:nogroup. Os superusuários do cliente não poderão realizar ações administrativas típicas, como a alteração do proprietário de um arquivo ou a criação de um novo diretório para um grupo de usuários, neste compartilhamento montado em NFS.

      Exemplo 2: o compartilhamento de diretórios home

      Para comparar as permissões do exemplo de uso geral com o compartilhamento de diretórios home, crie um arquivo em /nfs/home da mesma forma:

      • sudo touch /nfs/home/home.test

      Em seguida, confira quem é o proprietário do arquivo:

      • ls -l /nfs/home/home.test

      Output

      -rw-r--r-- 1 root root 0 Aug 1 13:32 /nfs/home/home.test

      Criamos o home.test como root usando o comando sudo, exatamente da mesma forma que criamos o arquivo general.test. No entanto, neste caso, ele é propriedade de root. Isso acontece pois sobrescrevemos o comportamento padrão quando especificamos a opção no_root_squash nesta montagem. Isso permite que nossos usuários root na máquina cliente ajam como root, tornando o gerenciamento de contas de usuário muito mais conveniente. Ao mesmo tempo, isso significa que não precisamos dar acesso de root a esses usuários no host.

      Passo 7 — Montando os diretórios remotos do NFS durante a inicialização do sistema

      Podemos montar os compartilhamentos NFS remotos automaticamente na inicialização adicionando-os ao /etc/fstab no cliente.

      Abra este arquivo com privilégios root em seu editor de texto:

      No final do arquivo, adicione uma linha para cada um de nossos compartilhamentos. Elas se parecerão com isto:

      /etc/fstab

      . . .
      host_ip:/var/nfs/general    /nfs/general   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
      host_ip:/home               /nfs/home      nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
      
      

      Nota: você pode encontrar mais informações sobre as opções que estamos especificando aqui na página man do NFS. Você pode acessá-la executando o seguinte comando:

      O cliente irá montar automaticamente as partições remotas na inicialização do sistema, embora possa levar algum tempo para estabelecer a conexão e para que os compartilhamentos fiquem disponíveis.

      Passo 8 — Desmontando um compartilhamento NFS remoto

      Se não quiser mais que o diretório remoto esteja montado em seu sistema, você pode desmontá-lo saindo da estrutura de diretórios do compartilhamento e desmontando, desta forma:

      • cd ~
      • sudo umount /nfs/home
      • sudo umount /nfs/general

      Observe que o comando é chamado de umount não unmount, como é o esperado.

      Isso removerá os compartilhamentos remotos, deixando acessível apenas seu armazenamento local:

      Output

      Filesystem Size Used Avail Use% Mounted on udev 474M 0 474M 0% /dev tmpfs 99M 936K 98M 1% /run /dev/vda1 25G 1.8G 23G 8% / tmpfs 491M 0 491M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup /dev/vda15 105M 3.9M 101M 4% /boot/efi tmpfs 99M 0 99M 0% /run/user/1000

      Se também quiser evitar que eles sejam remontados na próxima reinicialização do sistema, edite o /etc/fstab e, em seguida, exclua a linha ou transforme-a em comentário colocando um caractere # no início da linha. Você também pode evitar a montagem automática removendo a opção auto, que permitirá que você ainda a monte tudo manualmente.

      Conclusão

      Neste tutorial, criamos um host NFS e demonstramos alguns comportamentos NFS importantes. Fizemos isso criando duas montagens NFS diferentes, que compartilhamos com um cliente NFS.

      Se você quiser implementar o NFS na produção, é importante observar que o protocolo em si não é criptografado. Em casos onde você está compartilhando de uma rede privada, isso pode não ser um problema. Em outros casos, uma VPN ou algum outro tipo de túnel criptografado será necessário para proteger seus dados.



      Source link

      Cómo configurar Jupyter Notebook con Python 3 en Ubuntu 20.04 y conectar a través de los túneles SSH


      Introducción

      Jupyter Notebook es una aplicación web de código abierto que le permite crear y compartir código interactivo, visualizaciones y mucho más. Esta herramienta puede utilizarse con varios lenguajes de programación, como Python, Julia, R, Haskell y Ruby. A menudo se utiliza para trabajar con datos, modelos estadísticos, y aprendizaje automático.

      Jupyter Notebooks (o simplemente “Notebooks”) es un conjunto de documentos producidos por la aplicación Jupyter Notebook, la cual contiene tanto elementos de código informático como de texto enriquecido (párrafos, ecuaciones, cifras y enlaces, entre otros) que ayudan a presentar y compartir la investigación que puede reproducirse. Por tanto, puede ser una herramienta excelente para las presentaciones basadas en datos o basadas en programación, o como herramienta de enseñanza.

      Este tutorial mostrará cómo configurar Jupyter Notebook para que se ejecute desde un servidor Ubuntu 20.04, y demostrará cómo conectar y usar Notebook desde un equipo local a través de la tunelación. Al final de esta guía, podrá ejecutar código de Python 3 usando un Jupyter Notebook en ejecución en un servidor remoto.

      Requisitos previos

      Para completar esta guía, debe disponer de una instancia de servidor de Ubuntu 20.04 nueva con un firewall básico y un usuario no root con privilegios sudo configurados. Puede aprender a configurar esto en nuestro tutorial de configuración inicial para servidores.

      Paso 1: Configurar Python

      Para iniciar el proceso, instalaremos las dependencias que necesitamos para nuestro entorno de programación de Python desde los repositorios de Ubuntu. Ubuntu 20.04 viene preinstalado con Python 3. Usaremos el pip del administrador de paquetes de Python para instalar componentes adicionales un poco más tarde.

      Necesitaremos primero actualizar el índice de paquetes local apt y luego descargaremos e instalaremos los paquetes:

      A continuación, instale pip y los archivos de encabezado de Python, utilizados por algunas dependencias de Jupyter:

      • sudo apt install python3-pip python3-dev

      Ahora podemos proceder a configurar un entorno virtual de Python en el que instalaremos Jupyter.

      Paso 2: Crear un entorno virtual de Python para Jupyter

      Ahora Python 3, sus archivos de encabezado y pip están listos para comenzar, podemos crear un entorno virtual de Python para administrar nuestros proyectos. Instalaremos Jupyter en este entorno virtual.

      Para ello, primero necesitaremos acceso al comando virtualenv, que podemos instalar con pip.

      Actualice pip e instale el paquete escribiendo lo siguiente:

      • sudo -H pip3 install --upgrade pip
      • sudo -H pip3 install virtualenv

      El indicador -H garantiza que la política de seguridad defina la variable de entorno home como el directorio de inicio del usuario de destino.

      Con virtualenv ya instalado, podemos comenzar a crear nuestro entorno. Cree un directorio en el que podamos guardar los archivos de nuestro proyecto y posiciónese en él: Daremos a este directorio el nombre my_project_dir, pero deberá usar un nombre que sea significativo para usted y para el trabajo que está desarrolle.

      • mkdir ~/my_project_dir
      • cd ~/my_project_dir

      En el directorio del proyecto, crearemos un entorno virtual de Python. A los efectos de este tutorial, le daremos el nombre my_project_env, pero debería asignarle uno que se relacione con su proyecto.

      • virtualenv my_project_env

      Con esto, se creará un directorio llamado my_project_env dentro de su directorio my_project_dir. Dentro de este, se instalarán una versión local de Python y una versión local de pip. Podemos usar esto para instalar y configurar un entorno aislado de Python para Jupyter.

      Antes de instalar Jupyter, debemos activar el entorno virtual. Puede hacerlo escribiendo lo siguiente:

      • source my_project_env/bin/activate

      Su línea de comandos cambiará para indicar que ahora realizará operaciones en un entorno virtual de Python. Su línea de comandos ahora leerá algo como esto: (my_project_env)user@host:~/my_project_dir$.

      En este momento, está listo para instalar Jupyter en este entorno virtual.

      Paso 3: Instalar Jupyter

      Una vez activado su entorno virtual, instale Jupyter con la instancia local de pip.

      Nota: Cuando se active el entorno virtual (cuando (my_project_env) se encuentre al inicio de su línea de comandos), use pip en lugar de pip3, incluso si emplea Python 3. La copia del entorno virtual de la herramienta siempre se llama pip, independientemente de la versión de Python.

      En este punto, habrá instalado con éxito todo el software necesario para ejecutar Jupyter. Ahora podremos iniciar el servidor de Notebook.

      Paso 4: Ejecutar Jupyter Notebook

      Ya dispone de todo lo que necesita para ejecutar Jupyter Notebook. Para ejecutarlo, introduzca el siguiente comando:

      Se mostrará un registro de las actividades de Jupyter Notebook en el terminal. Cuando se ejecuta Jupyter Notebook, este funciona en un número de puerto específico. Normalmente, el primer notebook que ejecute usará el puerto 8888. Para verificar el número de puerto específico en el que se ejecuta Jupyter Notebook, consulte el resultado del comando utilizado para iniciarlo:

      Output

      [I 21:23:21.198 NotebookApp] Writing notebook server cookie secret to /run/user/1001/jupyter/notebook_cookie_secret [I 21:23:21.361 NotebookApp] Serving notebooks from local directory: /home/sammy/my_project_dir [I 21:23:21.361 NotebookApp] The Jupyter Notebook is running at: [I 21:23:21.361 NotebookApp] http://localhost:8888/?token=1fefa6ab49a498a3f37c959404f7baf16b9a2eda3eaa6d72 [I 21:23:21.361 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [W 21:23:21.361 NotebookApp] No web browser found: could not locate runnable browser. [C 21:23:21.361 NotebookApp] Copy/paste this URL into your browser when you connect for the first time, to login with a token: http://localhost:8888/?token=1fefa6ab49a498a3f37c959404f7baf16b9a2eda3eaa6d72

      Si ejecuta Jupyter Notebook en una computadora local (no en un servidor), puede dirigirse a la URL que se muestra para conectarse a Jupyter Notebook. Si ejecuta Jupyter Notebook en un servidor, deberá establecer conexión con este usando túneles SSH como se indica en la siguiente sección.

      En este punto, podrá mantener la conexión SSH abierta y Jupyter Notebook en ejecución, o bien cerrar la aplicación y volver a ejecutarla una vez que configure los túneles SSH. Optaremos por detener el proceso de Jupyter Notebook. Lo ejecutaremos de nuevo una vez que configuremos los túneles SSH. Para detener el proceso de Jupyter Notebook, presione CTRL+C, escriba Y y luego presione ENTER para confirmar. Se mostrará el siguiente resultado:

      Output

      [C 21:28:28.512 NotebookApp] Shutdown confirmed [I 21:28:28.512 NotebookApp] Shutting down 0 kernels

      A continuación, configuraremos un túnel SSH para poder acceder al Notebook.

      Paso 5: Establecer conexión con el servidor usando túneles SSH

      En esta sección, mostraremos cómo establecer una conexión con la interfaz web de Jupyter Notebook usando túneles SSH. Debido a que Jupyter Notebook se ejecutará en un puerto específico en el servidor (como el :8888 y el :8889, entre otros), los túneles SSH le permiten establecer conexión con el puerto del servidor de forma segura.

      En los dos apartados siguientes, se describe la forma de crear un túnel SSH desde 1) un Mac o Linux y 2) Windows. Consulte el apartado que corresponda a su computadora local.

      Túeneles SSH con una Mac o Linux

      Si está usando un equipo local Mac o Linux, los pasos para crear el túnel SSH son similares a usar SSH para iniciar sesión en su servidor remoto, excepto que hay parámetros adicionales en el comando ssh. En este apartado, se describirán los parámetros adicionales necesarios en el comando ssh para implementar un túnel con éxito.

      Esta implementación es posible ejecutando el siguiente comando SSH en una nueva ventana del terminal local:

      • ssh -L 8888:localhost:8888 your_server_username@your_server_ip

      El comando ssh abre una conexión SSH, pero -L especifica que se debe reenviar el puerto determinado en el host local (cliente) al host y puerto determinados en el lado remoto (servidor). Esto significa que todo lo que está en ejecución en el segundo número de puerto (por ejemplo 8888) en el servidor aparecerá en el primer número de puerto (por ejemplo 8888) en su computadora local.

      Cambie de forma opcional el puerto 8888 por uno que elija para evitar usar un puerto ya utilizado por otro proceso.

      server_username es su nombre de usuario (por ejemplo sammy) en el servidor que creó y your_server_ip es la dirección IP de su servidor.

      Por ejemplo, para el nombre de usuario sammy y la dirección del servidor 203.0.113.0, el comando sería el siguiente:

      • ssh -L 8888:localhost:8888 sammy@203.0.113.0

      Si no se produce ningún error después de ejecutar el comando ssh -L, podrá desplazarse a su entorno de programación y ejecutar Jupyter Notebook:

      Verá un resultado con una URL. Desde un navegador web en su máquina local, abra la interfaz web de Jupyter Notebook con la URL que comienza con http://localhost:8888. Asegúrese de que el número de token esté incluido o ingrese la cadena de número de token cuando se solicite en http://localhost:8888.

      Túneles SSH con Windows y Putty

      Si usa Windows, puede crear un túnel SSH usando Putty.

      Primero, ingrese la dirección URL o IP del servidor como el nombre de host, como se muestra:

      Establecer el nombre de host para el túnel SSH

      A continuación, haga clic en SSH en la parte inferior del panel izquierdo, para expandir el menú, y luego en Tunnels. Introduzca el número del puerto local que quiera usar para acceder a Jupyter en su máquina local. Seleccione 8000, o un número mayor, para evitar los puertos utilizados por otros servicios y fije el destino en localhost:8888, donde :8888 sea el número del puerto en el que se ejecute Jupyter Notebook.

      Luego, haga clic en el botón Add. Deberían aparecer los puertos en la lista de Forwarded ports:

      Lista de Forwarded ports

      Por último, haga clic en el botón Open para establecer conexión con el servidor a través de SSH y crear un túnel entre los puertos deseados. Diríjase a http://localhost:8000 (o cualquier puerto que haya elegido) en un navegador web para conectarse al Jupyter Notebook que funciona en el servidor. Asegúrese de que el número de token esté incluido, o ingrese la cadena de número de token cuando se solicite en http://localhost:8000.

      Paso 6: Usar Jupyter Notebook

      Esta sección repasa el uso básico de Jupyter Notebook. Si Jupyter Notebook aún no está en ejecución, inícielo con el comando jupyter notebook.

      Con esto, debería establecer conexión con este usando un navegador web. Jupyter Notebook es una herramienta muy poderosa que dispone de muchas características. En esta sección se mostrarán algunas de las características básicas para que comience a usar Notebook. Jupyter Notebook mostrará todos los archivos y las carpetas en el directorio desde el que se ejecuta. Por ello, cuando trabaje en un proyecto asegúrese de iniciarlo desde el directorio del proyecto.

      Para crear un nuevo archivo de Notebook, seleccione New > Python 3 en el menú desplegable que se encuentra en la parte superior derecha:

      Crear un nuevo notebook de Python 3

      Con esto se abrirá un Notebook. Ahora podemos ejecutar el código de Python en la celda o cambiar la celda a lenguaje de marcado. Por ejemplo, cambie la primera celda para aceptar el lenguaje de marcado haciendo clic en Cell > Cell Type > Markdown en la barra de navegación de la parte superior. Con esto, podremos escribir notas usando el lenguaje de marcado e incluso incluir ecuaciones escritas en LaTeX disponiéndolas entre los símbolos de $$. Por ejemplo, escriba lo siguiente en la celda después del cambio a lenguaje de marcado:

      # First Equation
      
      Let us now implement the following equation:
      $$ y = x^2$$
      
      where $x = 2$
      

      Para convertir el marcado en texto con formato, pulse las teclas CTRL y ENTER. Debería obtener un resultado similar al siguiente:

      Resultados de lenguaje de marcado

      Puede utilizar las celdas de lenguaje de marcado para crear notas y documentar su código. Implementaremos esa ecuación e imprimiremos el resultado. Haga clic en la celda superior, luego pulse las teclas ALT y ENTER juntas para añadir una celda debajo. Introduzca el siguiente código en la nueva celda.

      x = 2
      y = x**2
      print(y)
      

      Para ejecutar el código, presione CTRL+ENTER. Obtendrá los siguientes resultados:

      Resultado de la primera ecuación

      Ahora podrá importar módulos y usar el Notebook como lo haría con cualquier otro entorno de desarrollo de Python.

      Conclusión

      ¡Felicitaciones! Ahora debería poder escribir código y notas de Python que puedan reproducirse en lenguaje de marcado usando Jupyter Notebook. Si desea acceder a una visita rápida de Jupyter Notebook desde la interfaz, seleccione Help > User Interface Tour en el menú de navegación superior para obtener más información.

      A partir de aquí, puede iniciar un proyecto de análisis y visualización de datos leyendo Análisis y visualización de datos con pandas y Jupyter Notebook en Python 3.



      Source link