![隐藏多个用户帐户中的工作](https://linux22.com/image/1539/%E9%9A%90%E8%97%8F%E5%A4%9A%E4%B8%AA%E7%94%A8%E6%88%B7%E5%B8%90%E6%88%B7%E4%B8%AD%E7%9A%84%E5%B7%A5%E4%BD%9C.png)
我目前正在完成集群编程课程的作业。该类已在集群上获得一个帐户,因此我们可以通过 ssh 登录并完成我们的工作。问题是班级中的每个人都共享一个帐户。每个学生只需创建自己的目录并在其中工作。
显然,一个问题是学生可以互相看别人的作品并进行抄袭。我不希望人们在作业提交之前看到我的作品。
集群上没有版本控制系统,因此我不能只从自己的计算机中提取存储库并处理作业,然后每次工作时推送它并删除集群上的内容。
防止他人看到我的作品的最佳方法是什么?通常我只是在自己的机器上工作,然后在到期时上传到服务器。但因为我没有自己的集群,所以我们都需要实际使用一个帐户。
是的,不管你相信与否,这实际上是我面临的一个现实世界的问题——而不是一个假设。
答案1
解决这个问题的真正方法是和你的老师谈谈,让你单独记账,或者将作业改为小组作业。如果他/她不能或不会这样做,那么我就会忽略其他学生的任何抄袭尝试。当他们抄袭你的作品时,你不会失去任何东西,他们只是失去了。
也就是说,这里有一种方法可以让其他人几乎无法访问您的源代码。
you@local$ ssh shared@cluster "gcc -x c -o yourdir/secret -" < source.c
请注意 gcc 命令末尾的破折号。这意味着 gcc 将从 stdin 读取源代码。这source.c
将从您的本地计算机编译到yourdir/secret
集群上。秘密源代码永远不会作为集群上的“真实”文件存在。它只会作为流存在于某个缓冲区中(我假设是在 sshd 进程中)。
如果您的代码不是用 C 语言编写的,那么您将不得不更改选项c
中的-x c
。请参阅这里了解更多相关信息。
其他学生仍然可以获取您编译的文件并反编译它。为了最大限度地减少这种风险,您可以在编译和执行后立即删除该文件。
you@local$ ssh shared@cluster "gcc -x c -o yourdir/secret - && yourdir/secret ; rm yourdir/secret" < source.c
如果你真的很偏执,你应该确保你正在执行真正的 gcc。其他学生可能会围绕 gcc 编写一个包装器,它在编译之前保存源代码,并将该包装器放置在您的路径中。您还应该执行真正的 rm。
you@local$ ssh shared@cluster "/usr/bin/gcc -x c -o yourdir/secret - && yourdir/secret ; /bin/rm yourdir/secret" < source.c
答案2
Afaik,没有办法有效地向自己隐藏某些内容。您可以将代码隐藏在点文件夹的深层链中,但只要您能看到它,您的同学也会看到它,因为他们就是你。如果您想使用您的代码,您需要查看它。
您可以做的是设置一个类似的系统,例如在 VirtualBox 或单独的机器上安装相同的操作系统(注意架构),仅在此系统上编写代码,编译它,然后仅将二进制文件复制到集群将它们提交到队列中。
你的对手仍然可以访问字节码,但理解位和字节比理解 C 源代码要困难得多;-)
答案3
完美的答案是加密,但如果您无法从自己的计算机中提取数据,那么您可能无法安装任何磁盘、卷或文件加密软件。
也就是说,老师们必须知道他们在做什么,如果他们选择让你们所有人使用公共空间,背后一定有原因。也许是为了学习信任和协作?为什么不问他们呢?
编辑:既然您可以从服务器中提取数据,为什么不使用rsync
呢?
答案4
关于加密主题,如果您使用 vi 或 vim 编辑代码,则可以使用 vim 的内置加密:vim -x myfile.c
对于新文件。
在 vim 7.3 之前它很容易被破解,但至少它可以阻止随意的浏览。