Linux目录权限导致进程打开文件失败的问题
2016-10-14 14:42
971 查看
最近在开发一个服务端程序,测试过程发现了一个小问题,借此记录下。
场景的描述大致是这样的:程序以root用户启动,打开一个文件A,fork一个子进程以非root用户运行,改变文件A的属主为子进程的运行用户;子进程在运行过程可能会重新打开文件A
问题就是由重新打开文件A触发的,演示如下:
假设我把程序放在/root/test目录下(默认情况下/root目录的权限会特殊些,只为方便演示, 实际上一般不会把程序安装在该目录下)
1.启动程序
2.子进程执行重新打开文件A的操作后收到一条错误
收到这样一条错误一开始以为是文件A的权限有问题
3.查看文件A的权限
4.接着查看是否目录权限问题
都没有发现问题,索性再看一下上级目录权限呗
问题就出在/root目录没给其他用户权限(通过id命令得知子进程的有效用户不属于root用户组),给其他用户加上x权限(只加r权限依然不能解决问题,本例需要的是能进入/root目录的权限)再测试一下就可以了,测试完记得把/root的权限还原
啰嗦了这么多,本例问题的原因总结一句话:进程的有效用户没有进入文件A所在目录或间接上级目录的权限。
场景的描述大致是这样的:程序以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所在目录或间接上级目录的权限。
相关文章推荐
- hadoop学习笔记(2)-hadoop安装目录权限的问题导致datanode启动失败
- sahrepoint把dll文件放在站点bin目录下访问的问题,安全性异常 ,请求类型的权限已失败。
- linux数据库data文件转移到其他服务器的权限问题导致无法看到数据表
- Linux文件和目录访问权限设置问题
- Linux作业(一)-Linux下文件及目录的权限问题(没试之前我也觉得有点奇怪)
- Oracle数据库案例整理-Oracle系统运行时故障-stage目录权限错误导致创建pfile文件失败
- A网站引用B服务器虚拟目录文件导致:网站部署到IIS7上出现HTTP 错误 500.19(由于权限不足而无法读取配置文件)的问题
- Hadoop HDFS 文件访问权限问题导致Java Web 上传文件到Hadoop失败的原因分析及解决方法
- linux文件权限与目录配置问题与解答(整理篇)
- 今天刚安装了linux redhat6.4 在打开的Firefox的时候报错:无法初始化应用程序安全组件。很有可能您的程序个人目录中的文件出现问题。请检查
- Linux的文件描述符个数限制导致创建文件(或socket)失败的问题
- linux 更改权限后也无法创建目录和文件问题处理
- linuxOS权限问题,导致php对文件操作报错
- Linux更改文件及目录权限问题
- 解决因文件权限导致git fetch命令执行失败的问题
- Linux更改文件及目录权限问题
- Linux的目录文件权限问题
- Java在linux上只能在程序的当前目录下创建文件/文件夹导致的问题
- Linux下打开目录、创建文件的权限
- Linux 下创建一个文件,打开一个目录需要什么权限呢?