Permisos y librerias qt

Tengo el siguiente problema y creo que es un bug de las librerías qt:

Por distintas vicisitudes tengo la siguiente situación:

Deseo que los distintos usuarios de un sistema realicen ejercicios con el program qcad. Para ello he creado un directorio en donde se almacenan esos ejercicios con permisos
rwx--x--

siendo el propietario del directorio mi usuario y el grupo asociado un grupo al que pertenecen todos los usuarios.

Dentro del directorio le he creado a cada usuario un fichero .dxf (es el formato que usa qcad) que es en el que deben realizar el ejercicio y que tiene permisos:

rw-rw---

siendo el propietario de cada fichero mi usuario y el grupo asociado un grupo al que pertenece exclusivamente el usuario que quiero que realice el ejercicio.

Teóricamente el usuario debería poder trabajar sin problemas, ya que en el escritorio creo un lanzador de gnome que lanza el qcad con ese fichero. Sin embargo, qcad, aunque abre el fichero, se niega a guardarlo por problemas de permisos... ?:/

He hecho pruebas con la shell y vim y con openoffice y en ambos casos esta configuración me funciona: el usuario puede manipular los ficheros y guardar los cambios. Sin embargo, qcad se niega a hacerlo. Supongo que el problema será de las libqt que son las que usa qcad, pero no estoy seguro y no encuentro información en internet.

Por supuesto si los permisos del directorio que contiene los ficheros pasan a ser:

rwxrwx---

los usuarios pueden trabajar perfectamente, pero esta configuración de permisos implica que se pueden borrar unos a otros los ficheros o se los pueden copiar, que es lo que quiero evitar.

¿Sabe alguno algo de este supuesto bug?
No se si es un bug, suena feo sin duda. Si le das el sticky-bit al directorio que contiene los directorios de los usuarios no deberían poder borrarse las prácticas los unos a los otros...

Para ver si es un bug, utiliza 'strace' sobre la aplicación, habrá algún stat antes del 'Permission denied'. De todas formas en parte entiendo que si no puede escribir en el padre, de permission denied y no intente escribir en el hijo.... bug ? ni idea... raro si suena.

Saludos.Ferdy
Ferdy escribió:No se si es un bug, suena feo sin duda. Si le das el sticky-bit al directorio que contiene los directorios de los usuarios no deberían poder borrarse las prácticas los unos a los otros...


Cierto... El problema es que curiosamente necesito, aparte del permiso de escritura, el de lectura para que todo funcione. Y, claro, aunque no puedan hacerse la pascua unos a otros, si pueden copiarse.

Para ver si es un bug, utiliza 'strace' sobre la aplicación, habrá algún stat antes del 'Permission denied'.


No lo he hecho jamás. Miraré a ver cómo se hace.

De todas formas en parte entiendo que si no puede escribir en el padre, de permission denied y no intente escribir en el hijo.... bug ? ni idea... raro si suena.


No sé si es entendible o no. El caso es que ese no es el comportamiento del resto de aplicaciones. No sé cuál debe ser el comportamiento estándar. ¿Qué significa que no se tienen permisos de escritura sobre un directorio? ¿Que no se puede alterar el contenido del directorio= Lo cierto es que si modifico un fichero contenido en un directorio el contenido del directorio no varía, si hago un simple "ls"; pero sí, si hago un "ls -l".

Pero lo que digo sólo me pasa con el qcad que es el único programa que tengo instalado que usa las librerías qt (por eso le hecho la culpa estas librerías).

Ejemplo: si uso "echo" (también podría hacer una prueba con vim o el openoffice.org):

$ mkdir /tmp/prueba
$ touch /tmp/prueba/tonteria.txt
$ chmod 110 /tmp/prueba
$ ls -ld /tmp/prueba/
d--x--x---  2 usuario usuario 80 2006-04-04 13:23 /tmp/prueba/
$ echo "una línea insustancial" >> /tmp/prueba/tonteria.txt
$ cat /tmp/prueba/tonteria.txt
una línea insustancial


Como ves, he podido alterar el contenido del fichero sin los permisos de escritura ni lectura sobre el directorio que lo contiene. Me basta con el permiso de ejecución.

¿Puede alguien hacer pruebas con aplicaciones de kde?
Aja!

Tu problema está con el /tmp creo:

posidon / # mkdir testy
posidon / # chmod 110 testy/
posidon / # ls -ld testy/
d--x--x---  2 root root 48 Apr  4 14:07 testy/
posidon / # cd testy/
posidon testy # mkdir usuarios
posidon testy # chmod u=rw,g=rw,o= usuarios/
posidon testy # ls -ld usuarios/
drw-rw----  2 root root 48 Apr  4 14:08 usuarios/
posidon testy # chgrp users usuarios/
posidon testy # ls -ld usuarios/
drw-rw----  2 root users 48 Apr  4 14:08 usuarios/
[*1*]
posidon testy # ls -ld .
d--x--x---  3 root root 72 Apr  4 14:08 .
posidon testy # chmod u+rw .
posidon testy # ls -ld .
drwx--x---  3 root root 72 Apr  4 14:08 .
posidon testy #
[*2*]


Tanto en [*1*] como en [*2*] he intentado crear un fichero, en ambos casos:

[ $ ~ ] touch /testy/usuarios/tralara
touch: cannot touch `/testy/usuarios/tralara': Permission denied


No tengo muy claro que lo que tu pretendes deba funcionar fuera de un directorio como /tmp, ¿te funciona en un directorio normal? :)

Saludos.Ferdy
Ferdy escribió:Aja!
[ $ ~ ] touch /testy/usuarios/tralara
touch: cannot touch `/testy/usuarios/tralara': Permission denied


No tengo muy claro que lo que tu pretendes deba funcionar fuera de un directorio como /tmp, ¿te funciona en un directorio normal? :)


No, Ferdy: los ficheros implicados ya existen (observa que en mi ejemplo he hecho el "touch" antes del chmod). Evidentemente en tu caso no puedes hacer touch porque lo haces después. Lo que a mí me pasa es que los usuarios no pueden modificarlos.

Por supuesto, el ejemplo lo he hecho en /tmp por comodidad. En la realidad, los directorios no están en él. Además llevo usando la misma técnica con ficheros de openoffice sin ningún problema durante varios meses.
Bah, ignorame. Puede ser un bug de Qt, o una 'feature'. No he encontrado referencias claras en POSIX acerca de esto. (no digo que no existan ojo)

Saludos.Ferdy
Hola, no tengo instalado el qcad ( y con gentoo me llevaría un rato instalarlo) así que he probado con kdevelop (supongo que este valdrá ) y sí me funciona lo que quieres.

¿Seguro que no te funciona? Porque la primera vez me ha salido un mensaje de error de que no podía guardar un archivo, pero no era el que yo había creado sino el temporal (el que lleva el ~), que yo no había creado antes. El archivo sí lo ha modificado. Mira no vaya a ser eso. Si no puede que sea cosa de qcad sólamente ( o igual hay algo que yo no he hecho ).


EDITO: Bueno, pues he probado con qcad y efectivamente falla, parece que no tiene que ver con lo que te comentaba. Si tengo tiempo mañana pruebo con otro (¿alguna sugerencia?)

Un saludo.
bastian escribió:
[...] así que he probado con kdevelop (supongo que este valdrá ) y sí me funciona lo que quieres.

[...]

EDITO: Bueno, pues he probado con qcad y efectivamente falla, parece que no tiene que ver con lo que te comentaba. Si tengo tiempo mañana pruebo con otro (¿alguna sugerencia?)


He postulado que fallaban las libqt, porque he supuesto que esas funciones de abrir, guardar, guardar como, etc... son funciones de una librería general que usa qcad y que no han sido implementadas por el autor del programa. Ahora bien, si me dices que funciona el kdevelop, no sé qué pensar.

Este fin de semana, con tiempo, probaré usar el strace que me ha sugerido Ferdy y con lo que tenga enviaré aviso al autor del programa... Para un programa medio decente de cad que hay (aunque no sea para tirar cohetes y el módulo para hacer scripts sea comercial...).

Gracias a ambos.

PD: bastian, si haces alguna otra prueba con algún otro programa, mejor. No puedo darte nombres porque jamás he usado KDE
Parece que la ventana de exploración de archivos de qcad no es el mismo que el del resto de aplicaciones kde (los iconos son distintos). El caso es que en alguna otra aplicación los he visto, pero no recuerdo en cual...
# dep -l qcad
sci-misc/qcad-2.0.4.0-r1:
                    =x11-libs/qt-3.3*        x11-libs/qt-3.3.4-r8
                    >=sys-apps/sed-4         sys-apps/sed-4.1.4-r1
    !bootstrap?     sys-devel/patch          sys-devel/patch-2.5.9

# dep -l kdevelop
dev-util/kdevelop-3.2.1-r1:
                    =x11-libs/qt-3.3*        x11-libs/qt-3.3.4-r8
                    >=kde-base/kdelibs-3.3   kde-base/kdelibs-3.4.3-r1
                    >=sys-devel/automake-1.7.0 sys-devel/automake-1.9.6-r1
                    dev-lang/perl            dev-lang/perl-5.8.7-r3
                    dev-util/pkgconfig       dev-util/pkgconfig-0.20
    ||              kde-base/cervisia        kde-base/cervisia-3.4.1
                    sys-devel/autoconf       sys-devel/autoconf-2.59-r7
                    sys-devel/flex           sys-devel/flex-2.5.33-r1
                    sys-devel/gdb            sys-devel/gdb-6.4
                    sys-devel/make           sys-devel/make-3.80-r4
    !bootstrap?     sys-devel/patch          sys-devel/patch-2.5.9
    xinerama? ||    virtual/x11              virtual/x11-6.8
                    ~kde-base/kde-env-3      kde-base/kde-env-3-r4

Como ves kdevelop usa las kdelibs, que aunque no tengo ni idea de si tienen que ver con esto, me imagino que sí. No tengo ninguna otra aplicación con estos menús que sea Q* en vez de K* (está quanta pero también usa kdelibs y tiene el mismo tipo de ventanas que los otros) así que no te lo puedo confirmar, pero quizá vaya por ahí la cosa.

EDITO: Acabo de acordarme de qué me sonaba. El programa linguist (viene incluído con qt, pero como no lleva la "q" delante no me aparecía en la consola) usa el mismo tipo de diálogos. Lo he probado y funciona, así que ya no sé que puede ser. Mejor dejo de marearte y usa strace como te dijo Ferdy.

Un saludo.

Un saludo.
8 respuestas