出于涉及 Windows 服务器的安全测试的目的,我想尝试将符号链接(symbolic link)上传到 Windows 网络应用程序。然而,根据官方提供的信息,尚不清楚 Windows 硬链接(hard link)(我认为它与 NTFS 连接相同)是否作为可以从硬盘复制的文件存在,就像在 Linux 上一样。它含糊不清,但我觉得 NTFS 联结是不同于“常规”文件的其他类型的文件系统工件 - 我找不到文档来确认或否认这一点。 I.E NTFS 我想知道 NTFS 是否支持直接操作符号链接(symbolic link)记录,以便我可以将符号链接(symbolic link)移动到另一台计算机。
我知道 Windows 软链接(soft link)文件 (.lnk) 不受此限制,但它们不适合测试目的。
我的目标是从虚拟机复制符号链接(symbolic link),然后将其上传到我正在测试的服务器。
这可能吗? (我的印象是它不是。)据我所见,Windows 上的每个程序绝对会将硬链接(hard link)视为目标文件。有没有办法解决这个问题,也许是使用特殊的编辑器暂时损坏文件?如果符号链接(symbolic link)作为文件系统上的普通文件存在,是否可以更改符号链接(symbolic link)以便将其移动到非 Windows 操作系统以供进一步使用?
让我知道这是否是服务器故障的更好问题。由于这与安全性没有直接关系,更多的是安全练习服务中的普通技术问题,我认为它不适合 Stack Exchange 安全性。
最佳答案
很难提供非常直接的答案。我从事备份/修复/镜像项目,我通过 Web 服务将整个磁盘镜像复制到服务器 - 因此,可以做你想做的事,但有很多需要考虑的因素。
硬链接(hard link)
通常假设硬链接(hard link)无法相互区分,但是,链接文件与其“原始”文件之间存在细微差别。不同之处在于,对 $MFT 的查询(在 winapi 函数 DeviceIOControl 上使用与 USN 相关的参数)将仅返回其中一个文件。这可能被视为原始 文件。然后,您可以调用 winapi 函数 NtQueryInformationFile 来枚举硬链接(hard link)。
符号链接(symbolic link)和联结是不同的动物...
通过从中获取属性,您可以知道文件夹 是连接点还是符号链接(symbolic link)。如果它是联结或符号链接(symbolic link),则属性中有一个 ReparsePoint 标志。顺便说一句 - 联结和符号链接(symbolic link)之间的区别在于联结是重定向到同一卷上的另一个位置,而符号链接(symbolic link)是重定向到非卷位置。无论哪种方式,重定向目标始终是另一个文件夹。
有趣的是,符号链接(symbolic link)和联结看起来和操作都像文件夹,而它们实际上是包含重定向信息的文件。当您打开它们时,NTFS 通常会查看重定向,并打开重定向目标。 NTFS 检查重定向目标的权限,因此作为攻击,这可能不是一个可靠的策略。
打开联结/符号链接(symbolic link)时,您可以添加标志 FILE_FLAG_OPEN_REPARSE_POINT。执行此操作时,NTFS 不会执行重定向,但会打开内容,这实际上是重定向信息,假设您知道该信息的格式,则可以在以下位置重建联结/符号链接(symbolic link)服务器。请注意,重定向可能指向一个可能不存在的位置,或者可能只是暂时存在的。这是预期的,因为某些网络资源可能并不总是可用。
因此,简而言之,复制联结或符号链接(symbolic link)是可能的……而复制硬链接(hard link)名义上意味着复制文件……考虑到上述微妙之处。只要目标文件存在,您也可以手动创建硬链接(hard link)。
对于硬链接(hard link),NTFS 安全图片中有一个有趣的问题。如果用户有权访问文件,并且您在用户无权访问的文件夹中创建了指向该文件的硬链接(hard link),则用户仍然可以使用硬链接(hard link)的路径打开该文件。这是因为链接和原始文件都指向磁盘上的同一个文件(和安全信息)。在任何链接上更改的权限会影响所有链接。如果不知道这一点,您可能会无意中对文件系统造成严重破坏:-)
我知道这有点乱七八糟,所以让我这样总结一下:
NTFS 目录条目可以是文件夹或文件。硬链接(hard link)是所有指向一个文件的目录条目。符号链接(symbolic link)和联结实际上是文件,在大多数实际用途中表现得像文件夹(直到您知道如何获取如上所述的重定向信息)。
关于windows - 在 Windows/NTFS 上可以将符号链接(symbolic link)移动到另一台计算机吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39735814/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby数组,我们在StackOverflow上找到一
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html
我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的
我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?
我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西: