确保文件为(X级)的有效方法?在某个目录下
Efficient way to make sure file is (X levels)? under a certain directory
我需要确保某个文件在某个目录中(无论级别多少)。
可视化:
A/ + file
或
A/ + x/x/x/..../file
它必须在A以下,不管有多少级别。
文件路径(在加号之后)由用户指定给程序。
问题是我不能使用chroot,因为程序还需要访问A之外的一些文件夹(比如说B),但用户(通过套接字接口连接)不应该能够通过A/ + ../B/file
访问它们
这将在内部内环中完成,因此它必须表现良好。我曾想过计算"/",提取".."的个数,正在提取编号"/./"并将其比较为>=1,但由于输入是由用户提供的,因此它既表现不佳,又容易出现错误。
有没有一个我不知道或其他方式的函数可以检查这个?
编辑:
如果有一种方法可以允许我访问B文件夹,即使在我chroot之后(如果我没记错的话,文件句柄仍保留在chroot之后,我需要它的文件夹版本),那也没关系。我只需要访问B 第2版: 顺便说一句,我知道使用UID之类的方法,但我需要一个替代方案。
我认为最简单的方法是将用户提供的路径字符串附加到A目录的路径末尾,然后使用POSIX realpath()函数来简化生成的路径字符串。(realpath()将消除任何".."或符号链接的恶作剧,并为您提供一个简单、绝对的文件路径字符串)
然后将该路径与A目录的简化/绝对路径进行比较。如果文件路径字符串以A的路径字符串开头(例如strncmp(file_path_str,A_dir_path_str,strlen(A_dir_path _str))==0),则允许访问该文件;否则拒绝访问。
您可以在递归函数中调用ftw()
或nftw()
。
在执行此操作时,您需要确保不遵循符号链接或将遍历限制为符号链接。
初始启动可以扫描频繁访问的文件夹以进行存储,直到接收到请求并且系统空闲。所有请求都被添加到存储(哈希表等)中
你可以在这里找到详细信息。
假设"用户"没有对系统的自由访问权限,但本身有足够的权限,我希望chroot
是您正在寻找的解决方案。
因此,与其验证输入的目录结构,不如简单地更改"根",使其指向"A/"-然后(如果需要)从路径的开头删除"A/",并接受其余部分。
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 在C++中初始化向量映射的最有效方法
- 将此布尔值传递给此函数的最有效方法是什么?
- 找到一种有效的方法,在 2 个巨大的缓冲区上执行 MAX,每字节字节
- 如何在工厂方法中返回指向基于基础操作系统的派生类的有效指针
- 比较C++中两个整数的最有效和最干净的方法是什么?
- 比较C++变量的最有效方法
- C++函子,有什么有效的方法吗?
- 在 c++ 中解决段树以外的范围查询的有效方法是什么?
- 存储变量的更有效方法是什么?
- 确保套装新鲜度的有效方法
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 映射唯一值和重复值的有效方法.可以访问键或值的位置
- 在C++事务之间存储大量字符数据的有效方法
- 在unordered_multimap中精确迭代一次每个键的有效方法
- 证明两指针方法有效(对和)
- leetcode中的最大数字:有人能解释为什么这个方法有效吗
- C++ 用指针反向打印数组内容 - 为什么此方法有效
- Makefile:为什么这种自动生成先决条件的方法有效
- g++链接错误-解决方法有效的原因