Por que eu consigo abrir este arquivo?

4

Ao depurar o uso de um dispositivo USB, encontrei um comportamento confuso de open(2) :

admin@anahata-core-i5:/tmp$ groups
admin sudo
admin@anahata-core-i5:/tmp$ ls -l /dev/bus/usb/001/051
crw-rw----+ 1 root audio 189, 50 Jun 19 20:03 /dev/bus/usb/001/051
admin@anahata-core-i5:/tmp$ cat test.c 
#include <fcntl.h>

int main()
{
    return open("/dev/bus/usb/001/051",O_RDWR);
}
admin@anahata-core-i5:/tmp$ gcc test.c -o test && ./test ; echo $?
3

Como você pode ver no log da sessão acima, apesar de /dev/bus/usb/001/051 ser acessível apenas para o usuário root e o grupo audio , eu ainda consigo open o arquivo para leitura e escrita.

O que está acontecendo? Por que não recebo EPERM ?

EDITAR em resposta ao comentário:

admin@anahata-core-i5:/tmp$ getfacl  /dev/bus/usb/001/051
getfacl: Removing leading '/' from absolute path names
# file: dev/bus/usb/001/051
# owner: root
# group: audio
user::rw-
user:admin:rw-
group::rw-
mask::rw-
other::---
    
por Ruslan 19.06.2016 / 19:22

1 resposta

3

A saída + no modo de ls -l ( crw-rw----+ ) significa que as ACLs estão sendo usadas. A saída de getfacl /dev/bus/usb/001/051 no OP contém uma linha específica:

user:admin:rw-

Isso significa que, além de outras configurações de permissão, o usuário admin recebe permissão de leitura e gravação para esse arquivo.

    
por 19.06.2016 / 19:37