分类 技术 下的文章

我们通过实际升级测试了 Linux Mint 升级工具(mintupgrade GUI)。这是我们的发现。

这个工具正在开发中,可能包含错误,除非你想实验一下,否则请不要在你的日常中使用它。

Linux Mint 升级工具

Linux Mint 团队 宣布,他们建立了一个新的工具来升级 Linux Mint 的主要版本。它被称为 “mintupgrade2”。它目前正在开发中,计划用于升级主要版本。例如,从 Linux Mint 20 到 21,而不是小版本的升级。

虽然你可以使用标准的 apt 命令来升级版本,然而,Mint 团队认为主要版本的升级是很棘手的。新用户很难顺利升级,因为它涉及到终端和一套复杂的命令步骤。

此外,这个图形用户界面是对 mintupgrade 程序的封装,并带有一些附加功能,它带来了一套系统前检查和一键修复的升级过程。

除此之外,mintupgrade 还会检查你是否连接到电源、系统是否是最新的、磁盘空间的可用性等等。

为了让大家了解它的外观和工作情况,我们使用 LMDE 4 设置了一个测试平台做了个测试。

但在这之前,让我快速介绍一下它的功能:

  • 完全由 GUI 驱动的升级过程
  • 多语言支持
  • 升级前检查:系统备份、电源、磁盘空间、删除的软件包列表
  • 可配置
  • 提醒你来自上一个版本的孤儿软件包
  • 给你修复问题的选项

它是如何工作的

当我们通过命令 mintupgrade 运行这个 Mint 升级工具时,这个图形用户界面程序友好的欢迎屏幕是一个很好的起点,它开启了升级过程,然后它自己开始进行一系列的检查。

Starting the upgrade process

除此之外,当它在你的系统中发现一些问题时,它会停下来并给你足够的细节。当你点击“修复”后,它就可以再次恢复进程。

不止如此。如果由于网络或互联网或任何其他问题而中断,它也可以恢复升级过程。

在我们的测试过程中,该工具在我们的测试系统中发现了以下错误,只需点击一下就能修复它们。

Apt Cache check

Mint Upgrade detects that system snapshots are not present

Check for Orphan Packages

Status before upgrade

Mint Upgrade can detect the packages that require a downgrade

最后,我们成功地将一个测试系统从 LMDE 4 升级到 LMDE 5。

Upgrade Complete

如何获得这个升级工具

使用下面的命令,该工具的安装很简单。但正如该团队所建议的,它现在处于 BETA 状态,所以不要用它来进行正式场合的升级。

sudo apt update
sudo apt install mintupgrade

结束语

最后,我认为这是 Linux Mint 团队的最好的工具之一。正如你在上面看到的,它自己处理了许多错误。我所做的只是点击“修复”按钮。而这个工具足够聪明,能够理解所有的故障点,并负责补救。

mintupgrade 工具 将在 Linux Mint 21 “Vanessa” 发布前发布,大约在 2022 年第三季度末或第四季度初。


via: https://www.debugpoint.com/2022/04/mint-upgrade-tool/

作者:Arindam 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

这些方便的 Go 构建选项可以帮助你更好地理解 Go 的编译过程。

学习一门新的编程语言最令人欣慰的部分之一,就是最终运行了一个可执行文件,并获得预期的输出。当我开始学习 Go 这门编程语言时,我先是阅读一些示例程序来熟悉语法,然后是尝试写一些小的测试程序。随着时间的推移,这种方法帮助我熟悉了编译和构建程序的过程。

Go 的构建选项提供了更好地控制构建过程的方法。它们还可以提供额外的信息,帮助把这个过程分成更小的部分。在这篇文章中,我将演示我所使用的一些选项。注意:我使用的“ 构建 build ”和“ 编译 compile ”这两个词是同一个意思。

开始使用 Go

我使用的 Go 版本是 1.16.7。但是,这里给出的命令应该也能在最新的版本上运行。如果你没有安装 Go,你可以从 Go 官网 上下载它,并按照说明进行安装。你可以通过打开一个命令提示符,并键入下面的命令来验证你所安装的版本:

$ go version

你应该会得到类似下面这样的输出,具体取决于你安装的版本:

go version go1.16.7 linux/amd64

基本的 Go 程序的编译和执行方法

我将从一个在屏幕上简单打印 “Hello World” 的 Go 程序示例开始,就像下面这样:

$ cat hello.go
package main

import "fmt"

func main() {
    fmt.Println("Hello World")
}

在讨论更高级的选项之前,我将解释如何编译这个 Go 示例程序。我使用了 build 命令,后面跟着 Go 程序的源文件名,本例中是 hello.go,就像下面这样:

$ go build hello.go

如果一切工作正常,你应该看到在你的当前目录下创建了一个名为 hello 的可执行文件。你可以通过使用 file 命令验证它是 ELF 二进制可执行格式(在 Linux 平台上)。你也可以直接执行它,你会看到它输出 “Hello World”。

$ ls
hello  hello.go

$ file ./hello
./hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped

$ ./hello
Hello World

Go 提供了一个方便的 run 命令,以便你只是想看看程序是否能正常工作,并获得预期的输出,而不想生成一个最终的二进制文件。请记住,即使你在当前目录中没有看到可执行文件,Go 仍然会在某个地方编译并生成可执行文件并运行它,然后把它从系统中删除。我将在本文后面的章节中解释。

$ go run hello.go
Hello World

$ ls
hello.go

更多细节

上面的命令就像一阵风一样,一下子就运行完了我的程序。然而,如果你想知道 Go 在编译这些程序的过程中做了什么,Go 提供了一个 -x 选项,它可以打印出 Go 为产生这个可执行文件所做的一切。

简单看一下你就会发现,Go 在 /tmp 内创建了一个临时工作目录,并生成了可执行文件,然后把它移到了 Go 源程序所在的当前目录。

$ go build -x hello.go

WORK=/tmp/go-build1944767317
mkdir -p $WORK/b001/

<< snip >>

mkdir -p $WORK/b001/exe/
cd .
/usr/lib/golang/pkg/tool/linux_amd64/link -o $WORK \
/b001/exe/a.out -importcfg $WORK/b001 \
/importcfg.link -buildmode=exe -buildid=K26hEYzgDkqJjx2Hf-wz/\
nDueg0kBjIygx25rYwbK/W-eJaGIOdPEWgwC6o546 \
/K26hEYzgDkqJjx2Hf-wz -extld=gcc /root/.cache/go-build /cc \
/cc72cb2f4fbb61229885fc434995964a7a4d6e10692a23cc0ada6707c5d3435b-d
/usr/lib/golang/pkg/tool/linux_amd64/buildid -w $WORK \
/b001/exe/a.out # internal
mv $WORK/b001/exe/a.out hello
rm -r $WORK/b001/

这有助于解决在程序运行后却在当前目录下没有生成可执行文件的谜团。使用 -x 显示可执行文件确实在 /tmp 工作目录下创建并被执行了。然而,与 build 命令不同的是,可执行文件并没有移动到当前目录,这使得看起来没有可执行文件被创建。

$ go run -x hello.go


mkdir -p $WORK/b001/exe/
cd .
/usr/lib/golang/pkg/tool/linux_amd64/link -o $WORK/b001 \
/exe/hello -importcfg $WORK/b001/importcfg.link -s -w -buildmode=exe -buildid=hK3wnAP20DapUDeuvAAS/E_TzkbzwXz6tM5dEC8Mx \
/7HYBzuaDGVdaZwSMEWAa/hK3wnAP20DapUDeuvAAS -extld=gcc \
/root/.cache/go-build/75/ \
7531fcf5e48444eed677bfc5cda1276a52b73c62ebac3aa99da3c4094fa57dc3-d
$WORK/b001/exe/hello
Hello World

模仿编译而不产生可执行文件

假设你不想编译程序并产生一个实际的二进制文件,但你确实想看到这个过程中的所有步骤。你可以通过使用 -n 这个构建选项来做到这一点,该选项会打印出通常的执行步骤,而不会实际创建二进制文件。

$ go build -n hello.go

保存临时目录

很多工作都发生在 /tmp 工作目录中,一旦可执行文件被创建和运行,它就会被删除。但是如果你想看看哪些文件是在编译过程中创建的呢?Go 提供了一个 -work 选项,它可以在编译程序时使用。-work 选项除了运行程序外,还打印了工作目录的路径,但它并不会在这之后删除工作目录,所以你可以切换到该目录,检查在编译过程中创建的所有文件。

$ go run -work hello.go
WORK=/tmp/go-build3209320645
Hello World

$ find /tmp/go-build3209320645
/tmp/go-build3209320645
/tmp/go-build3209320645/b001
/tmp/go-build3209320645/b001/importcfg.link
/tmp/go-build3209320645/b001/exe
/tmp/go-build3209320645/b001/exe/hello

$ /tmp/go-build3209320645/b001/exe/hello
Hello World

其他编译选项

如果说,你想手动编译程序,而不是使用 Go 的 buildrun 这两个方便的命令,最后得到一个可以直接由你的操作系统(这里指 Linux)运行的可执行文件。那么,你该怎么做呢?这个过程可以分为两部分:编译和链接。你可以使用 tool 选项来看看它是如何工作的。

首先,使用 tool compile 命令产生结果的 ar 归档文件,它包含了 .o 中间文件。接下来,对这个 hello.o 文件执行 tool link 命令,产生最终的可执行文件,然后你就可以运行它了。

$ go tool compile hello.go

$ file hello.o
hello.o: current ar archive

$ ar t hello.o
__.PKGDEF
_go_.o

$ go tool link -o hello hello.o

$ file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped

$ ./hello
Hello World

如果你想进一步查看基于 hello.o 文件产生可执行文件的链接过程,你可以使用 -v 选项,它会搜索每个 Go 可执行文件中包含的 runtime.a 文件。

$ go tool link -v -o hello hello.o
HEADER = -H5 -T0x401000 -R0x1000
searching for runtime.a in /usr/lib/golang/pkg/linux_amd64/runtime.a
82052 symbols, 18774 reachable
        1 package symbols, 1106 hashed symbols, 77185 non-package symbols, 3760 external symbols
81968 liveness data

交叉编译选项

现在我已经解释了 Go 程序的编译过程,接下来,我将演示 Go 如何通过在实际的 build 命令之前提供 GOOSGOARCH 这两个环境变量,来允许你构建针对不同硬件架构和操作系统的可执行文件。

这有什么用呢?举个例子,你会发现为 ARM(arch64)架构制作的可执行文件不能在英特尔(x86\_64)架构上运行,而且会产生一个 Exec 格式错误。

下面的这些选项使得生成跨平台的二进制文件变得小菜一碟:

$ GOOS=linux GOARCH=arm64 go build hello.go

$ file ./hello
./hello: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, not stripped

$ ./hello
bash: ./hello: cannot execute binary file: Exec format error

$ uname -m
x86_64

你可以阅读我之前的博文,以更多了解我在 使用 Go 进行交叉编译 方面的经验。

查看底层汇编指令

源代码并不会直接转换为可执行文件,尽管它生成了一种中间汇编格式,然后最终被组装为可执行文件。在 Go 中,这被映射为一种中间汇编格式,而不是底层硬件汇编指令。

要查看这个中间汇编格式,请在使用 build 命令时,提供 -gcflags 选项,后面跟着 -S。这个命令将会显示使用到的汇编指令:

$ go build -gcflags="-S" hello.go
# command-line-arguments
"".main STEXT size=138 args=0x0 locals=0x58 funcid=0x0
        0x0000 00000 (/test/hello.go:5) TEXT    "".main(SB), ABIInternal, $88-0
        0x0000 00000 (/test/hello.go:5) MOVQ    (TLS), CX
        0x0009 00009 (/test/hello.go:5) CMPQ    SP, 16(CX)
        0x000d 00013 (/test/hello.go:5) PCDATA  $0, $-2
        0x000d 00013 (/test/hello.go:5) JLS     128

<< snip >>

你也可以使用 objdump -s 选项,来查看已经编译好的可执行程序的汇编指令,就像下面这样:

$ ls
hello  hello.go

$ go tool objdump -s main.main hello
TEXT main.main(SB) /test/hello.go
  hello.go:5            0x4975a0                64488b0c25f8ffffff      MOVQ FS:0xfffffff8, CX                  
  hello.go:5            0x4975a9                483b6110                CMPQ 0x10(CX), SP                       
  hello.go:5            0x4975ad                7671                    JBE 0x497620                            
  hello.go:5            0x4975af                4883ec58                SUBQ $0x58, SP                          
  hello.go:6            0x4975d8                4889442448              MOVQ AX, 0x48(SP)                       

<< snip >>

分离二进制文件以减少其大小

Go 的二进制文件通常比较大。例如, 一个简单的 “Hello World” 程序将会产生一个 1.9M 大小的二进制文件。

$ go build hello.go
$
$ du -sh hello
1.9M    hello
$
$ file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped
$

为了减少生成的二进制文件的大小,你可以分离执行过程中不需要的信息。使用 -ldflags-s -w 选项可以使生成的二进制文件略微变小为 1.3M。

$ go build -ldflags="-s -w" hello.go
$
$ du -sh hello
1.3M    hello
$
$ file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped
$

总结

我希望这篇文章向你介绍了一些方便的 Go 编译选项,同时帮助了你更好地理解 Go 编译过程。关于构建过程的其他信息和其他有趣的选项,请参考 Go 命令帮助:

$ go help build

题图由 Ashraf ChembanPixabay 上发布。


via: https://opensource.com/article/22/4/go-build-options

作者:Gaurav Kamathe 选题:lkxed 译者:lkxed 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

通过使用 Testcloud 自动化设置过程并交付一个准备运行的虚拟机,在几分钟之内准备好一个云镜像。

 title=

如果你是一个在云端使用 Fedora qcow2 镜像 的开发者或者爱好者,在一个镜像准备使用之前,你总是不得不做一大堆初始化设置。我对此深有体会,所以我很想找到一种使设置过程更加简单的方法。碰巧,整个 Fedora 质量保证团队也有同感,所以我们开发了 Testcloud

Testcloud 是一个可以轻松的在几分钟之内准备云镜像测试的工具。它用几个命令就可以在云端自动化设置并交付准备运行的虚拟机(VM)。

Testcloud:

  1. 下载 qcow2 镜像
  2. 用你选择的名称创建实例
  3. 创建一个密码为 passw0rd,用户名为 fedora 的用户
  4. 分配一个 IP 地址,以便于你之后用 SSH 登录到云端
  5. 启动、停止、删除和列出一个实例

安装 Testcloud

要开始你的旅程,首先你必须安装 Testcloud 软件包。你可以通过终端或者“软件”应用来安装它。在这两种情况下,软件包的名字都是 testcloud 。用以下命令安装:

$ sudo dnf install testcloud -y

一旦安装完成,将你所需要的用户添加到 testcloud 用户组,这有助于 Testcloud 自动完成设置过程的剩余部分。执行这两个命令,添加你的用户到 testcloud 用户组,并通过提升组权限重启会话:

$ sudo usermod -a -G testcloud $USER
$ su - $USER

 title=

像老手一样玩转云镜像

一旦你的用户获得了所需的组权限,创建一个实例:

$ testcloud instance create <instance name> -u <url for qcow2 image>

或者,你可以使用 fedora:latest/fedora:XXXX 是你的 Fedora 发行版本)来代替 完整的 URL 地址:

$ testcloud instance create <instance name> -u fedora:latest

这将返回你的虚拟机的 IP 地址:

$ testcloud instance create testcloud272593 -u https://download.fedoraproject.org/pub/fedora/linux/releases/33/Cloud/x86_64/images/Fedora-Cloud-Base-33-1.2.x86_64.qcow2  
[...]
INFO:Successfully booted instance testcloud272593
The IP of vm testcloud272593:  192.168.122.202
------------------------------------------------------------
To connect to the VM, use the following command (password is 'passw0rd'):
ssh [email protected]

你可以用默认用户 fedora 登录,密码是 passw0rd(注意是零)。你可以使用 sshvirt-manager 或者支持连接到 libvirt 虚拟机方式来连接到它。

另一种创建 Fedora 云的方式是:

$ testcloud instance create testcloud193 -u fedora:33
 
WARNING:Not proceeding with backingstore cleanup because there are some testcloud instances running.
You can fix this by following command(s):
testcloud instance stop testcloud272593

DEBUG:Local downloads will be stored in /var/lib/testcloud/backingstores.
DEBUG:successfully changed SELinux context for image /var/lib/testcloud/backingstores/Fedora-Cloud-Base-33-1.2.x86_64.qcow2
DEBUG:Creating instance directories
DEBUG:creating seed image /var/lib/testcloud/instances/testcloud193/testcloud193-seed.img
INFO:Seed image generated successfully
INFO:Successfully booted instance testcloud193
The IP of vm testcloud193:  192.168.122.225
------------------------------------------------------------
To connect to the VM, use the following command (password is 'passw0rd'):
ssh [email protected]
------------------------------------------------------------

玩转实例

Testcloud 可以用来管理实例。这包括像列出镜像或者停止和启动一个实例等活动。

要列出实例,使用 list 子命令:

$ testcloud instance list                
Name                            IP                      State    
------------------------------------------------------------
testcloud272593                 192.168.122.202         running    
testcloud193                    192.168.122.225         running    
testcloud252793                 192.168.122.146         shutoff    
testcloud93                     192.168.122.152         shutoff

要停止一个运行的实例:

$ testcloud instance stop testcloud193  
DEBUG:stop instance: testcloud193
DEBUG:stopping instance testcloud193.

要删除一个实例:

$ testcloud instance destroy testcloud193  
DEBUG:remove instance: testcloud193
DEBUG:removing instance testcloud193 from libvirt.
DEBUG:Unregistering instance from libvirt.
DEBUG:removing instance /var/lib/testcloud/instances/testcloud193 from disk

要重启一个运行中的实例:

$ testcloud instance reboot testcloud93                                                                                        
DEBUG:stop instance: testcloud93
[...]
INFO:Successfully booted instance testcloud93
The IP of vm testcloud93:  192.168.122.152
usage: testcloud [-h] {instance,image} ...

尝试一下 Testcloud ,在评论中让我知道你的想法。


via: https://opensource.com/article/21/1/testcloud-virtual-machines

作者:Sumantro Mukherjee 选题:lujun9972 译者:hwlife 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

即使初学者也可以,并且应该采取这些步骤来保护他们的 WordPress 网站免受网络攻击。

 title=

WordPress 已经驱动了互联网 30% 的网站,它是世界上增长最快的 内容管理系统 content management system (CMS),而且不难看出原因:通过大量可用的定制化代码和插件、一流的 搜索引擎优化 Search Engine Optimization (SEO),以及在博客界超高的美誉度,WordPress 赢得了很高的知名度。

然而,随着知名度而来的,也带来一些不太好的关注。WordPress 是入侵者、恶意软件和网络攻击的常见目标,事实上,在 2019 年被黑客攻击的 CMS 中,WordPress 约占 90%

无论你是 WordPress 新用户或者有经验的开发者,这里有一些你可以采取的重要步骤来保护你的 WordPress 网站。以下 6 个关键技巧将帮助你起步。

1、选择可靠的托管主机

主机是所有网站无形的基础,没有它,你不能在线发布你的网站。但是主机的作用远不止起简单的托管你的网站,它也要对你的网站速度、性能和安全负责。

第一件要做的事情就是检查主机在它的套餐中是否包含 SSL 安全协议。

无论你是运行一个小博客或是一个大的在线商店,SSL 协议都是所有网站必需的安全功能。如果你正在进行线上交易,你还需要 高级 SSL 数字证书 ,但是对大多数网站来说,基本免费的 SSL 证书就很好了。

其他需要注意安全功能包括以下几种:

  • 日常的自动离线网站备份
  • 恶意软件和杀毒软件扫描和删除
  • 分布式服务攻击 Distributed denial of service (DDOS)保护
  • 实时网络监控
  • 高级防火墙保护

另外除了这些数字安全功能之外,你的主机供应商的 物理 安全措施也是值得考虑的。这些包括用安全警卫、闭路监控和二次验证或生物识别来限制对数据中心的访问。

2、使用安全插件

保护你的网站安全最有效且容易的方法之一是安装一个安全插件,比如 Sucuri,它是一个 GPLv2 许可的开源软件。安全插件是非常重要的,因为它们能将安全管理自动化,这意味着你能够集中精力运行你的网站,而不是花大量的时间来与在线威胁作斗争。

这些插件探测、阻止恶意攻击,并提醒你需要注意的任何问题。简言之,它们持续在后台运行,保护你的网站,这意味着你不必保持 7 天 24 小时地保持清醒,与黑客、漏洞和其他数字垃圾斗争。

一个好的安全插件会免费提供给你所有必要的安全功能,但是一些高级功能需要付费订阅。举个例子,如果你想要解锁 Sucuri 的网站防火墙 ,你就需要付费。开启 网站应用防火墙 web application firewall (WAF)阻挡常见的威胁,并为给你的网站添加一个额外的安全层,所以当选择安全插件的时候,寻找带有这个功能的插件是一个好的主意。

3、选择值得信任的插件和主题

WordPress 的快乐在于它是开源的,所以任何人、每个人都能提供他们开发的主题和插件。但当选择高质量的主题和插件时,这也抛出一些问题。

在挑选免费的主题或插件时,有一些设计较差,或者更糟糕的是,可能会隐藏恶意代码。

为了避免这种情况,始终从可靠的来源来获取免费主题和插件,比如 WordPress 主题库。阅读对它的评论,并研究查看开发者是否构建过其他的程序。

过时的或设计不良的主题和插件可以为攻击者进入你的网站留下“后门”或错误,这就是为什么选择时要谨慎。然而,你也应该提防无效或者破解的主题。这些已经黑客破坏了的高级主题被非法销售。你可能会购买一个无效的主题,它看起来没什么问题,但会通过隐藏的恶意代码破坏你的网站。

为了避免无效主题,不要被打折的价格所吸引,始终坚持可靠的主题商店,比如官方的 WordPress 目录。如果你在其它地方寻找,坚持选择大型且值得信任的商店,比如 Themify ,这个主题和插件商店自从 2010 年就已经在经营了。Themify 确保它的所有 WordPress 主题通过了 谷歌友好移动 Google Mobile-Friendly 测试,并在 GNU 通用公共许可证 下开源。

4、运行定期更新

这是 WordPress 的基本规则: 始终保持你的网站最新。然而,不是所有人都坚持了这个规则,只有 43% 的 WordPress 网站 运行的是最新版本。

问题是,当你的网站过期的时候,由于它在安全和性能修复方面落后的原因,容易受到故障、漏洞、入侵和崩溃的影响。过期的网站不能像更新的网站一样修复漏洞,攻击者能够分辨出哪些网站是过期的。这意味着他们能够依此来搜索最易受攻击的网站并袭击它们。

这就是为什么你始终要运行最新的 WordPress 版本的原因。为了保持网站安全处于最强的状态,你必须更新你的插件和主题,以及你的核心 WordPress 软件。

如果你选择一个受管理的 WordPress 托管套餐,你可能会发现你的供应商会为你检查并运行更新,以了解你的主机是否提供了软件和插件更新。如果没有,你可以安装一个开源插件管理器。比如 GPLv2 许可的 Easy Updates Manager plugin 作为替代品。

5、强化你的登录

除了通过仔细选择主题和安装安全插件来创建一个安全的 WordPress 网站外,你还需要防止未经授权的登录访问。

密码保护

如果你在使用 容易猜到的短语 比如 “123456” 或 “qwerty” ,第一步要做的增强登录安全最简单的方法是更改你的密码。

尝试使用一个长的密码而不是一个单词,这样它们很难被破解。最好的方式是用一系列你容易记住且不相关的单词合并起来。

这里有一些其它的提示:

  • 绝不要重复使用密码
  • 密码不要包括像家庭成员的名字或者你喜欢的球队等明显的单词
  • 不要和任何人分享你的登录信息
  • 你的密码要包括大小写和数字来增加复杂程度
  • 不要在任何地方写下或者存储你的登录信息
  • 使用 密码管理器

变更你的登录地址

将默认登录网址从标准格式 yourdomain.com/wp-admin 变更是一个好主意。这是因为黑客也知道这个缺省登录网址,所以不变更它会有被暴力破解的风险。

为避免这种情况,可以将登录网址变更为不同的网址。使用开源插件比如 GPLv2 许可的 WPS Hide Login 可以更加安全、快速和轻松的自定义登录地址。

应用双因素认证

为了提供更多的保护,阻止未授权的登录和暴力破解,你应该添加双因素认证。这意味着即使有人 确实 得到了你的登录信息,但是他们还需要一个直接发送到你的手机上的验证码,来获得对你的 WordPress 网站管理的权限。

添加双因素认证是非常容易的,只需要安装另一个插件,在 WordPress 插件目录搜索 “two-factor authentication” ,然后选择你要的插件。其中一个选择是 Two Factor ,这是一个流行的 GPLv2 许可的插件,已经有超过 10000 次安装。

限制登录尝试

WordPress 可以让你多次猜测登录信息来帮助你登录。然而,这对黑客尝试获取未授权访问 WordPress 网站并发布恶意代码也是有帮助的。

为了应对暴力破解,安装一个插件来限制登录尝试,并设置你允许猜测的次数。

6、禁用文件编辑功能

这不是一个适合初学者的步骤,除非你是个自信的程序员,不要尝试它。并且一定要先备份你的网站。

那就是说,如果你真的想保护你的 WordPress 网站,禁用文件编辑功能 一个重要的措施 。如果你不隐藏你的文件,它意味着任何人从管理后台都可以编辑你的主题和插件代码,如果入侵者进入,那就危险了。

为了拒绝未授权的访问,转到你的 .htaccess 文件并输入:

<Files wp-config.php>
order allow,deny
deny from all
</Files>

或者,要从你的 WordPress 管理后台直接删除主题和插件的编辑选项,可以添加编辑你的 wp-config.php 文件:

define( 'DISALLOW_FILE_EDIT', true );

保存并重新加载这个文件,插件和主题编辑器将会从你的 WordPress 管理后台菜单中消失,阻止任何人编辑你的主题或者插件代码,包括你自己。如果你需要恢复访问你的主题和插件代码,只需要删除你添加在 wp-config.php 文件中的代码即可。

无论你阻止未授权的访问,还是完全禁用文件编辑功能,采取行动保护你网站代码是很重要的。否则,不受欢迎的访问者编辑你的文件并添加新代码是很容易的。这意味着攻击者可以使用编辑器从你的 WordPress 站点来获取数据,或者甚至利用你的网站对其他站点发起攻击。

隐藏文件更容易的方式是利用安全插件来为你服务,比如 Sucuri 。

WordPress 安全概要

WordPress 是一个优秀的开源平台,初学者和开发者都应该享受它,而不用担心成为攻击的受害者。遗憾的是,这些威胁不会很快消失,所以保持网站的安全至关重要。

利用以上措施,你可以创建一个更加健壮、更安全的保护水平的 WordPress 站点,并给自己带来更好的使用体验。

保持安全是一个持续的任务,而不是一次性的检查清单,所以一定要定期重温这些步骤,并在建立和使用你的CMS时保持警惕。


via: https://opensource.com/article/20/4/wordpress-security

作者:Lucy Carney 选题:lujun9972 译者:hwlife 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Fedora 服务器版操作系统可以运行在类似树莓派的单板计算机(SBC)上。这篇文章针对的用户是想要充分利用实体服务器系统,并使用类似 Cockpit 的内置工具进行数据备份和个人数据的恢复。这里描述了备份的 3 个阶段。

必要的准备

想要使用本指南,你所需要的是一个运行着的 Fedora Linux 工作站和以下的项目:

  • 你应该阅读、理解和实践 Fedora 文档中 服务器安装管理 的要求
  • 一块用来测试 Fedora Linux 的 SBC(单板计算机)。在这里查看 硬件需求
  • Fedora ARM 服务器 原始镜像 & ARM 镜像安装器
  • SD 存储卡(64 GB / Class 10)和 SSD 设备两选一
  • 以太网 / DHCP 预留 IP 地址或者静态 IP 地址
  • 提供了 ssh 密钥的 Linux 客户端工作站
  • 选择云存储服务
  • 有额外可用的 Linux 工作站

对于这套环境,在写这篇文章的时候,由于成本和可用性的原因,我选择树莓派 3B+/4B+ (其中一个用来热切换)。当使用 Cockpit 远程连接树莓派服务器时,你可以将树莓派放到路由器附近以便设置。

加强服务器的安全

在 SBC 完成服务器的安装和管理后,用 firewalld 加强服务器的安全是一个好的做法。

连接存储设备到服务器之前,一旦服务器在线你必须设置好防火墙。firewalld 是基于区域的防火墙。在依照 Fedora 文档完成安装和管理指南之后,创建一个名为 FedoraServer 的预定义区域。

firewalld 里的富规则

富规则 rich rule 用来阻止或者允许一个特定的 IP 地址或者地址段。下面这条规则只从(客户端工作站)注册的 IP 地址接受 SSH 连接,并断开其它的连接。在 Cockpit 终端或者客户端工作站终端运行命令是通过 ssh 来连接到服务器的。

firewall-cmd --add-rich-rule='rule family=ipv4 source address=<registered_ip_address>/24 service name=ssh log prefix="SSH Logs" level="notice" accept'

拒绝所有主机的 ping 请求

使用这个命令来设置 icmp 拒绝,并且不允许 ping 请求:

firewall-cmd --add-rich-rule='rule protocol value=icmp reject'

要进行其它防火墙控制,比如管理端口和区域,请查阅以下链接。请注意错配防火墙可能会使安全出现漏洞受到攻击。

在 Cockpit 中管理防火墙
firewalld 规则

配置文件服务器的存储

下一步是连接存储设备到 SBC,然后使用 Cockpit 对新插入的存储设备进行分区。使用 Cockpit 的图形化服务器管理界面,管理一个家庭实验室(可以是一个或者多个服务器)比之前更加简单。Fedora Linux 服务器标准提供了 Cockpit。

在这个阶段,一个通过 SBC 的 USB 插口接电的 SSD 设备无需额外电源供给就可以工作。

  • 将存储设备连接到 SBC 的 USB 接口
  • 运行之后(按上面的“必要的准备”所设置的那样),然后在你的客户端工作站浏览器上访问 机器的 IP 地址:9090
  • 登录进 Cockpit 之后,点击 Cockpit 页面顶部的“ 打开管理访问权限 Turn on administrative access
  • 点击左边面板的 “ 存储 Storage ” 按钮
  • 选择下面显示的 “ 驱动器 Drives ”,然后分区并格式化一个空白的存储设备 Cockpit Storage management
  • 在选定的存储设备这个界面上,创建一个新的分区表或者格式化并创建新的分区。当初始化磁盘的时候,在 “ Partitioning 分区 ” 类型选项上,选择 “GPT 分区表”
  • 选择一个文件系统类型,这里选择 “EXT4” 。这对于一个限制 I/O 能力(比如 USB 2.0 接口)和限制带宽(小于 200MB/s)的设备是适合的 Create a partition in Cockpit
  • 要在设备上创建单个占据整个存储空间的分区,指定它的挂载点,比如 /media 然后点击 “ 确定 Ok ” 。
  • 点击 “ Create partition 创建分区 ”,创建一个挂载点为 /media 的新分区。

创建备份和恢复备份

备份很少是一刀切的。这里有一些选择比如数据备份在哪里,备份数据的步骤,验证一些自动化,并确定怎样来恢复备份了的数据。

Backup workflow – version 1.0

备份 1. 用 rsync 从客户端远程同步到文件服务器(树莓派)

这个传输用到的命令是:

rsync -azP ~/source syncuser@host1:/destination

参数:

  • -a/--archive:归档
  • -z/--compress:压缩
  • -P/--progress:显示进度

要使用更多的选项运行 rsync,可以设置以下的选项:

  • --inplace:直接替换来更新目标文档
  • --append:追加数据到较短的文档中

在将文档备份到存储空间之前,源端文档的文件重复消除和压缩是减少备份数据容量最有效的方式。

每天工作结束,我会手动运行这个。一旦我设置了云备份工作流,自动化脚本是一个优势。

关于 rsync 的详细信息,请在 这里 访问 Fedora 杂志的文章。

备份 2. 使用 rysnc 从文件服务器远程同步到主要的云存储上

选择云存储是考虑的因素;

  • 成本:上传、存储空间和下载费用
  • 支持 rsyncsftp
  • 数据冗余(RAID 10 或者运行中的数据中心冗余计划)
  • 快照

符合这些云存储标准之一的就是 Hetzner 托管的 Nextcloud– 存储盒子。你不会受到供应商限制,可以自由切换而没有退出惩罚。

在文件服务器上生成 SSH 密钥并创建授权密钥文件

使用 ssh-keygen 命令为文件服务器和云存储生成一对新的 SSH 密钥对。

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key . . .

插入要求的 SSH 公钥到新的本地授权密钥文件中。

cat .ssh/id_rsa.pub >> storagebox_authorized_keys
传输密钥文件到云存储

下一步就是上传生成了的授权密钥文件到存储盒子。要做这些,先用 700 权限创建 .ssh 目录,然后用 SSH 公钥创建授权文件并赋予 600 权限。运行以下命令。

echo -e "mkdir .ssh \n chmod 700 .ssh \n put storagebox_authorized_keys .ssh/authorized_keys \n chmod 600 .ssh/authorized_keys" | sftp <username>@<username>.your-storagebox.de
通过 ssh 使用 rsync

使用 rsync 同步你的文件目录当前状态到存储盒子。

rsync --progress -e 'ssh -p23' --recursive <local_directory> <username>@<username>.your-storagebox.de:<target_directory>

这个过程被叫做推送操作,因为它 “推送” 本地系统的一个目录到一个远程的系统中去。

从云存储中恢复目录

要从存储盒子恢复目录,转换到这个目录:

rsync --progress -e 'ssh -p23' --recursive <username>@<username>.your-storagebox.de:<remote_directory> <local_directory>

备份 3. 客户端备份到第二个云储存

Deja Dup 是 Fedora 软件仓库中为 Fedora 工作站提供快速备份解决方案的工具。它拥有 GPG 加密、计划任务、文件包含(哪个目录要备份)等功能。

Backing up to the secondary cloud

Restoring files from cloud storage

归档个人数据

不是所有数据都需要 3-2-1 备份策略。这就是个人数据共享。我将一台拥有 1TB 硬盘的笔记本作为我个人数据的档案(家庭照片)。

转到设置中的 “ 共享 Sharing ” (在我的例子中是 GNOME 文件管理器)并切换滑块以启用共享。

打开 “ 文件共享 file sharing ”,“ 网络 Networks ” 和 “ 需要的密码 Required password ”,允许你使用 WebDAV 协议在你的本地网络上分享你的公共文件夹给其它的工作站。

准备回滚选项

未测试的备份并不比完全没有备份好。我在家庭实验室环境中使用 “热切换” 方法来避免像频繁的断电或者液体损坏的情况发生。然而,我的建议方案远没有达到灾难恢复计划或企业 IT 中的自动故障修复。

  • 定期运行文件恢复操作
  • 备份 ssh/GPG 密钥到一个额外的存储设备中
  • 复制一个 Fedora ARM 服务器的原始镜像到一个 SD 卡中
  • 在主云存储中保持全备份的快照
  • 自动化备份过程最小化减少人为错误或者疏忽

使用 Cockpit 追踪活动并解决问题

当你的项目在成长时,你所管理的服务器数量也在增长。在 Cockpit 中追踪活动和警告可以减轻你的管理负担。你可以使用 Cockpit 的图形化界面的三种方法来归档这些。

SELinux 菜单

怎样诊断网络问题,找到日志并在 Cockpit 中解决问题:

  • 去 SELinux 中检查日志
  • 检查“ 解决方案详细信息 solution details
  • 当必要时,选择 “ 应用这个方案 Apply this solution
  • 如果必要,查看自动化脚本并运行它

SELinux logs

网络或者存储日志

服务器日志会跟踪 CPU 负载、内存使用、网络活动、存储性能和系统日志关联的详细指标。日志会组织在网络面板或者存储面板里显示。

Storage logs in Cockpit

软件更新

在预设的时间和频率下,Cockpit 可以帮助进行安全更新。当你需要时,你可以运行所有的更新。

Software updates

恭喜你在 Fedora ARM 服务器版本上搭建了一个文件/备份服务器。


via: https://fedoramagazine.org/3-2-1-backup-plan-with-fedora-arm-server/

作者:Hanku Lee 选题:lujun9972 译者:hwlife 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

MLCube 是一个新的基于基础设施规范的开源容器,被引入到基于 Python 的机器学习工作流程中,以实现可重复性。它可以利用诸如 PodmanSingularityDocker 等工具。也支持在远程平台上的执行。开发 MLCube 的 MLCommons 最佳实践工作组的主席之一是来自 Red Hat 的 Diane Feddema。这篇介绍性文章解释了如何在 Fedora Linux 上使用 Podman 运行 “hello world” MLCube 例子

Yazan Monshed 写了一篇关于 Fedora 上的 Podman 的非常有用的介绍,对这里使用的一些步骤给出了更多细节。

首先安装必要的依赖项。

sudo dnf -y update
sudo dnf -y install podman git virtualenv \
                    policycoreutils-python-utils

然后,按照文档的要求,设置一个虚拟环境并获得示例代码。为了确保可重复性,使用一个特定的提交,因为该项目正在积极改进。

virtualenv -p python3 ./env_mlcube 
source ./env_mlcube/bin/activate
git clone https://github.com/mlcommons/mlcube_examples.git 
cd ./mlcube_examples/hello_world
git checkout 5fe69bd
pip install mlcube mlcube-docker
mlcube describe

现在,通过编辑 $HOME/mlcube.yaml 文件,将运行器命令从 docker 改为 podman,即:

docker: docker

改为:

docker: podman

如果你使用的是 x86\_64 架构的电脑,你可以用以下方式获取容器:

mlcube configure --mlcube=. --platform=docker

你会看到一些选项:

? Please select an image: 
  ▸ registry.fedoraproject.org/mlcommons/hello_world:0.0.1
    registry.access.redhat.com/mlcommons/hello_world:0.0.1
    docker.io/mlcommons/hello_world:0.0.1
    quay.io/mlcommons/hello_world:0.0.1

选择 docker.io/mlcommons/hello_world:0.0.1 来获取容器。

如果你的电脑不是 x86\_64 架构的,你需要构建容器。改变文件 $HOME/mlcube.yaml,将这一行:

build_strategy: pull

变为:

build_strategy: auto

然后用以下方法构建容器:

mlcube configure --mlcube=. --platform=docker

要运行测试,你可能需要在目录中适当地设置 SELinux 权限。你可以通过输入以下内容来检查 SELinux 是否已经启用:

sudo sestatus

应该会有类似这样的输出:

SELinux status:                 enabled
...

Josphat MutaiChristopher SmartDaniel Walsh 解释说,在为容器使用的文件设置适当的 SELinux 策略时,你需要谨慎。在这里,你将允许容器读取和写入 workspace 目录。

sudo semanage fcontext -a -t container_file_t "$PWD/workspace(/.*)?"
sudo restorecon -Rv $PWD/workspace

现在检查目录策略:

ls -Z

输出结果类似于:

unconfined_u:object_r:user_home_t:s0 Dockerfile
unconfined_u:object_r:user_home_t:s0 README.md
unconfined_u:object_r:user_home_t:s0 mlcube.yaml
unconfined_u:object_r:user_home_t:s0 requirements.txt
unconfined_u:object_r:container_file_t:s0 workspace

现在运行这个例子:

mlcube run --mlcube=. --task=hello --platform=docker
mlcube run --mlcube=. --task=bye --platform=docker

最后,检查输出:

cat workspace/chats/chat_with_alice.txt

有类似于以下的文字:

Hi, Alice! Nice to meet you.
Bye, Alice! It was great talking to you.

你可以按照 这里 的描述创建你自己的 MLCube。欢迎对 MLCube 示例库 做出贡献。Udica 是一个新项目,它承诺为容器提供更精细的 SELinux 策略控制,便于系统管理员应用。这些项目的积极开发正在进行中。对它们进行测试并提供反馈,将有助于使带有 SELinux 的系统上的安全数据管理更容易、更有效。


via: https://fedoramagazine.org/mlcube-and-podman/

作者:Benson Muite 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出