¿Qué hace el permiso x (ejecutar) en los sockets de Unix?

11

Según mi experiencia, el usuario no privilegiado no puede acceder al socket Unix que no posee sin el conjunto de bits x. ¿Qué hace este bit exactamente? Gracias

Владимир Тюхтин
fuente
¿Es el permiso en los sockets o en el directorio?
Rui F Ribeiro
En un zócalo. El directorio tiene el modo 0755, por lo que el usuario puede observar el contenido. El socket tiene el modo 0644, por lo que lógicamente el usuario (que pertenece a "otros" porque él / ella no posee el socket, pertenece al socket propietario del grupo) debería poder escribir en el socket. Pero el usuario obtiene un mensaje de denegación de permiso a menos que se aplique el modo 0777 al socket
Владимир Тюхтин 29/0618
2
@ ВладимирТюхтин, 0644significa simplemente leer el permiso para los miembros del grupo y "otros", para que solo el propietario pueda acceder al socket (ya que el permiso de escritura lo controla). 0666, o simplemente 0222porque no se necesita permiso de lectura, sería suficiente para dar acceso a todos. Pero, en lugar de otorgar permisos a todos, buscaría usar grupos para permitir el acceso.
ilkkachu

Respuestas:

9

Nada, como puedo ver.

El Linux página del manual de Unix (7) afirma que los permisos del directorio que contiene una toma aplican normalmente (es decir, que necesita +xde /fooconectarse a /foo/sock, y +wen /foola creación /foo/sock) y que escribir controles de permisos de conexión a la toma de sí mismo:

En Linux, conectarse a un objeto de socket de flujo requiere permiso de escritura en ese socket; enviar un datagrama a un zócalo de datagrama también requiere permiso de escritura en ese zócalo.

Aparentemente, algunos otros sistemas se comportan de manera diferente:

POSIX no hace ninguna declaración sobre el efecto de los permisos en un archivo de socket, y en algunos sistemas (por ejemplo, BSD anteriores), se ignoran los permisos de socket. Los programas portátiles no deben confiar en esta característica por seguridad.

unix(4)en FreeBSD describe requisitos similares. La página de manual de Linux no dijo si el acceso a socket en algunos sistemas también ignora los permisos de directorio .

Eliminar el xbit del socket parece tener el efecto de dar un error diferente al intentar ejecutar el socket, pero esa no es una gran diferencia práctica:

$ ls -l test.sock
srwxr-xr-x 1 user user 0 Jun 28 16:24 test.sock=
$ nc -U ./test.sock
Hello
$ ./test.sock
bash: ./test.sock: No such device or address
$ chmod a-x test.sock
$ nc -U ./test.sock
Hello
$ ./test.sock
bash: ./test.sock: Permission denied

(También probé que, de hecho, solo wparece importar el bit para acceder al socket en Debian Linux 4.9.0).

¿Quizás los sockets que quisiste decir tenían todos los bits de permiso eliminados del usuario, o quisiste decir el xbit en el directorio?

ilkkachu
fuente