您的位置:首页 > 运维架构 > Linux

Linux目录权限导致进程打开文件失败的问题

2016-10-14 14:42 971 查看
最近在开发一个服务端程序,测试过程发现了一个小问题,借此记录下。

场景的描述大致是这样的:程序以root用户启动,打开一个文件A,fork一个子进程以非root用户运行,改变文件A的属主为子进程的运行用户;子进程在运行过程可能会重新打开文件A

问题就是由重新打开文件A触发的,演示如下:

假设我把程序放在/root/test目录下(默认情况下/root目录的权限会特殊些,只为方便演示, 实际上一般不会把程序安装在该目录下)

1.启动程序

[root@localhost test]# ./sbin/server
[root@localhost test]# ps auxf | grep server | grep -v grep
root      3208  0.0  0.0  16700   408 ?        Ss   11:38   0:00 server: master
nobody    3209  0.0  0.1  16700   552 ?        S    11:38   0:00  \_ server: worker


2.子进程执行重新打开文件A的操作后收到一条错误

open() "/root/test/logs/error.log" failed (13: Permission denied)


收到这样一条错误一开始以为是文件A的权限有问题

3.查看文件A的权限

[root@localhost test]# ls -l logs/
-rw-r--r-- 1 nobody root 177 Oct 14 11:38 error.log


4.接着查看是否目录权限问题

[root@localhost test]# ls -ld
drwxr-xr-x 6 root root 4096 Oct 14 09:49


都没有发现问题,索性再看一下上级目录权限呗

[root@localhost test]# ls -ld /root
drw-r-x--- 16 root root 4096 Oct 14 11:43 /root
[root@localhost test]# ls -ld /
drwxr-xr-x 23 root root 4096 Oct 14 09:16 /


问题就出在/root目录没给其他用户权限(通过id命令得知子进程的有效用户不属于root用户组),给其他用户加上x权限(只加r权限依然不能解决问题,本例需要的是能进入/root目录的权限)再测试一下就可以了,测试完记得把/root的权限还原

啰嗦了这么多,本例问题的原因总结一句话:进程的有效用户没有进入文件A所在目录或间接上级目录的权限。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐