只要你使用 Linux 或计算机处理实际工作一段时间,迟早会遇到这样的情况:你希望两个程序访问同一份数据,但它们却要求数据位于两个不同的位置。
好在 Linux 提供了解决办法:链接。
链接分为两种:硬链接和软链接,后者也叫符号链接。
我们用一个比喻来区分它们:
- 硬链接就像给同一套公寓使用多个地址,每个地址都直接指向同一个地方,例如
Apt 2 和 Unit 2。
- 软链接就像搬家后,让邮政服务自动把寄到旧地址的邮件转寄到新地址。
从概念上说,文件系统中的文件就是一个地址,对应着该文件内容的存放位置。
硬链接是索引同一份数据的另一个地址——访问硬链接和访问原文件完全一样,都能直接获取所需数据。
软链接或符号链接则保存着原文件的名称。
访问符号链接时,Linux 会识别出它是符号链接,读取其中的原文件名称,然后通常会自动访问那个文件。
多数情况下,这两种方式都能访问到原始数据,但背后的机制不同。
硬链接听起来更简单(比如,上面解释硬链接只用了一句话,解释软链接却用了两句),但它存在一些缺点和实现上的陷阱,因此软链接或符号链接的使用远比硬链接普遍。
这个挑战将带你学习符号链接,也称为 symlink。
符号链接使用 ln 命令创建,语法是 ln -s TARGET LINK_NAME。
TARGET 是链接要指向的路径,LINK_NAME 则是你要创建的新路径。
例如:
hacker@dojo:~$ cat /tmp/myfile
This is my file!
hacker@dojo:~$ ln -s /tmp/myfile /home/hacker/ourfile
hacker@dojo:~$ cat ~/ourfile
This is my file!
hacker@dojo:~$
可以看到,访问符号链接就能读到原文件的内容!
在这个例子中,/tmp/myfile 是目标,/home/hacker/ourfile 是链接名称。
有几种方法可以判断一个文件是否为符号链接。
例如,file 命令接收一个文件名并告诉你它的文件类型,也能识别符号链接:
hacker@dojo:~$ file /tmp/myfile
/tmp/myfile: ASCII text
hacker@dojo:~$ file ~/ourfile
/home/hacker/ourfile: symbolic link to /tmp/myfile
hacker@dojo:~$
好了,现在你来试试!
这一关的 flag 和往常一样,保存在 /flag 中,但 /challenge/catflag 读取的却是 /home/hacker/not-the-flag。
本挑战中的链接名称就是 /home/hacker/not-the-flag。
选择合适的链接目标,让 /challenge/catflag 上当,把 flag 交给你!
警告:如果之前的尝试在 /home/hacker/not-the-flag 留下了文件或链接,请先删除它,让 ln 能在这个位置创建符号链接。
通过 SSH 连接
在
个人设置 中绑定你的 SSH 公钥后,使用以下命令连接:
ssh hacker@dojo.pwn.college