网络防火墙，顾名思义：为了阻止不需要的网络连接而设置的防护性屏障。在与外界建立连接或是提供网络服务时常常会用到。例如，在学校或是咖啡厅里使用笔记本电脑时，你一定不想某个陌生人窥探你的电脑。每个 Fedora 系统都内置了一款防火墙。这是 Linux 内核网络功能的一部分。本文介绍如何通过 firewall-cmd 命令修改防火墙的配置。网络基础本文并不教授计算机网络的所有知识，但还是会简单介绍一些网络基础。网络中的所有计算机都有一个 IP 地址，可以把它想象成一个邮箱地址，有了邮箱地址，邮件才知道发往何处。每台计算机还会拥有一组端口，端口号范围从 0 到 65535。同样的，你可以把这些端口想象成用来连接邮箱地址的连接点。通常情况下，端口会是一个标准端口号或是根据应用程序的应答要求选定的一个端口范围。例如，一台 Web 服务器通常会保留 80 端口用于 HTTP 通信，443 端口用于 HTTPS。小于 1024 的端口主要用于系统或常见用途，1024-49151 端口是已经注册的，49152 及以上端口多为临时使用（只限短时间使用）。互联网传输中最常见的两个协议，TCP 和 UDP。当要传输的数据很重要，不能有丢包时，就使用 TCP 协议，如果数据包没有按顺序到达，还需要重组为正确的顺序。UDP 协议则更多用于对时间敏感的服务，为了保证时效性，有时允许丢失部分数据。系统中运行的应用，例如 Web 服务器，会保留一些端口（例如上文提到的 80 和 443）。在网络传输过程中，主机会为传输的两端建立一个链接，一端是源地址和源端口，另一端是目的地址和目的端口。网络防火墙就是基于地址、端口及其他标准的一组规则集，来对网络数据的传输进行屏蔽或阻断的。通过 firewall-cmd 命令，我们就可以查看或修改防火墙的工作配置。防火墙域（zone）为了验证防火墙是否开启，使用 firewall-cmd 命令，输入时要加上 sudo。（通常，在运行了 PolicyKit 的环境中，你也可以不加 sudo）$ sudo firewall-cmd --state runningfirewalld 服务支持任意数量的域。每个域都可以拥有独立的配置和防护规则。一台 Fedora 工作站的外部接口（例如 WIFI 或有线网卡）其默认域为 FedoraWorkstation。要看有哪些域是激活状态，可以使用 -–get-active-zones 选项。在本示例中，有两个网卡，有线以太网卡 wlp2s0 和虚拟（libvirt）桥接网卡 virbr0：$ sudo firewall-cmd --get-active-zones FedoraWorkstation interfaces: wlp2s0 libvirt interfaces: virbr0如果想看看默认域是什么，或是直接查询所有域：$ sudo firewall-cmd --get-default-zone FedoraWorkstation $ sudo firewall-cmd --get-zones FedoraServer FedoraWorkstation block dmz drop external home internal libvirt public trusted work查询默认域中防火墙放行了哪些系统，使用 -–list-services 选项。下例给出了一个定制系统的查询结果，你可以看到与常见的结果有些不同。$ sudo firewall-cmd --list-services dhcpv6-client mdns samba-client ssh该系统对外开启了四个服务。每个服务都对应一个常见端口。例如 ssh 服务对应 22 端口。如果要查看当前域中防火墙还开启了哪些端口，可以使用 --list-ports 选项。当然，你也可以随时对其他域进行查询：$ sudo firewall-cmd --list-ports --zone=FedoraWorkstation 1025-65535/udp 1025-65535/tcp结果表明，从 1025 到 65535 端口（包含 UDP 和 TCP）默认都是开启的。修改域、端口及服务以上的配置都是预先设计好的防火墙策略。是为了确保新手用户安装的应用都能够正常访问网络。如果你确定自己心里有数，想要一个保护性更强的策略，可以将接口放入 FedoraServer 域，明确禁止所有端口的访问。（警告：如果你的服务器之前是联网状态，这么做可能会导致连接中断，那你就得到机房里去修改更多的配置项！）$ sudo firewall-cmd --change-interface=<ifname> --zone=FedoraServer success本文并不讨论如何制定防火墙策略，Fedora 社区里已经有很多讨论了。你大可以按照自身需要来修改配置。如果你想要开放某个服务的常见端口，可以将该服务加入默认域（或使用 --zone 指定一个不同的域）。还可以一次性将其加入多个域。下例开放了 HTTP 和 HTTPS 的常见端口 80、443：$ sudo firewall-cmd --add-service=http --add-service=https success并非所有的服务都有默认端口，不过大部分都是有的。使用 -–get-services 选项可以查看完整列表。如果你想指定某个特定端口号，可以直接用数字和协议进行配置。（多数情况下，-–add-service 和 -–add-port 这两个选项是合在一起使用的）下例开启的是 UDP 协议的网络启动服务：$ sudo firewall-cmd --add-port=67/udp success重要：如果想要在系统重启或是 firewalld 服务重启后，配置仍然生效，必须在命令中加上 -–permanent 选项。本文中的例子只是临时修改了配置，下次遇到系统重启或是 firewalld 服务重启，这些配置就失效了。以上只是 firewall-cmd 和 firewalld 服务诸多功能中的一小部分。firewalld 项目的主页还有更多信息值得你去探索和尝试。via: https://fedoramagazine.org/control-the-firewall-at-the-command-line/作者：Paul W. Frields 选题：lujun9972 译者：tinyeyeser 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Python 是最流行、功能最强大的编程语言之一。由于它是自由开源的，因此每个人都可以使用。大多数 Fedora 系统都已安装了该语言。Python 可用于多种任务，其中包括处理逗号分隔值（CSV）数据。CSV文件一开始往往是以表格或电子表格的形式出现。本文介绍了如何在 Python 3 中处理 CSV 数据。CSV 数据正如其名。CSV 文件按行放置数据，数值之间用逗号分隔。每行由相同的字段定义。简短的 CSV 文件通常易于阅读和理解。但是较长的数据文件或具有更多字段的数据文件可能很难用肉眼解析，因此在这种情况下计算机做得更好。这是一个简单的示例，其中的字段是 Name、Email 和 Country。在此例中，CSV 数据将字段定义作为第一行，尽管并非总是如此。Name,Email,Country John Q. Smith,jqsmith@example.com,USA Petr Novak,pnovak@example.com,CZ Bernard Jones,bjones@example.com,UK从电子表格读取 CSVPython 包含了一个 csv 模块，它可读取和写入 CSV 数据。大多数电子表格应用，无论是原生（例如 Excel 或 Numbers）还是基于 Web 的（例如 Google Sheet），都可以导出 CSV 数据。实际上，许多其他可发布表格报告的服务也可以导出为 CSV（例如，PayPal）。Python csv 模块有一个名为 DictReader 的内置读取器方法，它可以将每个数据行作为有序字典 （OrderedDict） 处理。它需要一个文件对象访问 CSV 数据。因此，如果上面的文件在当前目录中为 example.csv，那么以下代码段是获取此数据的一种方法：f = open('example.csv', 'r') from csv import DictReader d = DictReader(f) data = [] for row in d: data.append(row)现在，内存中的 data 对象是 OrderedDict 对象的列表：[OrderedDict([('Name', 'John Q. Smith'), ('Email', 'jqsmith@example.com'), ('Country', 'USA')]), OrderedDict([('Name', 'Petr Novak'), ('Email', 'pnovak@example.com'), ('Country', 'CZ')]), OrderedDict([('Name', 'Bernard Jones'), ('Email', 'bjones@example.com'), ('Country', 'UK')])]引用这些对象很容易：>>> print(data[0]['Country']) USA >>> print(data[2]['Email']) bjones@example.com顺便说一句，如果你需要处理没有字段名标题行的 CSV 文件，那么 DictReader 类可以让你定义它们。在上面的示例中，添加 fieldnames 参数并传递一系列名称：d = DictReader(f, fieldnames=['Name', 'Email', 'Country'])真实例子我最近想从一长串人员名单中随机选择一个中奖者。我从电子表格中提取的 CSV 数据是一个简单的名字和邮件地址列表。幸运的是，Python 有一个有用的 random 模块，可以很好地生成随机值。该模块 Random 类中的 randrange 函数正是我需要的。你可以给它一个常规的数字范围（例如整数），以及它们之间的步长值。然后，该函数会生成一个随机结果，这意味着我可以在数据的总行数范围内获得一个随机整数（或者说是行号）。这个小程序运行良好：from csv import DictReader from random import Random d = DictReader(open('mydata.csv')) data = [] for row in d: data.append(row) r = Random() winner = data[r.randrange(0, len(data), 1)] print('The winner is:', winner['Name']) print('Email address:', winner['Email'])显然，这个例子非常简单。电子表格本身包含了复杂的分析数据的方法。但是，如果你想在电子表格应用之外做某事，Python 或许是一种技巧！题图由 Isaac Smith 拍摄，发表于 U​​nsplash。via: https://fedoramagazine.org/using-data-from-spreadsheets-in-fedora-with-python/作者：Paul W. Frields 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
有大量的云服务可用于存储重要文档。Google Drive 无疑是最受欢迎的之一。它提供了一组相应的应用程序，例如文档，表格和幻灯片来创建内容。但是，你也可以在 Google Drive 中存储任意内容。本文向你展示如何将其连接到 Fedora 工作站。添加帐户Fedora 工作站可在安装后首次启动或者之后的任何时候添加一个帐户。要在首次启动期间添加帐户，请按照提示进行操作。其中包括选择添加一个帐户：选择 Google，然后会出现一个登录提示，请使用你的 Google 帐户信息登录。请注意，此信息仅传输给 Google，而不传输给 GNOME 项目。下一个页面要求你授予访问权限，这是必需的，以便系统桌面可以与 Google 进行交互。向下滚动查看访问请求，然后选择“允许”继续。你会在移动设备和 Gmail 中收到有关新设备（系统）访问 Google 帐户的通知。这是正常现象。如果你在初次启动时没有执行此操作，或者需要重新添加帐户，请打开“设置”，然后选择“在线账户”来添加帐户。可以通过顶部栏右侧的下拉菜单（“齿轮”图标）或打开“概览”并输入“settings”来使用它。接着和上面一样。在 Google Drive 中使用“文件”应用打开“文件”应用（以前称为 “nautilus”）。“文件”应用可以通过左侧栏访问。在列表中找到你的 Google 帐户。当你选择帐户后，“文件”应用会显示你的 Google Drive 的内容。你可以使用 Fedora 工作站的本地应用打开某些文件，例如声音文件或 LibreOffice 兼容文件（包括 Microsoft Office 文档）。其他文件（例如 Google 文档、表格和幻灯片等 Google 应用文件）将使用浏览器和相应的应用打开。请记住，如果文件很大，将需要一些时间才能通过网络接收文件，你才可以打开它。你还可以复制粘贴 Google Drive 中的文件到连接到 Fedora 工作站的其他存储，或者反之。你还可以使用内置功能来重命名文件、创建文件夹并组织它们。对于共享和其他高级选项，请和平常一样在浏览器中使用 Google Drive。请注意，“文件”应用程序不会实时刷新内容。如果你从其他连接 Google 的设备（例如手机或平板电脑）添加或删除文件，那么可能需要按 Ctrl+R 刷新“文件”应用。via: https://fedoramagazine.org/connect-your-google-drive-to-fedora-workstation/作者：Paul W. Frields 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
你可能已经熟悉使用 ssh 命令访问远程系统。ssh 命令背后所使用的协议允许终端的输入和输出流经安全通道。但是你知道也可以使用 ssh 来安全地发送和接收其他数据吗？一种方法是使用“ 端口转发 port forwarding ”，它允许你在进行 ssh 会话时安全地连接网络端口。本文向你展示了它是如何工作的。关于端口标准 Linux 系统已分配了一组网络端口，范围是 0 - 65535。系统会保留 0 - 1023 的端口以供系统使用。在许多系统中，你不能选择使用这些低端口号。通常有几个端口用于运行特定的服务。你可以在系统的 /etc/services 文件中找到这些定义。你可以认为网络端口是类似的物理端口或可以连接到电缆的插孔。端口可以连接到系统上的某种服务，类似物理插孔后面的接线。一个例子是 Apache Web 服务器（也称为 httpd）。对于 HTTP 非安全连接，Web 服务器通常要求在主机系统上使用端口 80，对于 HTTPS 安全连接通常要求使用 443。当你连接到远程系统（例如，使用 Web 浏览器）时，你是将浏览器“连接”到你的主机上的端口。这通常是一个随机的高端口号，例如 54001。你的主机上的端口连接到远程主机上的端口（例如 443）来访问其安全的 Web 服务器。那么，当你有这么多可用端口时，为什么还要使用端口转发呢？这是 Web 开发人员生活中的几种常见情况。本地端口转发想象一下，你正在名为 remote.example.com 的远程系统上进行 Web 开发。通常，你是通过 ssh 进入此系统的，但是它位于防火墙后面，而且该防火墙很少允许其他类型的访问，并且会阻塞大多数其他端口。要尝试你的网络应用，能够使用浏览器访问远程系统会很有帮助。但是，由于使用了讨厌的防火墙，你无法通过在浏览器中输入 URL 的常规方法来访问它。本地转发使你可以通过 ssh 连接来建立可通过远程系统访问的端口。该端口在系统上显示为本地端口（因而称为“本地转发”）。假设你的网络应用在 remote.example.com 的 8000 端口上运行。要将那个系统的 8000 端口本地转发到你系统上的 8000 端口，请在开始会话时将 -L 选项与 ssh 结合使用：$ ssh -L 8000:localhost:8000 remote.example.com等等，为什么我们使用 localhost 作为转发目标？这是因为从 remote.example.com 的角度来看，你是在要求主机使用其自己的端口 8000。（回想一下，任何主机通常可以通过网络连接 localhost 而连接到自身。）现在那个端口连接到你系统的 8000 端口了。ssh 会话准备就绪后，将其保持打开状态，然后可以在浏览器中键入 http://localhost:8000 来查看你的 Web 应用。现在，系统之间的流量可以通过 ssh 隧道安全地传输！如果你有敏锐的眼睛，你可能已经注意到了一些东西。如果我们要 remote.example.com 转发到与 localhost 不同的主机名怎么办？如果它可以访问该网络上另一个系统上的端口，那么通常可以同样轻松地转发该端口。例如，假设你想访问也在该远程网络中的 db.example.com 的 MariaDB 或 MySQL 服务。该服务通常在端口 3306 上运行。因此，即使你无法 ssh 到实际的 db.example.com 主机，你也可以使用此命令将其转发：$ ssh -L 3306:db.example.com:3306 remote.example.com现在，你可以在 localhost 上运行 MariaDB 命令，而实际上是在使用 db.example.com 主机。远程端口转发远程转发让你可以进行相反操作。想象一下，你正在为办公室的朋友设计一个 Web 应用，并想向他们展示你的工作。不过，不幸的是，你在咖啡店里工作，并且由于网络设置，他们无法通过网络连接访问你的笔记本电脑。但是，你同时使用着办公室的 remote.example.com 系统，并且仍然可在这里登录。你的 Web 应用似乎在本地 5000 端口上运行良好。远程端口转发使你可以通过 ssh 连接从本地系统建立端口的隧道，并使该端口在远程系统上可用。在开始 ssh 会话时，只需使用 -R 选项：$ ssh -R 6000:localhost:5000 remote.example.com现在，当在公司防火墙内的朋友打开浏览器时，他们可以进入 http://remote.example.com:6000 查看你的工作。就像在本地端口转发示例中一样，通信通过 ssh 会话安全地进行。默认情况下，sshd 守护进程运行在设置的主机上，因此只有该主机可以连接它的远程转发端口。假设你的朋友希望能够让其他 example.com 公司主机上的人看到你的工作，而他们不在 remote.example.com 上。你需要让 remote.example.com 主机的所有者将以下选项之一添加到 /etc/ssh/sshd_config 中：GatewayPorts yes # 或 GatewayPorts clientspecified第一个选项意味着 remote.example.com 上的所有网络接口都可以使用远程转发的端口。第二个意味着建立隧道的客户端可以选择地址。默认情况下，此选项设置为 no。使用此选项，你作为 ssh 客户端仍必须指定可以共享你这边转发端口的接口。通过在本地端口之前添加网络地址范围来进行此操作。有几种方法可以做到，包括：$ ssh -R *:6000:localhost:5000 # 所有网络 $ ssh -R 0.0.0.0:6000:localhost:5000 # 所有网络 $ ssh -R 192.168.1.15:6000:localhost:5000 # 单个网络 $ ssh -R remote.example.com:6000:localhost:5000 # 单个网络其他注意事项请注意，本地和远程系统上的端口号不必相同。实际上，有时你甚至可能无法使用相同的端口。例如，普通用户可能不会在默认设置中转发到系统端口。另外，可以限制主机上的转发。如果你需要在联网主机上更严格的安全性，那么这你来说可能很重要。 sshd 守护程进程的 PermitOpen 选项控制是否以及哪些端口可用于 TCP 转发。默认设置为 any，这让上面的所有示例都能正常工作。要禁止任何端口转发，请选择 none，或仅允许的特定的“主机:端口”。有关更多信息，请在手册页中搜索 PermitOpen 来配置 sshd 守护进程：$ man sshd_config最后，请记住，只有在 ssh 会话处于打开状态时才会端口转发。如果需要长时间保持转发活动，请尝试使用 -N 选项在后台运行会话。确保控制台已锁定，以防止在你离开控制台时其被篡夺。via: https://fedoramagazine.org/using-ssh-port-forwarding-on-fedora/作者：Paul W. Frields 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
如今，企业网络经常使用“虚拟专用网络”来保证员工通信安全。但是，使用的协议有时会降低性能。如果你可以使用 SSH 连接远程主机，那么你可以设置端口转发。但这可能会很痛苦，尤其是在你需要与该网络上的许多主机一起使用的情况下。试试 sshuttle，它可以通过 SSH 访问来设置快速简易的虚拟专网。请继续阅读以获取有关如何使用它的更多信息。sshuttle 正是针对上述情况而设计的。远程端的唯一要求是主机必须有可用的 Python。这是因为 sshuttle 会构造并运行一些 Python 代码来帮助传输数据。安装 sshuttlesshuttle 被打包在官方仓库中，因此很容易安装。打开一个终端，并使用 sudo 来运行以下命令：$ sudo dnf install sshuttle安装后，你可以在手册页中找到相关信息：$ man sshuttle设置虚拟专网最简单的情况就是将所有流量转发到远程网络。这不一定是一个疯狂的想法，尤其是如果你不在自己家里这样的受信任的本地网络中。将 -r 选项与 SSH 用户名和远程主机名一起使用：$ sshuttle -r username@remotehost 0.0.0.0/0但是，你可能希望将该虚拟专网限制为特定子网，而不是所有网络流量。（有关子网的完整讨论超出了本文的范围，但是你可以在维基百科上阅读更多内容。）假设你的办公室内部使用了预留的 A 类子网 10.0.0.0 和预留的 B 类子网 172.16.0.0。上面的命令变为：$ sshuttle -r username@remotehost 10.0.0.0/8 172.16.0.0/16这非常适合通过 IP 地址访问远程网络的主机。但是，如果你的办公室是一个拥有大量主机的大型网络，该怎么办？名称可能更方便，甚至是必须的。不用担心，sshuttle 还可以使用 –dns 选项转发 DNS 查询：$ sshuttle --dns -r username@remotehost 10.0.0.0/8 172.16.0.0/16要使 sshuttle 以守护进程方式运行，请加上 -D 选项。它会以 syslog 兼容的日志格式发送到 systemd 日志中。根据本地和远程系统的功能，可以将 sshuttle 用于基于 IPv6 的虚拟专网。如果需要，你还可以设置配置文件并将其与系统启动集成。如果你想阅读更多有关 sshuttle 及其工作方式的信息，请查看官方文档。要查看代码，请进入 GitHub 页面。题图由 Kurt Cotoaga 拍摄并发表在 Unsplash 上。via: https://fedoramagazine.org/use-sshuttle-to-build-a-poor-mans-vpn/作者：Paul W. Frields 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
当你安装 Fedora Workstation 时，你会发现它包括了世界知名的 Firefox 浏览器。Mozilla 基金会以开发 Firefox 以及其他促进开放、安全和隐私的互联网项目为己任。Firefox 有快速的浏览引擎和大量的隐私功能。开发者社区不断改进和增强 Firefox。最新版本 Firefox 69 于最近发布，你可在稳定版 Fedora 系统（30 及更高版本）中获取它。继续阅读以获得更多详情。Firefox 69 中的新功能最新版本的 Firefox 包括 增强跟踪保护 Enhanced Tracking Protection （ETP）。当你使用带有新（或重置）配置文件的 Firefox 69 时，浏览器会使网站更难以跟踪你的信息或滥用你的计算机资源。例如，不太正直的网站使用脚本让你的系统进行大量计算来产生加密货币，这称为 加密挖矿 cryptomining 。加密挖矿在你不知情或未经许可的情况下发生，因此是对你的系统的滥用。Firefox 69 中的新标准设置可防止网站遭受此类滥用。Firefox 69 还有其他设置，可防止识别或记录你的浏览器指纹，以供日后使用。这些改进为你提供了额外的保护，免于你的活动被在线追踪。另一个常见的烦恼是在没有提示的情况下播放视频。视频播放也会占用更多的 CPU，你可能不希望未经许可就在你的笔记本上发生这种情况。Firefox 使用 阻止自动播放 Block Autoplay 这个功能阻止了这种情况的发生。而 Firefox 69 还允许你停止静默开始播放的视频。此功能可防止不必要的突然的噪音。它还解决了更多真正的问题 —— 未经许可使用计算机资源。新版本中还有许多其他新功能。在 Firefox 发行说明中阅读有关它们的更多信息。如何获得更新Firefox 69 存在于稳定版 Fedora 30、预发布版 Fedora 31 和 Rawhide 仓库中。该更新由 Fedora 的 Firefox 包维护者提供。维护人员还确保更新了 Mozilla 的网络安全服务（nss 包）。我们感谢 Mozilla 项目和 Firefox 社区在提供此新版本方面的辛勤工作。如果你使用的是 Fedora 30 或更高版本，请在 Fedora Workstation 上使用软件中心，或在任何 Fedora 系统上运行以下命令：$ sudo dnf --refresh upgrade firefox如果你使用的是 Fedora 29，请帮助测试更新，这样它可以变得稳定，让所有用户可以轻松使用。Firefox 可能会提示你升级个人设置以使用新设置。要使用新功能，你应该这样做。via: https://fedoramagazine.org/firefox-69-available-in-fedora/作者：Paul W. Frields 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
前一篇文章介绍了 Fedora 系统上有关文件权限的一些基础知识。本部分介绍使用权限管理文件访问和共享的其他方法。它建立在前一篇文章中的知识和示例的基础上，所以如果你还没有阅读过那篇文章，请查看它。符号与八进制在上一篇文章中，你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合，拥有该文件的组的成员有一个集合，然后最终一个集合适用于其他所有人。在长列表（ls -l）中这些权限使用符号模式显示在屏幕上。每个集合都有 r、w 和 x 条目，表示特定用户（所有者、组成员或其他）是否可以读取、写入或执行该文件。但是还有另一种表达这些权限的方法：八进制模式。你已经习惯了十进制编号系统，它有十个不同的值（0 到 9）。另一方面，八进制系统有八个不同的值（0 到 7）。在表示权限时，八进制用作速记来显示 r、w 和 x 字段的值。将每个字段视为具有如下值：r = 4w = 2x = 1现在，你可以使用单个八进制值表达任何组合。例如，读取和写入权限（但没有执行权限）的值为 6。读取和执行权限的值仅为 5。文件的 rwxr-xr-x 符号权限的八进制值为 755。与符号值类似，你可以使用八进制值使用 chmod 命令设置文件权限。以下两个命令对文件设置相同的权限：chmod u=rw,g=r,o=r myfile1 chmod 644 myfile1特殊权限位文件上还有几个特殊权限位。这些被称为 setuid（或 suid）、setgid（或 sgid），以及 粘滞位 sticky bit （或 阻止删除位 delete inhibit ）。 将此视为另一组八进制值：setuid = 4setgid = 2sticky = 1除非该文件是可执行的，否则 setuid 位是被忽略的。如果是可执行的这种情况，则该文件（可能是应用程序或脚本）的运行就像拥有该文件的用户启动的一样。setuid 的一个很好的例子是 /bin/passwd 实用程序，它允许用户设置或更改密码。此实用程序必须能够写入到不允许普通用户更改的文件中（LCTT 译注：此处是指 /etc/passwd 和 /etc/shadow）。因此它需要精心编写，由 root 用户拥有，并具有 setuid 位，以便它可以更改密码相关文件。setgid 位对于可执行文件的工作方式类似。该文件将使用拥有它的组的权限运行。但是，setgid 对于目录还有一个额外的用途。如果在具有 setgid 权限的目录中创建文件，则该文件的组所有者将设置为该目录的组所有者。最后，虽然文件粘滞位没有意义会被忽略，但它对目录很有用。在目录上设置的粘滞位将阻止用户删除其他用户拥有的该目录中的文件。在八进制模式下使用 chmod 设置这些位的方法是添加一个值前缀，例如 4755，可以将 setuid 添加到可执行文件中。在符号模式下，u 和 g 也可用于设置或删除 setuid 和 setgid，例如 u+s,g+s。粘滞位使用 o+t 设置。（其他的组合，如 o+s 或 u+t，是没有意义的，会被忽略。）共享与特殊权限回想一下前一篇文章中关于需要共享文件的财务团队的示例。可以想象，特殊权限位有助于更有效地解决问题。原来的解决方案只是创建了一个整个组可以写入的目录：drwxrwx---. 2 root finance 4096 Jul 6 15:35 finance此目录的一个问题是，finance 组成员的用户 dwayne 和 jill 可以删除彼此的文件。这对于共享空间来说不是最佳选择。它在某些情况下可能有用，但在处理财务记录时可能不会！另一个问题是此目录中的文件可能无法真正共享，因为它们将由 dwayne 和 jill 的默认组拥有 - 很可能用户私有组也命名为 dwayne 和 jill，而不是 finance。解决此问题的更好方法是在文件夹上设置 setgid 和粘滞位。这将做两件事：使文件夹中创建的文件自动归 finance 组所有，并防止 dwayne 和 jill 删除彼此的文件。下面这些命令中的任何一个都可以工作：sudo chmod 3770 finance sudo chmod u+rwx,g+rwxs,o+t finance该文件的长列表现在显示了所应用的新特殊权限。粘滞位显示为 T 而不是 t，因为 finance 组之外的用户无法搜索该文件夹。drwxrws--T. 2 root finance 4096 Jul 6 15:35 financevia: https://fedoramagazine.org/command-line-quick-tips-more-about-permissions/作者：Paul W. Frields 选题：lujun9972 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Fedora 与所有基于 Linux 的系统一样，它提供了一组强大的安全特性。其中一个基本特性是文件和文件夹上的权限。这些权限保护文件和文件夹免受未经授权的访问。本文将简要介绍这些权限，并向你展示如何使用它们共享对文件夹的访问。权限基础Fedora 本质上是一个多用户操作系统，它也有组，用户可以是其成员。但是，想象一下一个没有权限概念的多用户系统，不同的登录用户可以随意阅读彼此的内容。你可以想象到这对隐私或安全性并不是很好。Fedora 上的任何文件或文件夹都分配了三组权限。第一组用于拥有文件或文件夹的用户，第二组用于拥有它的组，第三组用于其他人，即既不是该文件的用户也不是拥有该文件的组中的用户。有时这被称为全世界。权限意味着什么每组权限都有三种形式：读、写和执行。其中每个都可以用首字母来代替，即 r、w、x。文件权限对于文件，权限的含义如下所示：读（r）：可以读取文件内容写（w）：可以更改文件内容执行（x）：可以执行文件 —— 这主要用于打算直接运行的程序或脚本当你对任何文件进行详细信息列表查看时，可以看到这三组权限。尝试查看系统上的 /etc/services 文件：$ ls -l /etc/services -rw-r--r--. 1 root root 692241 Apr 9 03:47 /etc/services注意列表左侧的权限组。如上所述，这些表明三种用户的权限：拥有该文件的用户，拥有该文件的组以及其他人。用户所有者是 root，组所有者是 root 组。用户所有者具有对文件的读写权限，root 组中的任何人都只能读取该文件。最后，其他任何人也只能读取该文件。（最左边的 - 显示这是一个常规文件。）顺便说一下，你通常会在许多（但不是所有）系统配置文件上发现这组权限，它们只由系统管理员而不是普通用户更改。通常，普通用户需要读取其内容。文件夹（目录）权限对于文件夹，权限的含义略有不同：读（r）：可以读取文件夹内容（例如 ls 命令）写（w）：可以更改文件夹内容（可以在此文件夹中创建或删除文件）执行（x）：可以搜索文件夹，但无法读取其内容。（这听起来可能很奇怪，但解释起来需要更复杂的文件系统细节，这超出了本文的范围，所以现在就这样吧。）看一下 /etc/grub.d 文件夹的例子：$ ls -ld /etc/grub.d drwx------. 2 root root 4096 May 23 16:28 /etc/grub.d注意最左边的 d，它显示这是一个目录或文件夹。权限显示用户所有者（root）可以读取、更改和 cd 到此文件夹中。但是，没有其他人可以这样做 —— 无论他们是否是 root 组的成员。注意，你不能 cd 进入该文件夹。$ cd /etc/grub.d bash: cd: /etc/grub.d: Permission denied注意你自己的主目录是如何设置的：$ ls -ld $HOME drwx------. 221 paul paul 28672 Jul 3 14:03 /home/paul现在，注意除了作为所有者之外，没有人可以访问此文件夹中的任何内容。这是特意的！你不希望其他人能够在共享系统上读取你的私人内容。创建共享文件夹你可以利用此权限功能轻松创建一个文件夹以在组内共享。假设你有一个名为 finance 的小组，其中有几个成员需要共享文档。因为这些是用户文档，所以将它们存储在 /home 文件夹层次结构中是个好主意。首先，使用 sudo 创建一个共享文件夹，并将其设置为 finance 组所有：$ sudo mkdir -p /home/shared/finance $ sudo chgrp finance /home/shared/finance默认情况下，新文件夹具有这些权限。注意任何人都可以读取或搜索它，即使他们无法创建或删除其中的文件：drwxr-xr-x. 2 root root 4096 Jul 6 15:35 finance对于金融数据来说，这似乎不是一个好主意。接下来，使用 chmod 命令更改共享文件夹的模式（权限）。注意，使用 g 更改所属组的权限，使用 o 更改其他用户的权限。同样，u 会更改用户所有者的权限：$ sudo chmod g+w,o-rx /home/shared/finance生成的权限看起来更好。现在，finance 组中的任何人（或用户所有者 root）都可以完全访问该文件夹及其内容：drwxrwx---. 2 root finance 4096 Jul 6 15:35 finance如果其他用户尝试访问共享文件夹，他们将无法执行此操作。太棒了！现在，我们的金融部门可以将文档放在一个共享的地方。其他说明还有其他方法可以操作这些权限。例如，你可能希望将此文件夹中的任何文件设置为 finance 组所拥有。这需要本文未涉及的其他设置，但请继续关注我们，以了解关于该主题的更多信息。via: https://fedoramagazine.org/command-line-quick-tips-permissions/作者：Paul W. Frields 选题：lujun9972 译者：MjSeven 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Fedora 系统对很多用户来说都很舒适。它有一个令人惊叹的桌面，可以轻松地完成日常任务。而在这光鲜的表面之下是由 Linux 系统提供的支持，而终端是高级用户使用这些底层能力的最简单方法。默认的终端简单且功能有限。但是，终端复用器能让你的终端变得非常强大。本文展示了一些流行的终端多路复用器以及如何安装它们。为什么要用它？嗯，首先，它可以让你注销你的系统，而同时让你的终端会话不受干扰。退出你的控制台，这样安全，在其他地方旅行时通过远程登录 SSH 继续之前的操作是非常有用的。这里有一些工具可以看下。最古老和最知名的终端多路复用器之一是 screen。但是，由于其代码不再维护，本文将重点介绍最近的应用。 （“最近的”是相对而言的，其中一些已存在多年！）Tmuxtmux 是 screen 最广泛使用的替代品之一。它有高度可配置的接口。你可以根据需要对 tmux 进行编程以启动特定类型的会话。在前面发表的这篇文章中你会发现更多关于 tmux 的信息：使用 tmux 实现更强大的终端已经是 tmux 用户？你可能会喜欢这篇使你的 tmux 会话更有效的文章。要安装 tmux，由于你可能已经在终端中，请带上 sudo 使用 dnf：$ sudo dnf install tmux要开始学习，请运行 tmux 命令。单窗格窗口以你的默认 shell 启动。tmux 使用修饰键来表示接下来会发出命令。默认情况下，此键为 Ctrl+B。如果输入 Ctrl+B, C，你将创建一个带有 shell 的新窗口。提示：使用 Ctrl+B, ? 进入帮助模式，会列出你可以使用的所有键。为了简单起见，你先查看 bind-key -T prefix 开头的行。这些是你可以在修饰键之后立即使用的键，可以用来配置你的 tmux 会话。你可以按 Ctrl+C 退出帮助模式回 tmux。要完全退出 tmux，请使用标准 exit 命令或 Ctrl+D 退出所有 shell。Dvtm你可能最近在 Fedroa Magzine 上看到过一篇 dwm，一个动态窗口管理器的文章。像 dwm 一样，dvtm 用于平铺窗口管理，但是是用在终端中。它的设计坚持 UNIX 的“做好一件事”的理念，在这里是管理终端中的窗口。安装 dvtm 也很简单。但是，如果你想要前面提到的注销功能，你还需要 abduco 包来处理 dvtm 的会话管理。$ sudo dnf install dvtm abducodvtm 已经映射了许多管理终端窗口的按键。默认情况下，它使用 Ctrl+G 作为其修饰键。这个按键告诉 dvtm 接下来的字符将成为它应该处理的命令。例如， Ctrl+G, C 创建一个新窗口，Ctrl+G, X 将其关闭。有关使用 dvtm 的更多信息，请查看 dvtm 的主页，其中包含大量提示和入门信息。Byobu虽然 byobu 本身并不是真正的多路复用器 —— 它封装了 tmux 甚至更老的 screen 来添加功能，但它也值得在这里一提。通过帮助菜单和窗口选项卡，以便更加容易地找到那些功能，byobu 使终端复用器更适合初学者。当然它也可以在 Fedora 仓库中找到。要安装它，请使用以下命令：$ sudo dnf install byobu默认情况下，byobu 会在内部运行 screen，因此你可能希望运行 byobu-tmux 来封装 tmux。你可以使用 F9 键打开帮助菜单以获取更多信息，来帮助你入门。Mtmmtm 是你可以找到的最小的复用器之一。事实上，它只有大约 1000 行代码！如果你处于受限的环境（例如旧硬件、最小容器等）中，你可能会发现它很有用。要开始使用，你需要安装一些包。$ sudo dnf install git ncurses-devel make gcc然后克隆 mtm 所在的仓库：$ git clone https://github.com/deadpixi/mtm.git进入 mtm 文件夹并构建程序：$ make你可能会收到一些警告，但完成后，你将会有一个非常小的 mtm 程序。使用以下命令运行它：$ ./mtm你可以在 GitHub 页面上找到该程序的所有文档。这里只是一些终端复用器。你有想推荐的么？请在下面留下你的评论，享受在终端中创建窗口吧！via: https://fedoramagazine.org/4-cool-terminal-multiplexers/作者：Paul W. Frields 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Ansible 是世界上最受欢迎的自动化引擎之一。它能让你自动化几乎任何事情，从本地系统的设置到大量的平台和应用。它是跨平台的，因此你可以将其用于各种操作系统。请继续阅读以获取有关如何在 Fedora 中获取最新 Ansible，以及它的一些更改和改进，以及如何使用它。发布版本和功能Ansible 2.8 最近发布了，其中包含许多修复、功能和增强。仅仅几天之后，它就可在 Fedora 29 和 30 以及 EPEL 中获取。两周前发布了后续版本 2.8.1。同样，新版本在几天内就可以在 Fedora 中获取。使用 sudo 能够非常容易地从官方仓库安装：$ sudo dnf -y install ansible2.8 版本有很长的更新列表，你可以在 2.8 的迁移指南中阅读查看。但其中包含了一些好东西，比如 Python 解释器发现功能 。Ansible 2.8 现在会试图找出哪个 Python 是它所运行的平台的首选版本。如果失败，Ansible 会使用后备列表。但是，你仍然可以使用变量 ansible_python_interpreter 来设置 Python 解释器。另一个变化使 Ansible 在各个平台上更加一致。由于 sudo 专用于 UNIX/Linux，而其他平台并没有，因此现在在更多地方使用 become。这包括了命令行开关。例如，-ask-sudo-pass 已变成了 -ask-become-pass，提示符也变成了 BECOME password:。2.8 和 2.8.1 版本中还有许多其他功能。有关所有细节，请查看 GitHub 上的官方更新日志。使用 Ansible也许你不确定 Ansible 是否可以实际使用。别担心，你并不是唯一一个这样想的，因为它太强大了。但事实证明，它并不难以使用，在一个家庭内的几台电脑（甚至一台电脑）上设置都可以。我们之前在 Fedora Magazine 中也讨论过这个话题：使用 Ansible 设置工作站试试看 Ansible，说下你的想法。很重要的一部分是让 Fedora 保持最新版本。自动化快乐！via: https://fedoramagazine.org/get-the-latest-ansible-2-8-in-fedora/作者：Paul W. Frields 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出