Te damos la bienvenida a proyecto online, en este lugar hallarás la resolución a lo que necesitas.
Solución:
Con un poco de juego, me las arreglé para encontrar una solución semi (no perfecta, pero lo suficientemente buena)
usando 2707974 la respuesta y la información que obtuve en otros lugares donde he podido obtener lo que necesito.
Primero necesita vsftp y PAM instalados
apt-get install vsftpd libpam-pwdfile
Edite /etc/vsftpd.conf
nano /etc/vsftpd.conf
luego pega lo siguiente
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
local_root=/var/www
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES
#virutal user settings
user_config_dir=/etc/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd
Edite según sus necesidades exactas, lo más importante para los usuarios virtuales es todo después del comentario de la configuración del usuario virtual
Crear usuario
Puede utilizar una base de datos o htpasswd
encontré htpasswd
más rápido y más fácil de usar.
hacer un directorio para almacenar sus usuarios
mkdir /etc/vsftpd
htpasswd -cd /etc/vsftpd/ftpd.passwd user1
agregar usuarios adicionales simplemente omita el -c
htpasswd -d /etc/vsftpd/ftpd.passwd user2
Solo logré que funcione usando CRYPT, que se limita a 8 caracterespara usar más de 8 caracteres, use openssl para generar un hash compatible y canalice directamente a htpasswd
htpasswd -c -p -b /etc/vsftpd/ftpd.passwd user1 $(openssl passwd -1 -noverify password)
Una vez que haya creado sus usuarios, ahora puede cambiar su archivo de configuración PAM
nano /etc/pam.d/vsftpd
y elimine todo dentro de este archivo y reemplácelo con lo siguiente
auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
Esto permitirá el inicio de sesión para sus usuarios virtuales definidos en /etc/vsftpd/ftpd.passwd
y deshabilitará a los usuarios locales
A continuación, debemos agregar un usuario para que lo utilicen estos usuarios virtuales. Estos usuarios no tendrán acceso al shell y serán llamados vsftpd
useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
el usuario debe coincidir guest_username=vsftpd
en el archivo conf vsftpd
Definición del acceso al directorio
La línea importante aquí es la siguiente
user_config_dir=/etc/vsftpd_user_conf
esto significa que cuando user1
inicia sesión buscará el siguiente archivo
/etc/vsftpd_user_conf/user1
este archivo es el mismo que el vsftpd.conf
para que puedas definir una nueva local_root
volviendo a la pregunta que queremos user1
solo tener acceso a var/www/website_name1/sub_folder1
, entonces necesitamos crear el vsftpd_user_conf
carpeta:
mkdir /etc/vsftpd_user_conf
Ahora crea el archivo de usuario:
nano /etc/vsftpd_user_conf/user1
e ingrese la siguiente línea
local_root=/var/www/website_name1/sub_folder1
Ahora reinicie vsftp
service vsftpd restart
ahora debería poder iniciar sesión como usuario1, que solo podrá ver
var/www/website_name1/sub_folder1
y cualquier carpeta y archivo que contenga.
Eso es todo, ahora puede agregar tantos usuarios como desee y limitar su acceso a cualquier carpeta que desee.
Es importante recordar que si no crea un archivo de configuración de usuario, se establecerá de forma predeterminada en la carpeta var / www como raíz (en el ejemplo anterior).
Si la subcarpeta está destinada a ser modificada por el usuario, puede ser necesario cambiar el propietario de la subcarpeta compartida:
chown vsftpd:nogroup /var/www/website_name1/sub_folder1
Pruebe con este manual. Quizás funcione para ti.
Cómo hacerlo
Instale vsftpd y una biblioteca PAM
Editar /etc/vsftpd.conf
y /etc/pam.d/vsftpd
Cree cuentas de usuario con directorios personalizados (en / var / www / por ejemplo)
Establecer directorios con la correcta chmod
y chown
Cree un usuario administrador con acceso completo al servidor
- Instalar en pc
vsftpd
(Deamon FTP muy seguro) ylibpam-pwdfile
para crear usuarios virtuales
Quería crear usuarios de FTP, pero no quería agregar usuarios locales de Unix (sin acceso al shell, sin directorio de inicio, etc.). Un PAM (módulos de autenticación conectables) le ayudará a crear usuarios virtuales.
sudo apt-get install vsftpd libpam-pwdfile
- Editar
vsftpd.conf
Primero necesita hacer una copia de seguridad del archivo original
sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak
Entonces crea uno nuevo
sudo vim /etc/vsftpd.conf
Copia y pega las siguientes líneas. El archivo SOLO debe contener estas líneas:
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd
- Registrar usuarios virtuales
Para registrar un usuario que usa htpasswd
, así que supongo que tienes apache2
trabajando en su servidor. Crear un vsftpd
carpeta y luego coloque los archivos de configuración en ella.
sudo mkdir /etc/vsftpd
luego
sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1
-c significa que crearemos el archivo si aún no existe -d fuerza MD5, lo necesita en ubuntu 12.04, solo úselo siempre
El comando le pedirá una contraseña.
Si desea agregar nuevos usuarios posteriormente:
sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2
- Configurar PAM en
/etc/pam.d/vsftpd
Nuevamente, necesita hacer una copia de seguridad del archivo original
sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
y crea uno nuevo
sudo vim /etc/pam.d/vsftpd
Copie y pegue estas 2 líneas (este debería ser el único contenido). Insisto solo en estas 2 líneas, perdí mucho tiempo guardando los originales y solo agregué estos.
auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
- Crea un usuario local sin acceso al shell
sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
Puede verificar que se haya creado con el comando id: id vsftpd. Definimos al usuario con el / bin /false shell debido al parámetro check_shell (incluso si no lo usa). Cuando el usuario final se conecta al servidor FTP, se utilizarán para derechos y propiedad:
chmod
y chown
.
- Reiniciar
vsftpd
La forma común es usar init.d como todos los demonios
sudo /etc/init.d/vsftpd restart
sudo service vsftpd restart
- Crea directorios
Según la configuración, todos los usuarios se colocarán en esta carpeta: / var / www / user1.
Debe crearlos con derechos particulares: ¡la carpeta raíz no se puede escribir!
/ [root = /var/www/user1] => 555
www [ /var/www/user1/www ] => 755
docs [ /var/www/user1/docs ] => 755
Nota: el usuario no puede crear archivos o carpetas en el directorio raíz.
En vsftpd.conf
tenemos chroot_local_user=YES
por lo que el usuario no puede ver nada fuera de su carpeta. Para él, el servidor se ve así:
Así que simplemente ejecute estos comandos:
mkdir /var/www/user1`
chmod -w /var/www/user1
mkdir www/user1/www
chmod -R 755 /var/www/user1/www
chown -R vsftpd:nogroup /var/www/user1
los /var/www/user1
la carpeta TIENE QUE existir o la conexión fallará.
Ahora mismo puede intentar conectarse con su FTP
- Cree un usuario administrador para acceder a todo el servidor
Para crear un usuario administrador, necesitamos registrar un nuevo usuario con htpasswd
.
Antes de hacerlo, le aconsejaré que consulte el /etc/ftpusers
archivo que define ciertos usuarios a los que no se les permite conectarse con ftp. Creo que es solo para usuarios locales y no para usuarios virtuales, pero por si acaso no elija un nombre contenido en este archivo.
sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin
Ahora necesitamos agregar una nueva línea en /etc/vsftpd.conf
chroot_list_enable=YES
Esto significa que su usuario será colocado en su carpeta (como una cárcel) EXCEPTO los usuarios en / etc /
vsftpd.chroot_list
Creemos este archivo y agreguemos nuestro usuario, el archivo es una línea simple que contiene “theadmin”. Agregue un usuario por línea. Eso significa que NO necesita crear un /var/www/theadmin
carpeta, el usuario iniciará sesión y comenzará en /home/vsftpd
.
Reinicie el servidor y listo.
Finalizando este artículo puedes encontrar las crónicas de otros programadores, tú asimismo tienes el poder dejar el tuyo si te gusta.