2011-05-12 21 views
7

Tengo un programa que crea un socket, y luego quiero cambiar los permisos del archivo de socket:¿cómo puedo cambiar los permisos de un archivo de socket de Linux?

ret_val = chmod(filename, 0777); 

, pero eso no cambia, a pesar de que ret_val será 0. Si trato de la Lo mismo en un archivo normal, funciona.

¿Alguna idea?

P.S: Estoy ejecutando el programa como root, por lo que tiene toda la autoridad necesaria.

+0

¿qué variante de UNIX? – Alnitak

+0

Yo también estoy teniendo este problema. En mi computadora de escritorio Ubuntu 10.04, cambiar los permisos a 777 en el directorio donde se encuentra el archivo de socket funcionó. En una instalación idéntica (un DVD sano) en mi máquina de prueba, nada de lo que haga con respecto a los permisos del directorio tiene ningún efecto sobre los permisos del archivo de socket creado. Sigo siendo srwxr-xr-x. Intenté usar la función chmod() y una llamada a system() para establecer el archivo perms en 777. No tuve suerte. ¿Alguien tiene alguna sugerencia? –

Respuesta

18

De man 7 unix:

En la implementación de Linux, zócalos que son visibles en el sistema de archivos destacan los permisos del directorio se encuentran en su propietario, grupo y sus permisos se pueden cambiar.. La creación de un nuevo socket fallará si el proceso no tiene permisos de escritura y búsqueda (ejecución) en el directorio donde se creó el socket. La conexión al objeto socket requiere permiso de lectura/escritura. Este comportamiento difiere de muchos sistemas derivados de BSD que ignoran permisos para sockets de dominio UNIX . Los programas portátiles no deben confiar en esta característica por seguridad.

lo tanto, si desea controlar los permisos en una toma de corriente, con el fin de ser portátil, en su lugar debe controlar los permisos del directorio que contiene el zócalo.

+0

@anna lear Perdón por la mala respuesta. Mi firefox decidió que no necesitaba acceder a esta publicación para poder eliminarla. Dejó algo en el teclado y obtuvo esta hermosa publicación como recompensa. Entonces no pude acceder a él. –

+3

Ignorar las permanentes en el objeto del socket es basura. ¡Ve Linux! – Kaz

Cuestiones relacionadas