Cómo crear un usuario FTP con acceso / dir / específico solo en una instalación de Centos / linux

44

Así que estoy en una instalación VPS - CentOS Linux. Tengo vsFTPd en el servidor. Actualmente tengo acceso SFTP al servidor a través de mi usuario root, pero ahora estoy tratando de crear un nuevo usuario con acceso FTP a un directorio específico solo en el servidor, he hecho lo siguiente:

1. mkdir /var/www/mydomain.com
2. mkdir /var/www/mydomain.com/html
3. useradd <-username>
4. passwd <-username>
5. chown –R <-username> /var/www/mydomain.com
5. groupadd <-groupname>
6. gpasswd -a <-username> <-groupname>
7. chgrp -R <-groupname> /var/www/mydomain.com
8. chmod -R g+rw /var/www/mydomain.com

Lo que me cuesta hacer es crear el usuario para que SOLO tenga acceso /var/www/mydomain.com . Observé que el usuario inicia sesión correctamente en la carpeta correcta, sin embargo, el usuario puede navegar "hacia atrás" a otros directorios. Quiero que el usuario se pegue en la carpeta específica y no pueda "navegar" hacia atrás .

¿Algunas ideas?

He encontrado diferentes artículos sobre chrooting, pero simplemente no lo he descubierto para usarlo en los pasos incluidos anteriormente.

usuario1231561
fuente
digitalocean.com/community/tutorials/… Puede seguir esto para resolver su problema
Jack
para aquellos que están en Ubuntu 18 aquí está la versión específica digitalocean.com/community/tutorials/…
Dung

Respuestas:

39

Es bastante simple.

Debe agregar la siguiente opción en el archivo vsftpd.conf

chroot_local_user=YES

La documentación dentro del archivo de configuración se explica por sí misma:

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().

Esto significa que el usuario solo tendrá acceso a la carpeta que configuró como INICIO del usuario. A continuación, tengo un ejemplo de una entrada de usuario passwd:

upload_ftp:x:1001:1001::/var/www/sites/:/bin/bash

Establezca el directorio de inicio del usuario con el siguiente comando

usermod -d /var/www/my.domain.example/ exampleuser

Nota: en mi ejemplo, este usuario también es un usuario válido para algunas tareas programadas dentro de Linux. Si no tiene esta necesidad, cambie el shell del usuario a en /sbin/nologinlugar de bash.

Jeff Schaller
fuente
Hola nwildner! Muchas gracias por tomarse el tiempo para responderme sobre esto. Entonces, en mi archivo vsftpd.conf, he agregado la siguiente línea "chroot_local_user = YES". Entonces, según tengo entendido, ¿debo agregar una línea similar a la que le muestra a mi usuario? Debo admitir que no estoy completamente seguro de qué escribir allí con el ejemplo que proporcione. el "1001", etc., ¿qué es eso? Supongamos que mi usuario se llama: "im_a_linux_noob" y el directorio para ese usuario es: "/var/www/mydomain.com". ¿Cómo se vería?
user1231561
¿Y podría hacerlo sin ningún paso adicional de lo que he hecho en mi publicación? Entonces, ¿hacer 1-8 y luego agregar lo que describe debería ser el truco?
user1231561
Hola. El ejemplo anterior es solo una línea (modificada, por supuesto) del /etc/passwdarchivo, que representa a un usuario llamado upload_ftp, 1001: 1001 es su ID de usuario e ID de grupo, / var / www / sites es el directorio de inicio del usuario (y el parámetro que lee vsftpd) y / bin / bash, el shell. Probablemente lo que falta en su caso es un directorio inicial para el usuario, y que podría ser resuelto con el siguiente comando: usermod -d /var/www/mydomain.com <username>. Saludos :)
3
Sí, muchas gracias. Sin embargo, un problema. Funciona bien al iniciar sesión a través de FTP normal, sin embargo, cuando inicio sesión como SFTP, puedo volver a navegar, ¿alguna idea?
user1231561
1
Ciertamente porque sftp está siendo manejado por su servidor ssh, no por su servidor ftp. De una manera "cruda": SFTP = SSH + FTP; FTPS = FTP + SSL. Aquí hay un hilo sobre sftp, y lo citaré para la duplicación de temas de aviod, ¿de acuerdo? ;) unix.stackexchange.com/a/64541/34720
6

Después de que haya cambiado su configuración para incluir chroot_local_user=YES

Puede cambiar el shell del usuario /usr/sbin/nologinpara que, si la contraseña se pierde, haya mitigado algunos riesgos (configure también el directorio de inicio). El shell también debe figurar en la lista /etc/shellso la autenticación fallará.

usermod -d /var/www/my.domain.example -s / usr / sbin / nologin exampleuser

-d, --home HOME_DIR El nuevo directorio de inicio de sesión del usuario. Si se da la opción -m, el contenido del directorio de inicio actual se moverá al nuevo directorio de inicio, que se crea si aún no existe.

-s, --shell SHELL El nombre del nuevo shell de inicio de sesión del usuario. Establecer este campo en blanco hace que el sistema seleccione el shell de inicio de sesión predeterminado.

https://security.appspot.com/vsftpd/FAQ.txt

Cambiaformas
fuente
4

Estos son los pasos para configurar un usuario y permitir el acceso del usuario solo a través de FTP (es decir, sin SSH) y también limitar el acceso a un directorio específico (inicio del usuario) en proftpd :

  1. Añadir nuevo usuario: adduser newusername

  2. Configurar la clave: passwd newusername

  3. Modifique el directorio de inicio del usuario de forma predeterminada a una nueva carpeta:

    usermod -d /target/directory username

  4. Editar shellsarchivo: vi /etc/shellsy agregar /dev/nullal final

  5. Modifique la newusernameentrada en el passwdarchivo: vi /etc/passwdpara agregar /./antes de newusernameque la entrada se vea así:

    newusername:x:502:502::/home/ftp/./newusernamehomedirectory/:/dev/null

    Detalles para los pasos 4 y 5 aquí:

  6. Editar /etc/proftpd/proftpd.confarchivo y descomentar la líneaDefaultRoot ~

pTeJa
fuente
-4

Establezca los permisos de la carpeta raíz en 711 con su cuenta raíz.

Leping Zou
fuente
-4

Ejecute este comando:

useradd -d ftp_user:chown 711 /etc/init.d/
Lunix Pro
fuente
2
Debería considerar expandir su publicación para tener, al menos, alguna explicación o documentación útil.
HalosGhost
Esta es una respuesta horrible. Básicamente, le está dando al usuario ftp acceso completo al directorio /etc/init.d/, una locura total. 711 explicado - permissions-calculator.org/decode/0711
Tisch