分类 技术 下的文章

Live CD 对于很多任务是很有用的,例如:

  • 将操作系统安装到一个硬盘驱动器
  • 修复一个启动加载程序或执行其它救援模式操作
  • 为 Web 浏览提供一个相适应的最小环境
  • …以及更多的东西

作为使用 DVD 和 USB 驱动器来存储你的 Live CD 镜像是一个替代方案,你可以上传它们到一个不太可能丢失或损坏的 iSCSI 服务器中。这个指南向你展示如何加载你的 Live CD 镜像到一个 ISCSI 服务器上,并使用 iPXE 启动加载程序来访问它们。

下载一个 Live CD 镜像

$ MY_RLSE=27
$ MY_LIVE=$(wget -q -O - https://dl.fedoraproject.org/pub/archive/fedora/linux/releases/$MY_RLSE/Workstation/x86_64/iso | perl -ne '/(Fedora[^ ]*?-Live-[^ ]*?\.iso)(?{print $^N})/;')
$ MY_NAME=fc$MY_RLSE 
$ wget -O $MY_NAME.iso https://dl.fedoraproject.org/pub/archive/fedora/linux/releases/$MY_RLSE/Workstation/x86_64/iso/$MY_LIVE

上面的命令下载 Fedora-Workstation-Live-x86_64-27-1.6.iso Fedora Live 镜像,并保存为 fc27.iso。更改 MY_RLSE 的值来下载其它档案版本。或者,你可以浏览 https://getfedora.org/ 来下载最新的 Fedora live 镜像。在 21 之前的版本使用不同的命名约定,必需在这里手动下载。如果你手动下载一个 Live CD 镜像,设置 MY_NAME 变量为不带有扩展名的文件的基本名称。用此方法,下面部分中命令将引用正确的文件。

转换 Live CD 镜像

使用 livecd-iso-to-disk 工具来转换 ISO 文件为一个磁盘镜像,并添加 netroot 参数到嵌入的内核命令行:

$ sudo dnf install -y livecd-tools
$ MY_SIZE=$(du -ms $MY_NAME.iso | cut -f 1)
$ dd if=/dev/zero of=$MY_NAME.img bs=1MiB count=0 seek=$(($MY_SIZE+512)) 
$ MY_SRVR=server-01.example.edu 
$ MY_RVRS=$(echo $MY_SRVR | tr '.' "\n" | tac | tr "\n" '.' | cut -b -${#MY_SRVR}) 
$ MY_LOOP=$(sudo losetup --show --nooverlap --find $MY_NAME.img) 
$ sudo livecd-iso-to-disk --format --extra-kernel-args netroot=iscsi:$MY_SRVR:::1:iqn.$MY_RVRS:$MY_NAME $MY_NAME.iso $MY_LOOP 
$ sudo losetup -d $MY_LOOP

上传 Live 镜像到你的服务器

在你的 ISCSI 服务器上创建一个目录来存储你的 live 镜像,随后上传你修改的镜像到其中。

对于 21 及更高发布版本:

$ MY_FLDR=/images 
$ scp $MY_NAME.img $MY_SRVR:$MY_FLDR/

对于 21 以前发布版本:

$ MY_FLDR=/images 
$ MY_LOOP=$(sudo losetup --show --nooverlap --find --partscan $MY_NAME.img) 
$ sudo tune2fs -O ^has_journal ${MY_LOOP}p1 
$ sudo e2fsck ${MY_LOOP}p1 
$ sudo dd status=none if=${MY_LOOP}p1 | ssh $MY_SRVR "dd of=$MY_FLDR/$MY_NAME.img" 
$ sudo losetup -d $MY_LOOP

定义 iSCSI 目标

在你的 iSCSI 服务器上运行下面的命令:

$ sudo -i 
# MY_NAME=fc27 
# MY_FLDR=/images 
# MY_SRVR=`hostname` 
# MY_RVRS=$(echo $MY_SRVR | tr '.' "\n" | tac | tr "\n" '.' | cut -b -${#MY_SRVR}) 
# cat << END > /etc/tgt/conf.d/$MY_NAME.conf 
<target iqn.$MY_RVRS:$MY_NAME>
    backing-store $MY_FLDR/$MY_NAME.img
    readonly 1
    allow-in-use yes 
</target> 
END 
# tgt-admin --update ALL

创建一个可启动 USB 驱动器

iPXE 启动加载程序有一个 sanboot 命令,你可以使用它来连接并启动托管于你 ISCSI 服务器上运行的 live 镜像。它可以以很多不同的格式编译。最好的工作格式依赖于你正在运行的硬件。例如,下面的说明向你展示如何在一个 USB 驱动器上从 syslinux链式加载 iPXE。

首先,下载 iPXE,并以它的 lkrn 格式构建。这应该作为一个工作站上的普通用户完成:

$ sudo dnf install -y git 
$ git clone http://git.ipxe.org/ipxe.git $HOME/ipxe 
$ sudo dnf groupinstall -y "C Development Tools and Libraries"
$ cd $HOME/ipxe/src 
$ make clean 
$ make bin/ipxe.lkrn 
$ cp bin/ipxe.lkrn /tmp

接下来,准备一个带有一个 MSDOS 分区表和一个 FAT32 文件系统的 USB 驱动器。下面的命令假设你已经连接将要格式化的 USB 驱动器。注意:你要格式正确的驱动器!

$ sudo -i 
# dnf install -y parted util-linux dosfstools 
# echo; find /dev/disk/by-id ! -regex '.*-part.*' -name 'usb-*' -exec readlink -f {} \; | xargs -i bash -c "parted -s {} unit MiB print | perl -0 -ne '/^Model: ([^(]*).*\n.*?([0-9]*MiB)/i && print \"Found: {} = \$2 \$1\n\"'"; echo; read -e -i "$(find /dev/disk/by-id ! -regex '.*-part.*' -name 'usb-*' -exec readlink -f {} \; -quit)" -p "Drive to format: " MY_USB
# umount $MY_USB? 
# wipefs -a $MY_USB 
# parted -s $MY_USB mklabel msdos mkpart primary fat32 1MiB 100% set 1 boot on 
# mkfs -t vfat -F 32 ${MY_USB}1

最后,在 USB 驱动器上安装并配置 syslinux ,来链式加载 iPXE:

# dnf install -y syslinux-nonlinux 
# syslinux -i ${MY_USB}1 
# dd if=/usr/share/syslinux/mbr.bin of=${MY_USB} 
# MY_MNT=$(mktemp -d) 
# mount ${MY_USB}1 $MY_MNT 
# MY_NAME=fc27 
# MY_SRVR=server-01.example.edu 
# MY_RVRS=$(echo $MY_SRVR | tr '.' "\n" | tac | tr "\n" '.' | cut -b -${#MY_SRVR}) 
# cat << END > $MY_MNT/syslinux.cfg
ui menu.c32
default $MY_NAME
timeout 100
menu title SYSLINUX
label $MY_NAME
    menu label ${MY_NAME^^}
    kernel ipxe.lkrn
    append dhcp && sanboot iscsi:$MY_SRVR:::1:iqn.$MY_RVRS:$MY_NAME
END 
# cp /usr/share/syslinux/menu.c32 $MY_MNT 
# cp /usr/share/syslinux/libutil.c32 $MY_MNT 
# cp /tmp/ipxe.lkrn $MY_MNT 
# umount ${MY_USB}1

通过简单地编辑 syslinux.cfg 文件,并添加附加的菜单项,你应该能够使用这同一个 USB 驱动器来网络启动附加的 ISCSI 目标。

这仅是加载 IPXE 的一种方法。你可以直接在你的工作站上安装 syslinux 。再一种选项是编译 iPXE 为一个 EFI 可执行文件,并直接放置它到你的 ESP 中。又一种选项是编译 iPXE 为一个 PXE 加载器,并放置它到你的能够被 DHCP 引用的 TFTP 服务器。最佳的选项依赖于的环境

最后说明

  • 如果你以 IPXE 的 EFI 格式编译 IPXE ,你可能想添加 –filename \EFI\BOOT\grubx64.efi 参数到 sanboot 命令。
  • 能够创建自定义 live 镜像。更多信息参考创建和使用 live CD
  • 可以添加 –overlay-size-mb–home-size-mb 参数到 livecd-iso-to-disk 命令来创建永久存储的 live 镜像。然而,如果你有多个并发用户,你将需要设置你的 ISCSI 服务器来管理独立的每个用户的可写覆盖。这与 “如何构建一个网络启动服务器,部分 4” 一文所示类似。
  • Live 镜像在它们的内核命令行中支持一个 persistenthome 选项(例如, persistenthome=LABEL=HOME)。与经过 CHAP 身份验证的 iSCSI 目标一起使用,对于中心控制主目录,persistenthome 选项为 NFS 提供一个有趣的替代方案。

via: https://fedoramagazine.org/netboot-a-fedora-live-cd/

作者:Gregory Bartholomew 选题:lujun9972 译者:robsean 校对:wxy

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

本文是 24 天 Linux 桌面特别系列的一部分。Lumina 桌面是让你使用快速、合理的基于 Fluxbox 桌面的捷径,它具有你无法缺少的所有功能。

多年来,有一个名为 PC-BSD 的基于 FreeBSD 的桌面操作系统(OS)。它旨在作为一个常规使用的系统,因此值得注意,因为 BSD 主要用于服务器。大多数时候,PC-BSD 默认带 KDE 桌面,但是 KDE 越来越依赖于 Linux 特定的技术,因此 PC-BSD 越来越从 KDE 迁离。PC-BSD 变成了 Trident,它的默认桌面是 Lumina,它是一组小部件,它们使用与 KDE 相同的基于 Qt 的工具包,运行在 Fluxbox 窗口管理器上。

你可以在 Linux 发行版的软件仓库或 BSD 的 ports 树中找到 Lumina 桌面。如果你安装了 Lumina 并且已经在运行另一个桌面,那么你可能会发现有冗余的应用(两个 PDF 阅读器、两个文件管理器,等等),因为 Lumina 包含一些集成的应用。如果你只想尝试 Lumina 桌面,那么可以在虚拟机如 GNOME Boxes 中安装基于 Lumina 的 BSD 发行版。

如果在当前的操作系统上安装 Lumina,那么必须注销当前的桌面会话,才能登录到新的会话。默认情况下,会话管理器(SDDM、GDM、LightDM 或 XDM,取决于你的设置)将继续登录到以前的桌面,因此你必须在登录之前覆盖该桌面。

在 GDM 中:

 title=

在 SDDM 中:

 title=

Lumina 桌面

Lumina 提供了一个简单而轻巧的桌面环境。屏幕底部有一个面板,它的左侧是应用菜单,中间是任务栏,右边是系统托盘。桌面上有图标,可以快速访问常见的应用和路径。

除了这个基本的桌面结构外,Lumina 还有自定义文件管理器、PDF 查看器,截图工具、媒体播放器、文本编辑器和存档工具。还有一个配置程序可以帮助你自定义 Lumina 桌面,并且右键单击桌面可以找到更多配置选项。

 title=

Lumina 与几个 Linux 轻量级桌面非常相似,尤其是 LXQT,不同之处在于 Lumina 完全不依赖于基于 Linux 的桌面框架(例如 ConsoleKit、PolicyKit、D-Bus 或 systemd)。对于你而言,这是否具有优势取决于所运行的操作系统。毕竟,如果你运行的是可以访问这些功能的 Linux,那么使用不使用这些特性的桌面可能就没有多大意义,还会减少功能。如果你运行的是 BSD,那么在 Fluxbox 中运行 Lumina 部件意味着你不必从 ports 安装 Linux 兼容库。

为什么要使用 Lumina

Lumina 设计简单,它没有很多功能,但是你可以安装 Fluxbox 你喜欢的组件(用于文件管理的 PCManFM、各种 LXQt 应用Tint2 面板等)。在开源中,开源用户喜欢寻找不要重复发明轮子的方法(几乎与我们喜欢重新发明轮子一样多)。

Lumina 桌面是让你使用快速、合理的基于 Fluxbox 桌面的捷径,它具有你无法缺少的所有功能,并且你很少需要调整细节。试一试 Lumina 桌面,看看它是否适合你。


via: https://opensource.com/article/19/12/linux-lumina-desktop

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

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

本文是 24 天 Linux 桌面特别系列的一部分。如果你还在怀念 GNOME 2,那么 Mate Linux 桌面将满足你的怀旧情怀。

如果你以前听过这个传闻:当 GNOME3 第一次发布时,很多 GNOME 用户还没有准备好放弃 GNOME 2。Mate(以 马黛茶 yerba mate 植物命名)项目的开始是为了延续 GNOME 2 桌面,刚开始时它使用 GTK 2(GNOME 2 所基于的工具包),然后又合并了 GTK 3。由于 Linux Mint 的简单易用,使得该桌面变得非常流行,并且从那时起,它已经普遍用于 Fedora、Ubuntu、Slackware、Arch 和许多其他 Linux 发行版上。今天,Mate 继续提供一个传统的桌面环境,它的外观和感觉与 GNOME 2 完全一样,使用 GTK 3 工具包。

你可以在你的 Linux 发行版的软件仓库中找到 Mate,也可以下载并安装一个把 Mate 作为默认桌面的发行版。不过,在你这样做之前,请注意为了提供完整的桌面体验,所以许多 Mate 应用程序都是随该桌面一起安装的。如果你运行的是不同的桌面,你可能会发现自己有多余的应用程序(两个 PDF 阅读器、两个媒体播放器、两个文件管理器,等等)。所以如果你只想尝试 Mate 桌面,可以在虚拟机(例如 GNOME box)中安装基于 Mate 的发行版。

Mate 桌面之旅

Mate 项目不仅仅可以让你想起来 GNOME 2;它就是 GNOME 2。如果你是 00 年代中期 Linux 桌面的粉丝,至少,你会从中感受到 Mate 的怀旧情怀。我不是 GNOME 2 的粉丝,我更倾向于使用 KDE,但是有一个地方我无法想象没有 GNOME 2:OpenSolaris。OpenSolaris 项目并没有持续太久,在 Sun Microsystems 被并入 Oracle 之前,Ian Murdock 加入 Sun 时它就显得非常突出,我当时是一个初级的 Solaris 管理员,使用 OpenSolaris 来让自己更多学会那种 Unix 风格。这是我使用过 GNOME 2 的唯一平台(因为我一开始不知道如何更改桌面,后来习惯了它),而今天的 OpenIndiana project 是 OpenSolaris 的社区延续,它通过 Mate 桌面使用 GNOME 2。

 title=

Mate 的布局由左上角的三个菜单组成:应用程序、位置和系统。应用程序菜单提供对系统上安装的所有的应用程序启动器的快速访问。位置菜单提供对常用位置(如家目录、网络文件夹等)的快速访问。系统菜单包含全局选项,如关机和睡眠。右上角是一个系统托盘,屏幕底部有一个任务栏和一个虚拟桌面切换栏。

就桌面设计而言,这是一种稍微有点奇怪的配置。它从早期的 Linux 桌面、MacFinder 和 Windows 中借用了一些相同的部分,但是又创建了一个独特的配置,这种配置很直观而有些熟悉。Mate 执意保持这个模型,而这正是它的用户喜欢的地方。

Mate 和开源

Mate 是一个最直接的例子,展示了开源如何使开发人员能够对抗项目生命的终结。从理论上讲,GNOME 2 会被 GNOME 3 所取代,但它依然存在,因为一个开发人员建立了该代码的一个分支并继续发展了下去。它的发展势头越来越庞大,更多的开发人员加入进来,并且这个让用户喜爱的桌面比以往任何时候都要更好。并不是所有的软件都有第二次机会,但是开源永远是一个机会,否则就永远没有机会。

使用和支持开源意味着支持用户和开发人员的自由。而且 Mate 桌面是他们的努力的有力证明。


via: https://opensource.com/article/19/12/mate-linux-desktop

作者:Seth Kenlon 选题:lujun9972 译者:mayunmeiyouming 校对:wxy

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

使用 GNOME 桌面可以让你在文字中轻松加入 emoji。

emoji 是潜藏在 Unicode 字符空间里的有趣表情图,它们已经风靡于整个互联网。emoji 可以用来在社交媒体上表示自己的心情状态,也可以作为重要文件名的视觉标签,总之它们的各种用法层出不穷。在 Linux 系统中有很多种方式可以输入 Unicode 字符,但 GNOME 桌面能让你更轻松地查找和输入 emoji。

 title=

准备工作

首先,你需要一个运行 GNOME 桌面的 Linux 系统。

同时还需要安装一款支持 emoji 的字体。符合这个要求的字体有很多,使用你喜欢的软件包管理器直接搜索 emoji 并选择一款安装就可以了。

例如在 Fedora 上:

$ sudo dnf search emoji
emoji-picker.noarch : An emoji selection tool
unicode-emoji.noarch : Unicode Emoji Data Files
eosrei-emojione-fonts.noarch : A color emoji font
twitter-twemoji-fonts.noarch : Twitter Emoji for everyone
google-android-emoji-fonts.noarch : Android Emoji font released by Google
google-noto-emoji-fonts.noarch : Google “Noto Emoji” Black-and-White emoji font
google-noto-emoji-color-fonts.noarch : Google “Noto Color Emoji” colored emoji font
[...]

对于 Ubuntu 或者 Debian,需要使用 apt search

在这篇文章中,我会使用 Google Noto Color Emoji 这款字体为例。

设置

要开始设置,首先打开 GNOME 的设置面板。

1、在左边侧栏中,选择“ 地区与语言 Region & Language ”类别。

2、点击“ 输入源 Input Sources ”选项下方的加号(+)打开“ 添加输入源 Add an Input Source ”面板。

 title=

3、在“ 添加输入源 Add an Input Source ”面板中,点击底部的菜单按钮。

 title=

4、滑动到列表底部并选择“ 其它 Other ”。

5、在“ 其它 Other ”列表中,找到“ 其它 Other 快速输入 Typing Booster )”。

 title= in inputs")

6、点击右上角的“ 添加 Add ”按钮,将输入源添加到 GNOME 桌面。

以上操作完成之后,就可以关闭设置面板了。

切换到快速输入

现在 GNOME 桌面的右上角会出现一个新的图标,一般情况下是当前语言的双字母缩写(例如英语是 en,世界语是 eo,西班牙语是 es,等等)。如果你按下了 超级键 Super key (也就是键盘上带有 Linux 企鹅/Windows 徽标/Mac Command 标志的键)+ 空格键的组合键,就会切换到输入列表中的下一个输入源。在这里,我们只有两个输入源,也就是默认语言和快速输入。

你可以尝试使用一下这个组合键,观察图标的变化。

配置快速输入

在快速输入模式下,点击右上角的输入源图标,选择“ Unicode 符号和 emoji 联想 Unicode symbols and emoji predictions ”选项,设置为“ On ”。

 title=

现在快速输入模式已经可以输入 emoji 了。这正是我们现在所需要的,当然快速输入模式的功能也并不止于此。

输入 emoji

在快速输入模式下,打开一个文本编辑器,或者网页浏览器,又或者是任意一种支持输入 Unicode 字符的软件,输入“thumbs up”,快速输入模式就会帮你迅速匹配的 emoji 了。

 title=

要退出 emoji 模式,只需要再次使用超级键+空格键的组合键,输入源就会切换回你的默认输入语言。

使用其它切换方式

如果你觉得“超级键+空格键”这个组合用起来不顺手,你也可以换成其它键的组合。在 GNOME 设置面板中选择“ 设备 Device ”→“ 键盘 Keyboard ”。

在“ 键盘 Keyboard ”页面中,将“ 切换到下一个输入源 Switch to next input source ”更改为你喜欢的组合键。

 title=

输入 Unicode

实际上,现代键盘的设计只是为了输入 26 个字母以及尽可能多的数字和符号。但 ASCII 字符的数量已经比键盘上能看到的字符多得多了,遑论上百万个 Unicode 字符。因此,如果你想要在 Linux 应用程序中输入 Unicode,但又不想使用快速输入,你可以尝试一下 Unicode 输入。

  1. 打开任意一种支持输入 Unicode 字符的软件,但仍然使用你的默认输入语言
  2. 使用 Ctrl+Shift+U 组合键进入 Unicode 输入模式
  3. 在 Unicode 输入模式下,只需要输入某个 Unicode 字符的对应序号,就实现了对这个 Unicode 字符的输入。例如 1F44D 对应的是 ?,而 2620 则对应了 ☠。想要查看所有 Unicode 字符的对应序号,可以参考 Unicode 规范

emoji 的实用性

emoji 可以让你的文本变得与众不同,这就是它们有趣和富有表现力的体现。同时 emoji 也有很强的实用性,因为它们本质上是 Unicode 字符,在很多支持自定义字体的地方都可以用到它们,而且跟使用其它常规字符没有什么太大的差别。因此,你可以使用 emoji 来对不同的文件做标记,在搜索的时候就可以使用 emoji 把这些文件快速筛选出来。

 title=

你可以在 Linux 中尽情地使用 emoji,因为 Linux 是一个对 Unicode 友好的环境,未来也会对 Unicode 有着越来越好的支持。


via: https://opensource.com/article/19/10/how-type-emoji-linux

作者:Seth Kenlon 选题:lujun9972 译者:HankChow 校对:wxy

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

这是一个快速教程,用来展示如何通过 Flask(目前发展最迅速的 Python 框架之一)来从服务器获取数据。

 title=

Python 是一个以语法简洁著称的高级的、面向对象的程序语言。它一直都是一个用来构建 RESTful API 的顶级编程语言。

Flask 是一个高度可定制化的 Python 框架,可以为开发人员提供用户访问数据方式的完全控制。Flask 是一个基于 Werkzeug 的 WSGI 工具包和 Jinja 2 模板引擎的”微框架“。它是一个被设计来开发 RESTful API 的 web 框架。

Flask 是 Python 发展最迅速的框架之一,很多知名网站如:Netflix、Pinterest 和 LinkedIn 都将 Flask 纳入了它们的开发技术栈。下面是一个简单的示例,展示了 Flask 是如何允许用户通过 HTTP GET 请求来从服务器获取数据的。

初始化一个 Flask 应用

首先,创建一个你的 Flask 项目的目录结构。你可以在你系统的任何地方来做这件事。

$ mkdir tutorial
$ cd tutorial
$ touch main.py
$ python3 -m venv env
$ source env/bin/activate
(env) $ pip3 install flask-restful
Collecting flask-restful
Downloading https://files.pythonhosted.org/packages/17/44/6e49...8da4/Flask_RESTful-0.3.7-py2.py3-none-any.whl
Collecting Flask>=0.8 (from flask-restful)
[...]

导入 Flask 模块

然后,在你的 main.py 代码中导入 flask 模块和它的 flask_restful 库:

from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class Quotes(Resource):
    def get(self):
        return {
            'William Shakespeare': {
                'quote': ['Love all,trust a few,do wrong to none',
                'Some are born great, some achieve greatness, and some greatness thrust upon them.']
        },
        'Linus': {
            'quote': ['Talk is cheap. Show me the code.']
            }
        }

api.add_resource(Quotes, '/')

if __name__ == '__main__':
    app.run(debug=True)

运行 app

Flask 包含一个内建的用于测试的 HTTP 服务器。来测试一下这个你创建的简单的 API:

(env) $ python main.py
 * Serving Flask app "main" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

启动开发服务器时将启动 Flask 应用程序,该应用程序包含一个名为 get 的方法来响应简单的 HTTP GET 请求。你可以通过 wgetcurl 命令或者任意的 web 浏览器来测试它。

$ curl http://localhost:5000
{
    "William Shakespeare": {
        "quote": [
            "Love all,trust a few,do wrong to none",
            "Some are born great, some achieve greatness, and some greatness thrust upon them."
        ]
    },
    "Linus": {
        "quote": [
            "Talk is cheap. Show me the code."
        ]
    }
}

要查看使用 Python 和 Flask 的类似 Web API 的更复杂版本,请导航至美国国会图书馆的 Chronicling America 网站,该网站可提供有关这些信息的历史报纸和数字化报纸。

为什么使用 Flask?

Flask 有以下几个主要的优点:

  1. Python 很流行并且广泛被应用,所以任何熟悉 Python 的人都可以使用 Flask 来开发。
  2. 它轻巧而简约。
  3. 考虑安全性而构建。
  4. 出色的文档,其中包含大量清晰,有效的示例代码。

还有一些潜在的缺点:

  1. 它轻巧而简约。但如果你正在寻找具有大量捆绑库和预制组件的框架,那么这可能不是最佳选择。
  2. 如果必须围绕 Flask 构建自己的框架,则你可能会发现维护自定义项的成本可能会抵消使用 Flask 的好处。

如果你要构建 Web 程序或 API,可以考虑选择 Flask。它功能强大且健壮,并且其优秀的项目文档使入门变得容易。试用一下,评估一下,看看它是否适合你的项目。

在本课中了解更多信息关于 Python 异常处理以及如何以安全的方式进行操作。


via: https://opensource.com/article/19/11/python-web-api-flask

作者:Rachel Waston 选题:lujun9972 译者:hj24 校对:wxy

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

你的浏览器里的锁的图标的后面是什么?

Lock

每天你都会重复这件事很多次,访问网站,网站需要你用你的用户名或者电子邮件地址和你的密码来进行登录。银行网站、社交网站、电子邮件服务、电子商务网站和新闻网站。这里只在使用了这种机制的网站中列举了其中一小部分。

每次你登录进一个这种类型的网站时,你实际上是在说:“是的,我信任这个网站,所以我愿意把我的个人信息共享给它。”这些数据可能包含你的姓名、性别、实际地址、电子邮箱地址,有时候甚至会包括你的信用卡信息。

但是你怎么知道你可以信任这个网站?换个方式问,为了让你可以信任它,网站应该如何保护你的交易?

本文旨在阐述使网站变得安全的机制。我会首先论述 web 协议 http 和 https,以及 传输层安全 Transport Layer Security (TLS)的概念,后者是 互联网协议 Internet Protocol (IP)层中的加密协议之一。然后,我会解释 证书颁发机构 certificate authority 和自签名证书,以及它们如何帮助保护一个网站。最后,我会介绍一些开源的工具,你可以使用它们来创建和管理你的证书。

通过 https 保护路由

了解一个受保护的网站的最简单的方式就是在交互中观察它,幸运的是,在今天的互联网上,发现一个安全的网站远远比找到一个不安全的网站要简单。但是,因为你已经在 Opensource.com 这个网站上了,我会使用它来作为案例,无论你使用的是哪个浏览器,你应该在你的地址栏旁边看到一个像锁一样的图标。点击这个锁图标,你应该会看见一些和下面这个类似的东西。

Certificate information

默认情况下,如果一个网站使用的是 http 协议,那么它是不安全的。为通过网站主机的路由添加一个配置过的证书,可以把这个网站从一个不安全的 http 网站变为一个安全的 https 网站。那个锁图标通常表示这个网站是受 https 保护的。

点击证书来查看网站的 CA,根据你的浏览器,你可能需要下载证书来查看它。

Certificate information

在这里,你可以了解有关 Opensource.com 证书的信息。例如,你可以看到 CA 是 DigiCert,并以 Opensource.com 的名称提供给 Red Hat。

这个证书信息可以让终端用户检查该网站是否可以安全访问。

警告:如果你没有在网站上看到证书标志,或者如果你看见的标志显示这个网站不安全——请不要登录或者做任何需要你个人数据的操作。这种情况非常危险!

如果你看到的是警告标志,对于大多数面向公众开放的网站来说,这很少见,它通常意味着该证书已经过期或者是该证书是自签名的,而非通过一个受信任的第三方来颁发。在我们进入这些主题之前,我想解释一下 TLS 和 SSL。

带有 TLS 和 SSL 的互联网协议

TLS 是旧版 安全套接字层协议 Secure Socket Layer (SSL)的最新版本。理解这一点的最好方法就是仔细理解互联网协议的不同协议层。

IP layers

我们知道当今的互联网是由 6 个层面组成的:物理层、数据链路层、网络层、传输层、安全层、应用层。物理层是基础,这一层是最接近实际的硬件设备的。应用层是最抽象的一层,是最接近终端用户的一层。安全层可以被认为是应用层的一部分,TLS 和 SSL,是被设计用来在一个计算机网络中提供通信安全的加密协议,它们位于安全层中。

这个过程可以确保终端用户使用网络服务时,通信的安全性和保密性。

证书颁发机构和自签名证书

证书颁发机构 Certificate authority (CA)是受信任的组织,它可以颁发数字证书。

TLS 和 SSL 可以使连接更安全,但是这个加密机制需要一种方式来验证它;这就是 SSL/TLS 证书。TLS 使用了一种叫做非对称加密的加密机制,这个机制有一对称为私钥和公钥的安全密钥。(这是一个非常复杂的主题,超出了本文的讨论范围,但是如果你想去了解这方面的东西,你可以阅读“密码学和公钥密码基础体系简介”)你要知道的基础内容是,证书颁发机构们,比如 GlobalSign、DigiCert 和 GoDaddy,它们是受人们信任的可以颁发证书的供应商,它们颁发的证书可以用于验证网站使用的 TLS/SSL 证书。网站使用的证书是导入到主机服务器里的,用于保护网站。

然而,如果你只是要测试一下正在开发中的网站或服务,CA 证书可能对你而言太昂贵或者是太复杂了。你必须有一个用于生产目的的受信任的证书,但是开发者和网站管理员需要有一种更简单的方式来测试网站,然后他们才能将其部署到生产环境中;这就是自签名证书的来源。

自签名证书是一种 TLS/SSL 证书,是由创建它的人而非受信任的 CA 机构颁发的。用电脑生成一个自签名证书很简单,它可以让你在无需购买昂贵的 CA 颁发的证书的情况下测试一个安全网站。虽然自签名证书肯定不能拿到生产环境中去使用,但对于开发和测试阶段来说,这是一种简单灵活的方法。

生成证书的开源工具

有几种开源工具可以用来管理 TLS/SSL 证书。其中最著名的就是 openssl,这个工具包含在很多 Linux 发行版中和 MacOS 中。当然,你也可以使用其他开源工具。

工具名描述许可证
OpenSSL实现 TLS 和加密库的最著名的开源工具Apache License 2.0
EasyRSA用于构建 PKI CA 的命令行实用工具GPL v2
CFSSL来自 cloudflare 的 PKI/TLS 瑞士军刀BSD 2-Clause Simplified License
Lemur来自 网飞 Netflix 的 TLS 创建工具Apache License 2.0

如果你的目的是扩展和对用户友好,网飞的 Lemur 是一个很有趣的选择。你在网飞的技术博客上可以查看更多有关它的信息。

如何创建一个 Openssl 证书

你可以靠自己来创建证书,下面这个案例就是使用 Openssl 生成一个自签名证书。

1、使用 openssl 命令行生成一个私钥:

openssl genrsa -out example.key 2048

2、使用在第一步中生成的私钥来创建一个 证书签名请求 certificate signing request (CSR):

openssl req -new -key example.key -out example.csr -subj "/C=US/ST=TX/L=Dallas/O=Red Hat/OU=IT/CN=test.example.com"

3、使用你的 CSR 和私钥创建一个证书:

openssl x509 -req -days 366 -in example.csr -signkey example.key -out example.crt

了解更多关于互联网安全的知识

如果你想要了解更多关于互联网安全和网站安全的知识,请看我为这篇文章一起制作的 Youtube 视频。

你有什么问题?发在评论里让我们知道。


via: https://opensource.com/article/19/11/internet-security-tls-ssl-certificate-authority

作者:Bryant Son 选题:lujun9972 译者:hopefully2333 校对:wxy

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