在多个用户的帐户中隐藏工作

oad*_*ams 4 security

我目前正在做一个集群编程课的作业。该类已在集群上获得一个帐户,因此我们可以通过 ssh 进入并完成我们的工作。问题是同一个帐户是在班级中的每个人之间共享的。每个学生只需创建自己的目录并在其中工作。

显然一个问题是,学生们只能看着彼此的作品并抄袭。在提交作业之前,我不希望人们看到我的作品。

集群上没有版本控制系统,所以我不能只是从我自己的机器上拉一个存储库并处理分配,然后每次工作时推送它并删除集群上的内容。

防止他人看到我的作品的最佳方法是什么?通常我只是在我自己的机器上工作,然后在到期时上传到服务器。但是因为我没有自己的集群,所以我们都需要实际使用一个帐户。

是的,不管你信不信,这实际上是我面临的一个现实世界的问题——而不是假设。

les*_*ana 5

这个问题的真正解决方案是与您的讲师交谈,为您提供单独的帐户,或者将作业更改为小组作业。如果他/她不能或不会这样做,那么我会忽略其他学生的任何剽窃企图。当他们复制您的作品时,您不会丢失任何东西,他们会丢失。

也就是说,这是一种让其他人几乎无法访问您的源代码的方法。

you@local$ ssh shared@cluster "gcc -x c -o yourdir/secret -" < source.c
Run Code Online (Sandbox Code Playgroud)

注意 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
Run Code Online (Sandbox Code Playgroud)

如果你真的很偏执,你应该确保你正在执行真正的 gcc。其他学生可能会围绕 gcc 编写一个包装器,它在编译之前保存源代码,并将该包装器放在您的路径中。您还应该执行真正的 rm。

you@local$ ssh shared@cluster "/usr/bin/gcc -x c -o yourdir/secret - && yourdir/secret ; /bin/rm yourdir/secret" < source.c
Run Code Online (Sandbox Code Playgroud)