Que fait l'autorisation x (exécuter) sur les sockets unix?

11

Par mon expérience, un utilisateur non privilégié ne peut pas accéder à la prise Unix qu'il ne possède pas sans x bit défini. Que fait exactement ce bit? Merci

Владимир Тюхтин
la source
Est-ce l'autorisation sur les sockets ou sur le répertoire?
Rui F Ribeiro
Sur une prise. L'annuaire a le mode 0755, afin que l'utilisateur puisse observer le contenu. Le socket a le mode 0644, donc logiquement l'utilisateur (qui appartient à "autres" car il / elle ne possède pas de socket appartient au groupe qui possède le socket) devrait pouvoir écrire sur le socket. Mais l'utilisateur obtient un message de refus d'autorisation à moins que le mode 0777 ne soit appliqué au socket.
Владимир Тюхтин
2
@ ВладимирТюхтин, 0644signifie simplement une autorisation de lecture pour les membres du groupe et "autres", de sorte que seul le propriétaire pourrait accéder à la socket (puisque l'autorisation d'écriture la contrôle). 0666, ou tout 0222comme une autorisation de lecture n'est pas nécessaire, serait suffisant pour donner accès à tout le monde. Mais, plutôt que de donner des autorisations à tout le monde, je chercherais à utiliser des groupes pour autoriser l'accès.
ilkkachu

Réponses:

9

Rien, comme je peux le voir.

Linux unix page de manuel (7) dit que les permissions du répertoire contenant un socket appliquent normalement (vous devez +xsur /foose connecter à /foo/socket +wsur /foola création /foo/sock) et que écrire des contrôles d'autorisation de connexion à la prise elle - même:

Sous Linux, la connexion à un objet socket de flux nécessite une autorisation d'écriture sur ce socket; l'envoi d'un datagramme à un socket de datagramme nécessite également une autorisation d'écriture sur ce socket.

Apparemment, certains autres systèmes se comportent différemment:

POSIX ne fait aucune déclaration sur l'effet des autorisations sur un fichier socket, et sur certains systèmes (par exemple, les anciens BSD), les autorisations socket sont ignorées. Les programmes portables ne doivent pas compter sur cette fonctionnalité pour des raisons de sécurité.

unix(4)sur FreeBSD décrit des exigences similaires. La page de manuel Linux ne dit pas si l'accès au socket sur certains systèmes ignore également les autorisations du répertoire .

La suppression du xbit du socket semble avoir pour effet de donner une erreur différente pour essayer d'exécuter le socket, mais ce n'est pas vraiment une différence pratique:

$ 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

(J'ai également testé qu'en effet, seul le wbit semblait avoir de l'importance pour accéder au socket sur Debian's Linux 4.9.0.)

Peut-être que les sockets que vous vouliez dire avaient tous les bits d'autorisation supprimés de l'utilisateur, ou vous vouliez dire le xbit sur le répertoire?

ilkkachu
la source