为什么我能够打开这个文件?

为什么我能够打开这个文件?

在调试 USB 设备的使用时,我遇到了一个令人费解的行为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

正如您在上面的会话日志中看到的,尽管只能由用户和组/dev/bus/usb/001/051访问,但我仍然成功地读取和写入文件。rootaudioopen

这是怎么回事?为什么我得不到EPERM

编辑回复评论:

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::---

答案1

( )+的 in 模式输出表示正在使用 ACL。 OP 中的输出包含一行:ls -lcrw-rw----+getfacl /dev/bus/usb/001/051

user:admin:rw-

这意味着,除了其他权限设置之外,用户admin还被授予对此文件的读写权限。

相关内容