Pet*_*acs 17
Chroot可能是最好的方法,但您可以使用它realpath(3)来确定给定文件名的规范路径.从手册页:
char *realpath(const char *file_name, char *resolved_name);
Run Code Online (Sandbox Code Playgroud)
realpath()函数解析所有符号链接,额外的'/'字符以及对filename中的/./和/../的引用,并将得到的绝对路径名复制到由已解析名称引用的内存中.resolved_name参数必须引用能够存储至少PATH_MAX字符的缓冲区.
从那里,您可以以任何其他方式限制请求.
获取根 (/) 目录和服务目录(例如 /ftp/pub)的 inode。对于他们请求的文件,请确保:
您可以使用它stat来查找任何目录的索引节点。将其放入一个函数中,并在提供文件之前调用它。
当然,使用具有适当权限的用户/组也可以。