Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Mover ficheros en el servidor (https://www.clubdelphi.com/foros/showthread.php?t=90234)

mblascog 30-04-2016 19:26:45

Mover ficheros en el servidor
 
Buenas,
Estoy desarrollando un pequeño programa para organizar los documentos en un servidor linux.
Ya he conseguido crear todas las carpetas, asignar los permisos, .... con el componente idFTP de Indy. Ahora quería mover unos ficheros que están en el directorio raíz, a uno de los que acabo de crear y no veo como hacerlo.
He probado con PUT, pero es para subir ficheros. RENAME me da error, SITE, de la misma manera que asigno los permisos a las carpetas con chmod he intentado con mv, y tampoco.

Alguna sugerencia? Gracias

Casimiro Notevi 30-04-2016 21:16:28

¿Mover por FTP desde un equipo remoto?
Explícate mejor, porque no se entiende exactamente qué preguntas.

mblascog 01-05-2016 00:48:27

Buenas,
Pues esto, que he creado unos directorios en el servidor, usando el componente idFTP de las Indy. En dicho servidor tengo unos ficheros y me gustaría moverlos a uno de estos directorios acabados de crear y no sé como hacerlo

Gracias.

Casimiro Notevi 01-05-2016 00:54:29

Seguramente puedes usar Rename
Código Delphi [-]
TIdFTP.Rename(sSrc, sDst).

mblascog 01-05-2016 09:20:13

Muchas, muchas gracias

mblascog 01-05-2016 11:06:30

Muchas, muchas gracias. Ha funcionado perfectamente.
Sigo en el hilo porqué me ha surgido un último problema. Quisiera cambiar los privilegios de los ficheros y/o carpetas que acabo de mover con Rename y me pasa lo siguiente:
- estas carpetas y/o usuarios tienen un mismo propietario y un mismo grupo, ambos con todos los privilegios (rwx)
- desde el programa de Delphi, el componente idFTP lo tengo configurado con un usuario que pertenece al grupo.
No tengo permisos para cambiar los permisos (valga la redundancia) de estos ficheros y/o carpetas.
ifFTP.Site('CHMOD 770 fichero');

Todos los archivos y/o carpetas los he movido a una carpeta que he creado desde el programa, por lo que he intentado cambiar los permisos recursivamente de esta carpeta, desde el programa y tampoco funciona.

Gracias

Casimiro Notevi 01-05-2016 14:52:41

Eso debes configurarlo en el servidor FTP.
Ten en cuenta que es algo muy peligroso, alguien sube un ejecutable, le cambia los permisos y... ¡¡¡tiene permisos para hacer lo que le da la gana en el servidor!!!

mblascog 01-05-2016 15:32:17

Gracias Casemiro. Tu que harías. Necesito dejar a los otros sin ningún privilegio.
Hay alguna posibilidad de ejecutar el comando sudo chmod ... desde Delphi?

Casimiro Notevi 01-05-2016 15:37:14

Cita:

Empezado por mblascog (Mensaje 504831)
Gracias Casemiro. Tu que harías. Necesito dejar a los otros sin ningún privilegio.
Hay alguna posibilidad de ejecutar el comando sudo chmod ... desde Delphi?

Te he respondido antes:
Cita:

Empezado por Casimiro Notevi (Mensaje 504830)
Eso debes configurarlo en el servidor FTP.

Todos los programas ftp tienen la opción de indicar los permisos que tendrán los usuarios que accedan al mismo.
Seguramente podrás ejecutar chmod, pero para quitar permisos, no para dar más.

mblascog 01-05-2016 18:35:05

Gracias Casimiro,
Cuando creo una carpeta con idFTP.makedir, puedo asignar los permisos que quiero.
Cuando quiero cambiar los permisos de un fichero cuyo propietario es diferente del grupo, es cuando me da error. Y sí, quiero usar el chmod para quitar permisos

Casimiro Notevi 01-05-2016 22:41:54

Cita:

Empezado por mblascog (Mensaje 504836)
Cuando quiero cambiar los permisos de un fichero cuyo propietario es diferente del grupo, es cuando me da error.

¿Tienes permisos para hacerlo?

mblascog 01-05-2016 23:16:32

Sí, desde el servidor de linux, ejecuto el mismo chmod y no tengo problema.
En un post antiguo he visto que sugerias idftp.sendcmd('chmod ....
Pero no me ha funcionado.

Gracias

Casimiro Notevi 01-05-2016 23:20:51

Cita:

Empezado por mblascog (Mensaje 504846)
Sí, desde el servidor de linux, ejecuto el mismo chmod y no tengo problema.

Obviamente, desde el sistema ejecutas sudo ... y lo estás haciendo como root, con todos los permisos.
Pero remotamente conectado al usuario del FTP, tienes los permisos que tenga ese usuario.

Cita:

Empezado por mblascog (Mensaje 504846)
En un post antiguo he visto que sugerias idftp.sendcmd('chmod ....
Pero no me ha funcionado. Gracias

¿Y por qué no ha funcionado?

mblascog 01-05-2016 23:38:53

No Casimiro, en el servidor ejecuto chmod no sudo chmod

Casimiro Notevi 02-05-2016 00:36:31

Cita:

Empezado por Casimiro Notevi (Mensaje 504847)
Pero remotamente conectado al usuario del FTP, tienes los permisos que tenga ese usuario.

..........

mblascog 02-05-2016 11:07:59

Quería decir que desde la cónsola del servidor, ejecuto el comando chmod sin sudo delante.
La otra cosa que he pensado ha sido crear un usuario con privilegios root. Pero no debe ser posible, pues he configurado el componente idFTP con este usuario y contraseña y salta el error de Login incorrect.

Gracias

Casimiro Notevi 02-05-2016 12:51:28

Cita:

Empezado por mblascog (Mensaje 504859)
La otra cosa que he pensado ha sido crear un usuario con privilegios root.

je, je, je... sí, haz eso, tú veras lo que va a durar el servidor con sus datos :D

mblascog 02-05-2016 13:12:24

Hola Casimiro, me has asustado y ya he eliminado el usuario.
Así pues no tengo manera de cambiar permisos de ficheros y/o carpetas remotamente?

mblascog 02-05-2016 13:51:27

Voy a hacer otra prueba: he creado un script que hace el cambio de privilegios y funciona, desde la cónsola. Ahora intentaré si sé ejecutar este script desde Delphi, con idftp.sendcmd

Casimiro Notevi 02-05-2016 14:49:51

Como he comentado antes varias veces, el propio programa servidor ftp tiene una opción para decirle qué permisos quieres que tengan los archivos que subas.

mblascog 02-05-2016 15:30:21

Casemiro, quizás estoy haciendo algo mal, pues no domino demasiado el tema.
En realidad yo no estoy subiendo ningún fichero ni carpeta al servidor.
Desde Delphi, estoy intentando organizar un gran volumen de carpetas y ficheros en un servidor Ubuntu, copiados de un servidor Windows.
Quizás me haya equivocado en el momento de escoger el componente. No sé

Casimiro Notevi 02-05-2016 22:54:50

Es que de primera hora estás hablando de FTP, y lo que dices ahora no tiene nada que ver. Mejor que aclares las ideas y luego preguntas las dudas.

mblascog 02-05-2016 23:12:51

Perdón si no me he explicado bien, però el primer post lo empecé así:
Estoy desarrollando un pequeño programa para organizar los documentos en un servidor linux.
Ya he conseguido crear todas las carpetas, asignar los permisos, .... con el componente idFTP de Indy. ....

Y sigo con lo mismo, quizás no es la manera adecuada de hacerlo, pero no conozco otra.

Gracias

Casimiro Notevi 02-05-2016 23:20:17

Aparte de mover ficheros, sigues sin explicar qué quieres conseguir. ¿Es algo personal donde simplemente tú quieres conectar con un equipo linux? ¿o es un proyecto donde pocos o muchos usuarios conectarán con un servidor linux?
Tienes muchísimas opciones, por ejemplo, conectar por SSH y así hacer y deshacer todo lo que necesites en el servidor.

mblascog 02-05-2016 23:48:27

Gracias Casemiro,
En realidad lo que quiero es esto:
Copiaré toda la información de los clientes de la empresa, de un servidor Windows al servidor Linux (cada cliente es una carpeta). Este proceso es un copiar y pegar desde el mismo servidor Windows y que no tiene nada que ver con el programa.
Una vez la información esté en el servidor linux quiero hacer lo siguiente:
- crear una serie de carpetas dentro de cada cliente
- copiar los ficheros que existen de cada cliente en algunas de estas carpetas
- y finalmente quiero cambiar los permisos de todas las carpetas y ficheros, permitiendo al propietario y al grupo todo, y al resto nada.

Equivocadamente o no, lo he conseguido, casi todo, con el componente tidFtp de los Indy. Lo único que me falla es el cambio de privilegios.

mblascog 03-05-2016 00:38:21

He instalado servidor SSH en el servidor. He estado buscando un componente para la conexión SSH y gratis no lo he encontrado. Es posible?
Gracias

Casimiro Notevi 03-05-2016 02:03:52

¿Para qué quieres un componente?

mblascog 03-05-2016 09:42:06

Casimiro, por tu respuesta entiendo que no lo necesito y además que no tengo ni idea.
Gracias

Casimiro Notevi 03-05-2016 09:49:58

Cita:

Empezado por mblascog (Mensaje 504896)
Casimiro, por tu respuesta entiendo que no lo necesito y además que no tengo ni idea.Gracias

No, lo que quiero decir es que no entiendo exactamente qué quieres hacer. O sea, sí, que los usuarios puedan copiar archivos desde su equipo al servidor, borrarlos, renombrarlos, etc.
Pero no entiendo que:
- Si conectan por ssh, ¿para qué quieres hacer un programa?
- Si ya lo haces mediante ftp, ¿para qué usas ssh?
- etc...

Cita:

Empezado por mblascog (Mensaje 504888)
.... con el componente tidFtp de los Indy. Lo único que me falla es el cambio de privilegios.

Bien, pero qué falla.

mblascog 03-05-2016 10:47:28

Casemiro.
Vamos a exportar toda la información de los clientes de un servidor Windows a un servidor Linux. El motivo es porqué hemos configurado una nube privada, bajo Linux, para nuestros clientes.
Tenemos ambos servidores en la misma red, por lo que la exportación, será un simple copiar y pegar.
Cada cliente tiene una carpeta, y dentro de ella no hay orden alguno. Y aquí empieza el objetivo del programa.
Una vez exportada toda la información, el programa recorre cada una de las carpetas y comprueba los ficheros que contiene, y dependiendo de ellos crea unas carpetas, mueve unos ficheros de una a otra carpeta, ....
Esto hasta aquí correcto.
Queremos que estas carpetas tengan diferentes permisos. Unas podrán ser sólo accedidas desde los usuarios Windows, bien sea a través de la nube o de la red local. Otras podrán acceder todos los usuarios. Y aquí estoy parada, no puedo cambiar los permisos.
Este proceso ahora será general para la migración, pero una vez hecha la migración se deberá repetir, por un lado para los nuevos clientes, para crear las carpetas con su respectiva estructura, como de vez en cuando repasar toda la información.

Siguiendo tu consejo con SSH, he desinstalado las Indy 9 y ahora instalaré las Indy 10, ya que estas sí permiten SSH.

No hay más. Gracias

mblascog 03-05-2016 13:32:11

Se me ha olvidado comentar que cuando los usuarios copian información al servidor de Linux lo hacen directamente, ya que acceden a él a través de una unidad de red.
El programa es para organizar la información y para asignar correctamente los privilegios.

mblascog 03-05-2016 23:45:45

Desisto. He estado buscando diferentes alternativas para conseguir el cambio de permisos. Mis conocimientos en ubuntu son muy limitados y en Delphi, sólo conozco los Indy para hacerlo. He leído que sólo puede ejecutar chmod el usuario root y el propietario. Lo que yo busco, y parece ser que no es posible, es permitir ejecutar chmod cualquier usuario que pertenezca al grupo.
Gracias por tu aportación al tema Casemiro

Casimiro Notevi 04-05-2016 00:09:03

No entiendo, ¿por qué no le das los permisos necesarios al darlos de alta en el servidor?

mblascog 04-05-2016 00:42:32

Casimiro, mis conocimientos no llegan a más. Al hacer copiar y pegar desde Windows, desconozco si hay alguna manera de asignar permisos.
El proceso empieza así:
- hay una carpeta en el servidor windows c:\clientes que contiene cientos de carpetas. Cada carpeta es un cliente.
- existe una unidad lógica en dicho servidor, L:, que apunta al servidor Linux
El día escogido para hacer la migración, el proceso será manual, en la carpeta c:\clientes haremos seleccionar todo y copiar. Nos posicionaremos en L: (servidor Linux) y haremos pegar. A partir de aquí, los ficheros tienen como propietario Administrador, que es el usuario del servidor de Windows.
El programa está pensado para organizar automáticamente la información y restringir el acceso de los usuarios.

De todas maneras este es el proceso inicial. Con el día a día, los diferentes usuarios de la oficina, irán copiando documentos a la L, y estos archivos se crearán como propietario el usuario que los haya copiado.
He leído que chmod sólo puede ejecutarlo el usuario root o el propietario del fichero, por eso me da error el idftp.site('chmod ....
Si no hay manera de ejecutar sudo chmod desde Delphi, y tampoco hay manera de ejecutar un script.sh que he creado en el servidor ubuntu que lo hace. No le veo solución al tema.

Casimiro Notevi 04-05-2016 00:59:01

¿Son muchos usuarios?
¿Cada usuario debe ver solamente sus ficheros o puede ver los de los demás?
¿Con qué conectas 'L' al servidor: samba, nfs, etc.?

mblascog 04-05-2016 08:43:15

Buenas Casimiro,
Los usuarios de Windows pueden ser unos 20. En el servidor Linux hay una carpeta compartida via SMB y acceden sólo a esta carpeta, que es donde hay toda la información de los clientes y ellos, todos, tienen todos los permisos.
En el servidor hay montado Owncloud, por lo que otros usuarios se conectan vía Owncloud al servidor Linux. A nivel real existen dos tipos de estos usuarios, los mismos usuarios Windows, que cuando están en casa de los clientes se conectan via Owncloud, o bien clientes. Los clientes tienen los permisos restringidos, los de Windows no.
Todo esto ya está montado, comprobado y funciona.
Sólo me queda poder cambiar permisos de las carpetas. Por si te sirve, el programa Delphi, se alojará en el servidor Windows y siempre se ejecutará por Lan

Gracias

Casimiro Notevi 04-05-2016 09:46:08

Cita:

Empezado por mblascog (Mensaje 504917)
Sólo me queda poder cambiar permisos de las carpetas. Por si te sirve, el programa Delphi, se alojará en el servidor Windows y siempre se ejecutará por Lan

Pregunto: ¿por qué tienen que cambiar los permisos? ¿por qué los usuarios? No es buena idea que un usuario se cambie los permisos, debe ser el administrador del servidor quien decida los permisos que deben tener los usuarios.

mblascog 04-05-2016 10:51:15

1 Archivos Adjunto(s)
Buenas Casimiro,
Los usuarios no van a cambiar manualmente los permisos. Es el programa en Delphi quien debe cambiarlos.
Quizás te preguntarás si lo más fácil es lanzar un script directamente desde el servidor Linux y punto. Pero es que la empresa no dispone de informático, yo voy ocasionalmente, por lo que se hace necesario hacer el programa para poder automatizar el proceso

Espero que una imagen valga más que 1000 palabras. En ella podrás ver como es la estructura original de la carpeta cuando la copian de Windows a Linux, y como quieren que quede.

Archivo Adjunto 3345

De todo esto, lo que me falta es sólo fijar los permisos de las carpetas.

Gracias

mblascog 04-05-2016 13:49:05

Casimiro, a través de SSH podría conseguir cambiar los permisos? O me aconsejas desistir¿
Gracias

Casimiro Notevi 04-05-2016 13:51:50

Claro, es una conexión remota con el usuario que quieras. Puedes hacerlo siempre y cuando tengas permisos para hacerlo, como siempre.
Por ejemplo, puedes crear un script en el servidor y ejecutarlo una vez conectado por ssh.
O que se ejecute automáticamente a una hora determinada.


La franja horaria es GMT +2. Ahora son las 09:52:46.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi