2021SC@SDUSC
文章目录
- 项目简介
- 人员分工
- 系统的相关配置
-
- 硬软环境
- SandBox安装
- 各编程语言的编译、执行环境
-
- Python
- C++
- C
- Java
- SFTP
-
- 安装SFTP服务
- 目标
- 操作步骤
-
- sftp用户、用户组的创建
- 创建文件服务器目录
- 权限配置
- 重启SSH
- RabbitMQ
-
- Ubuntu
-
- 下载
- 开启、关闭
- 启动Web管理端
- MacOS
-
- 下载
- 用户及权限管理
-
- 配置环境变量
- 启动、关闭
- 个人任务
-
- Sandbox
- SduOJ-Jduge-Server
项目简介
本项目名称为学生程序设计能力提升平台,是山东大学软件学院学生开发的一套程序在线评测系统。
开发该系统的目的是丰富教学活动。在一些编程相关的课程中,教师可以通过该系统为学生布置一系列编程题目,让整个教学活动不再局限于过去死板的教学方式,使得学生能在实践中加深对知识的理解。
人员分工
- alphahao:后端框架搭建,后端用户鉴权处理框架搭建springsecurity,学生身份相关功能,题解提交相关功能,登录注册相关功能,tomcat、nginx、mysql、rabbitmq搭建配置
- wocaizhale:出题功能、题目的浏览、搭建文件服务器、保存和维护测试点文件
- Nothing:题目集模块、用户组模块、学生信息管理
- 孤名为義:需求设计、整理文档、系统优化、补充功能
- 养猪去: 判题沙箱程序(c语言开发)的调研、技术选型、文档整理、判题端(Java)的开发、引入rabbitmq等中间件、引入zookeeper、保证系统可扩容性
系统的相关配置
硬软环境
-
硬件配置
阿里云服务器 2核 2 GiB 40GB 云盘
-
操作系统
Ubuntu 20.04 64位
-
络
公 IP 47.102.153.133
带宽 1Mbps
SandBox安装
下面部分命令的执行需要root权限(云服务器通过实例密码登录进去,直接具有root权限)
更新下载源
沙箱程序依赖Linux的和工作。
下面需要在文件夹下执行命令
安装
安装完默认在
检查
各编程语言的编译、执行环境
Python
在上述的Python2、Python3默认就有,如果没有,使用apt安装即可
路径:
C++
g++也是默认就有
C
Java
由于系统用做OJ环境,JDK版本只需选择高一点即可,这里就下载了 openjdk-11
也许以后还会支持其他,不过暂时就这么几个吧。
SFTP
安装SFTP服务
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的 络的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统。 SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口 默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对 络安全性要求更高时,可以使用SFTP代替FTP。
Ubuntu默认只安装openssh-client,需要手动安装openssh-server或者sftp-server。
目标
在Ubuntu系统上开通sftp文件服务,允许某些用户上传及下载文件。
但是这些用户只能使用sftp传输文件,不能使用SSH终端访问服务器,并且sftp不能访问系统文件。
系统管理员则既能使用sftp传输文件,也能使用SSH远程管理服务器。
操作步骤
sftp用户、用户组的创建
- 添加sftp用户,创建 sftp 用户组
- 创建sftp服务器的管理员身份,并且加入 ssh用户组(不限制他的shell操作权限)
创建文件服务器目录
- 创建服务器文件目录
默认允许所有用户或者用户组登录,若仅允许指定用户或者用户组访问,按照以下格式配置。
权限配置
在sshd_config文件的最后,添加以下内容:
这样配置的目的是:
-
只允许ssh-uers及sftp-users通过SSH访问系统,其中ssh-uers用户组可以使用ssh,并且不受其他限制。
而SFTP用户组仅能使用SFTP进行访问,且不能使用shell
-
针对sftp-users用户,额外增加一些设置:将“/home/sftp_root”设置为该组用户的系统根目录(因此它们将不能访问该目录之外的其他系统文件;
-
禁止TCP Forwarding和X11 Forwarding
另外需要注意的是:ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是 750 或者 755。
需要注意的一点的是,现在所有需要远程连接的用户都必须加入 ssh-users 才行。
如将用户 songyangji 加入 ,这样ta就可以使用ssh连接本机。
- 限制ssh连接的访问IP
仍然是
重启SSH
RabbitMQ
Ubuntu
下载
先更新一下资源。
由于rabbitMq需要erlang语言的支持,在安装rabbitMq之前需要安装erlang。
安装rabbitmq
默认下载的地址
开启、关闭
直接到/sbin目录下执行也是可以的。
启动Web管理端
安装了Rabbitmq后,默认也安装了该管理工具,执行命令即可启动
访问 localhost:15672
出现一下即可。

MacOS
下载
用户及权限管理
- 添加用户
- 设置用户身份
- 添加权限
配置环境变量
启动、关闭
访问Web端是一样的。
个人任务
Sandbox
- 学习使用、源码分析
如何构建符合 POSIX 实用程序约定的Shell-CLI。 - sandbox 日志模块的构建与分析
记录sandbox程序的核心日志,方便debug。 - linux读写文件相关CLib函数、系统调用分析
sandbox程序的基础使用。 - linux使用进程、线程原语的分析
sandbox程序的基础使用。 - linux用户权限的动态设置的分析
如何在程序中动态控制用户的使用权限, 防止外来的代码对系统产生破坏。 - linux 的代码分析
如何限制用户使用代码的资源使用。 - linux 的使用分析
如何使用户进程在一个安全的计算模式下运行,也就是 secure computing mode的实现。 - 进程的处理器核心亲缘性控制
如何避免用户进程在多个处理器核心上切换。
SduOJ-Jduge-Server
- Slf4j、Log4j2
评测机的异常抛出多,调用链长,合理的日志构建对于debug的是必须的。 - SFTP 、jsch
jsch的线程安全性分析,使用Apache的 Commons pool2 构建 SFTP的连接池。 - ProcessBuilder
Java、C程序的沟通的桥梁,分析Java启动、监控、控制进程的代码实现。 - Commons pool2
使用 (linux shell command)和 Commons pool2 代码实现 CPU
核心调度分配池的代码实现。 - RabbitMQ
评测机与后端服务器的通信工具。- 对amqp-client客户端的代码分析,重点是 络IO和线程调度模型;
- Spring-Boot集成RabbitMQ的代码分析,重点是连接资源、线程调度、消息的可靠发布与消息的代码实现;
- 针对本次项目的使用特点,自研以MQ为 络通信工具的RPC框架的实现;
- zookeeper
使用 zookeeper 这一经典的 分布式服务协调框架进行多个评测机的管理,做到服务的高可用。
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91337 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!