分类 技术 下的文章

在本文中,我们将解释两个简单的命令行小技巧,它可以帮你只列出所有的今天的文件。

Linux 用户在命令行上遇到的常见问题之一是定位具有特定名称的文件,如果你知道确定的文件名则可能会容易得多。

不过,假设你忘记了白天早些时候创建的文件的名称(在你包含了数百个文件的 home 文件夹中),但现在你有急用。

下面用不同的方式只列出所有你今天创建或修改的文件(直接或间接)。

1、 使用 ls 命令,只列出你的 home 文件夹中今天的文件。

# ls  -al --time-style=+%D | grep 'date +%D'

其中:

  • -a - 列出所有文件,包括隐藏文件
  • -l - 启用长列表格式
  • --time-style=FORMAT - 显示指定 FORMAT 的时间
  • +%D - 以 %m/%d/%y (月/日/年)格式显示或使用日期

Find Recent Files in Linux

在Linux中找出最近的文件

此外,你使用可以 -X 标志来按字母顺序对结果排序

# ls -alX --time-style=+%D | grep 'date +%D'

你也可以使用 -S 标志来基于大小(由大到小)来排序:

# ls -alS --time-style=+%D | grep 'date +%D'

2、 另外,使用 find 命令会更灵活,并且提供比 ls 更多的选项,可以实现相同的目的。

  • -maxdepth 级别用于指定在搜索操作的起点下(在这个情况下为当前目录)的搜索层级(子目录层级数)。
  • -newerXY,用于所寻找的文件的时间戳 X 比参照文件的时间戳 Y 更新一些的文件。 XY 表示以下任何字母: - a - 参照文件的访问时间 - B - 参照文件的创建时间 - c - 参照文件的 inode 状态改变时间 - m - 参照文件的修改时间 - t - 直接指定一个绝对时间

下面的命令意思是只找出 2016-12-06 这一天修改的文件:

# find . -maxdepth 1 -newermt "2016-12-06"

Find Today's Files in Linux

在 Linux 中找出今天的文件

重要:在上面的 find 命令中使用正确的日期格式作为参照时间,一旦你使用了错误的格式,你会得到如下错误:

# find . -maxdepth 1 -newermt "12-06-2016"
find: I cannot figure out how to interpret '12-06-2016' as a date or time

或者,使用下面的正确格式:

# find . -maxdepth 1 -newermt "12/06/2016"
或者
# find . -maxdepth 1 -newermt "12/06/16"

Find Todays Modified Files in Linux

在 Linux 中找出今天修改的文件

你可以在我们的下面一系列文章中获得 lsfind 命令的更多使用信息。

在本文中,我们解释了如何使用 ls 和 find 命令帮助只列出今天的文件。 请使用以下反馈栏向我们发送有关该主题的任何问题或意见。 你也可以提醒我们其他可以用于这个目的的命令。


作者简介:Aaron Kili是一名 Linux 和 F.O.S.S 的爱好者,未来的 Linux 系统管理员、网站开发人员,目前是 TecMint 的内容创作者,他喜欢用电脑工作,并乐于分享知识。


via: http://www.tecmint.com/find-recent-modified-files-in-linux/

作者:Aaron Kili 译者:geekpi 校对:jasminepeng

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

这一节的Samba4 AD DC 架构系列文章,我们将会讨论如何把 Windows 10 系统的电脑添加到 Samba4 域环境中,以及如何在 Windows 10 系统下管理域环境。

一旦 Windows 10 系统加入到 Samba4 AD DC ,我们就可以在 Windows 10 系统中创建、删除或者禁用域用户和组了,可以创建新的组织单元,创建、编辑和管理域策略,还可以管理 Samba4 域 DNS 服务。

上面所有的功能和其它一些复杂的与域管理相关的工作都可以通过 Windows 环境下的 RSAT 工具来完成—— Microsoft 远程服务器管理工具。

要求

1、 在 Ubuntu 系统上使用 Samba4 来创建活动目录架构(一)

2、 在 Linux 命令行下管理 Samba4 AD 架构(二)

第一步:配置域时间同步

1、在使用 Windows 10 系统的 RSAT 工具来管理 Samba4 ADDC 之前,我们需要了解与活动目录相关的一个很重要的服务,该服务要求精确的时间同步

在大多数的 Linux 发行版中,都由 NTP 进程提供时间同步机制。AD 环境默认允许最大的时间差距是 5 分钟。

如果时间差距超过 5 分钟,你将会遇到各种各样的异常报错,最严重的会影响到 AD 用户、域成员服务器或共享访问等。

为了在 Ubuntu 系统中安装网络时间协议进程和 NTP 客户端工具,可执行以下命令:

$ sudo apt-get install ntp ntpdate

Install NTP on Ubuntu

在 Ubuntu 系统下安装 NTP 服务

2、下一步,修改 NTP 配置文件,使用一个离你最近的 NTP 服务地址列表替换默认的 NTP 池服务列表。

NTP 服务器地址列表可以从 NTP 地址库项目官方网站获取:http://www.pool.ntp.org/en/

$ sudo nano /etc/ntp.conf

在每一行 pool 前添加一个 # 符号以注释默认的服务器列表,并替换为适合你的 NTP 服务器地址,如下图所示:

pool 0.ro.pool.ntp.org iburst
pool 1.ro.pool.ntp.org iburst
pool 2.ro.pool.ntp.org iburst
# Use Ubuntu's ntp server as a fallback.
pool 3.ro.pool.ntp.org

Configure NTP Server in Ubuntu

在 Ubuntu 系统下配置 NTP 服务

3、此时,先不要关闭该文件。移动光标到文件顶部,在 driftfile 参数后面添加下面一行内容。该设置是为了让客户端查询该服务时使用 AD 的 NTP 签署请求。

ntpsigndsocket /var/lib/samba/ntp_signd/

Sync AD with NTP

使用 NTP 来同步 AD

4、最后,移动光标到文件底部并添加如下一行内容,如截图所示,仅允许网络客户端查询该服务器上的时间。

restrict default kod nomodify notrap nopeer mssntp

Query Clients to NTP Server

限制 NTP 服务的查询客户端

5、设置完成之后,保存并关闭 NTP 配置文件,为了让 NTP 服务读取 ntp_signed 目录,需要授予 NTP 服务合适的权限。

以下是 Samba NTP socket 的系统路径。之后,重启 NTP 服务以应用更改,并使用 netstat 命令grep 过滤相接合来检查 NTP 服务是否正常。

$ sudo chown root:ntp /var/lib/samba/ntp_signd/
$ sudo chmod 750 /var/lib/samba/ntp_signd/
$ sudo systemctl restart ntp
$ sudo netstat –tulpn | grep ntp

Grant Permission to NTP

给 NTP 服务授权

使用 ntpq 命令行工具来监控 NTP 进程,加上 -p 参数来显示摘要信息。

$ ntpq -p

Monitor NTP Server Pool

监控 NTP 服务器池

第二步:处理 NTP 时间同步异常问题

6、有时候 NTP 进程在尝试与上游 ntp 服务端同步时间的计算过程中会卡住,导致客户端使用 ntpdate 工具手动强制同步时间时报如下错误:

# ntpdate -qu adc1
ntpdate[4472]: no server suitable for synchronization found

NTP Time Synchronization Error

NTP 时间同步异常

ntpdate 命令加上 -d 调试选项:

# ntpdate -d adc1.tecmint.lan
Server dropped: Leap not in sync

NTP Server Dropped Leap Not in Sync

NTP Server Dropped Leap Not in Sync

7、为了避免出现该问题,使用下面的方法来解决这个问题:在服务器上停止 NTP 服务,使用 ntpdate 客户端工具加上 -b 参数指定外部 peer 地址来手动强制同步时间,如下图所示:

# systemctl stop ntp.service
# ntpdate -b 2.ro.pool.ntp.org  [你的 ntp peer]
# systemctl start ntp.service
# systemctl status ntp.service

Force NTP Time Synchronization

强制 NTP 时间同步

8、当时间正确同步之后,启动服务器上的 NTP 服务,并且在客户端服务器上执行如下命令来验证 NTP 时间同步服务是否可用:

# ntpdate -du adc1.tecmint.lan    [你的 AD DC 服务器]

Verify NTP Time Synchronization

验证 NTP 时间同步

至此, NTP 服务应该已经工作正常了。

第三步:把 Windows 10 系统加入域环境

9、从我们的前一篇文章可以看出,Samba4 活动目录可以使用 samba-tool 工具在命令行下管理,可以直接在服务器上的 VTY 控制台或者通过 SSH 工具远程连接到服务器上进行管理。

另外,更直观更灵活的方式是使用已加入域的 Windows 电脑中的微软远程服务器管理工具(RSAT)来管理我们的 Samba4 AD 域控制器。这些工具在当前的大多数 Windows 系统中都可以使用。

把 Windows 10 或是之前版本的微软操作系统加入到 Samba4 AD DC 环境中的过程也是非常容易的。首先,确保你的 Windows 10 电脑已经设置了正确的 Samba4 DNS 服务器的 IP 地址,以查询出准确的域解析结果。

打开“控制面板 -> 网络和 Internet -> 网络和共享中心 -> 网卡设置 -> 属性 -> IPv4 -> 属性 -> 使用下面的 DNS 服务器地址”,并且手动输入 Samba4 AD 服务器的 IP 地址,如下图所示:

join Windows to Samba4 AD

把 Windows 10 加入到 Samba4 AD 环境

Add DNS and Samba4 AD IP Address

添加 DNS 和 Samba4 AD 服务器地址

这里的 192.168.1.254 是 Samba4 AD 域控服务器的地址,用于域名解析。相应替换该 IP 地址。

10、下一步,点击 OK 按钮以应用网络设置,打开 CMD 命令行窗口,通过 ping 域名和 Samba4 服务器的 FQDN 地址来测试通过 DNS 解析到域是否连通。

ping tecmint.lan
ping adc1.tecmint.lan

Check Network Connectivity Between Windows and Samba4 AD

检查 Windows 和 Samb4 AD 服务器的网络连通性

11、如果 Windows 客户端 DNS 查询的结果解析正确,那么,你还需要确认客户端时间是否已跟域环境同步。

打开“控制面板 -> 时钟、语言和区域 -> 设置时间和日期 -> Internet 时间页 -> 更改设置”,输入你同步时间的域名和 Internet 时间服务器字段。

点击立即更新按钮来强制与域同步时间,点击 OK 关闭窗口。

Synchronize Time with Internet Server

与 Internet 服务器同步时间

12、最后,通过打开“系统属性 -> 更改 -> 域成员 -> 输入域名”,点击 OK,输入你的域管理员账号和密码,再次点击 OK。

应该弹出一个新的窗口通知你已经是一个域成员了。点击 OK 关闭弹出窗口,并且重启机器以应用域更改。

下面的截图将说明这些操作步骤。

Join Windows Domain to Samba4 AD

把 Windows 域加入到 Samba4 AD 环境

Enter Domain Administration Login

输入域管理员账号登录

Domain Joined to Samba4 AD Confirmation

确认域已加入到 Samba4 AD 环境

Restart Windows Server for Changes

重启 Windows 服务器以应用更改

13、重启之后,单击其它用户并且使用具有管理员权限的 Samba4 域账号登录到 Windows 系统,你已经准备好进入到后边几个步骤了。

Login to Windows Using Samba4 AD Account

使用 Samba4 AD 账号登录到 Windows

第四步:使用 RSAT 工具来管理 Samba4 AD DC

14、微软远程服务器管理工具(RSAT)被广泛地用来管理 Samba4 活动目录,你可以根据你的 Windows 系统版本从下面的地址来下载该工具:

  1. Windows 10: https://www.microsoft.com/en-us/download/details.aspx?id=45520
  2. Windows 8.1: http://www.microsoft.com/en-us/download/details.aspx?id=39296
  3. Windows 8: http://www.microsoft.com/en-us/download/details.aspx?id=28972
  4. Windows 7: http://www.microsoft.com/en-us/download/details.aspx?id=7887

一旦 Windows 10 独立安装包下载完成,运行安装包,等待安装完成并重启机器以应用所有更新。

重启之后,打开“控制面板 -> 程序(卸载程序) -> 启用或关闭 Windows 功能”,勾选所有的远程服务器管理工具。

点击 OK 开始安装,安装完成之后重启系统。

Administer Samba4 AD from Windows

从 Windows 系统下管理 Samba4 AD

15、要进入 RSAT 工具集,打开“控制面板 -> 系统和安全 -> 管理工具”。

这些工具也可以在开始工菜单的管理工具菜单中找到。另外,你也可以打开 Windows MMC 工具和管理单元,从“文件 -> 添加/删除管理单元”菜单中访问它们。

Access Remote Server Administration Tools

访问远程服务器管理工具集

最常用的工具,比如 AD UC ,DNS 和组策略管理工具可以通过从右键菜单发送到功能来新建快捷方式到桌面直接运行。

16、你可以通过 AD UC 和列出域里的电脑(新加入的 Windows 机器应该出现在列表中)来验证 RSAT 功能,创建一个组织单元或组。

在 Samba4 服务器上使用 wbinf 命令来检查用户和组是否已经创建成功。

Active Directory Users and Computers

活动目录用户和计算机

Create Organizational Units and New Users

创建组织单元和新用户

Confirm Samba4 AD Users

确认 Samba4 AD 用户

就这些吧!该主题的下一篇文章将包含其它 Samba4 活动目录的重要内容,包括通过 RSAT 工具来管理 Samba4 活动目录,比如,如何管理 DNS 服务器,添加 DNS 记录和创建 DNS 解析查询区,如何管理及应用域策略以及域用户如何创建交互式登录提示信息。


作者简介:我是一个电脑迷,开源软件及 Linux 系统爱好者,有近4年的 Linux 桌面和服务器系统及 bash 编程经验。


via: http://www.tecmint.com/manage-samba4-ad-from-windows-via-rsat/

作者:Matei Cezar 译者:rusking 校对:wxy

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

随着 Ubuntu 16.10 的发布,Unity 8 越来越吸引到了更多人的关注。这是因为在这个大家最爱的 Linux 发行版的最新版本中可以体验其带有的试验性桌面。桌面发行版是人们最熟悉的 Unity 环境,但有一点点不同。它不再使用 X11 图形技术,Ubuntu 的开发者选择了另一种截然不同的方式。

原来,Unity 8 用的是 Mir,这是 Ubuntu 为了在 Linux 上提供显示服务而做出的努力。这项技术已经在 Ubuntu phone 和平板上大量使用,但是这次新版是我们在桌面环境上第一次见到 Mir 。

这项技术相当新颖,结果是没多少 Linux 程序能运行在它之上。不是所有,那也是大部分的程序设计在 Xorg 和 X11 之上运行。如果你想要试试在 Unity 8 上运行这些程序,你肯定会为在 Unity 8上确实能够运行之前的 Xorg 程序而高兴。接下来是如何做!

登录进 Unity 8

Unity 8 在 Ubuntu 16.10 上是一个可选会话。在使用之前只须牢记一件事情:它不会加载 AMD 的图形驱动,Intel 的同样不会加载。唯一支持的图形驱动是 Nvidia 的开源驱动。要用 Unity 8 的话,只要像往常那样启动 Ubuntu,然后,在登录进去之前,点击用户名上面的 Ubuntu 图标,选择 Unity8 选项。如果万事顺利的话,这个新的、试验性的桌面环境将会加载。

注意: Unity 8 非常新而且不稳定,自行承担使用风险。

安装 Libertine

Xorg 程序(例如 Firefox 等)确实能在 Unity 8 上使用,在使用之前需要一点小调整。在 Mir 桌面上用终端打开 Libertine ,在 Scopes 窗口中点击终端图标就能完成。一旦打开,输入你的密码。接下来,输入以下的命令:

sudo apt install libertine-tools libertine-scope libertine

当这些程序完成安装后,点击并拖动 Scopes 窗口以刷新内容。然后,在面板上点击来启动 libertine。

新建 Xorg 容器

打开 Libertine,就可以新建一些(应用)容器了。这些容器很特别,因为它们能让基于 X11 的 Linux 程序在 Mir/Unity 8 桌面上的容器之中运行。另外,如果需要支持 32 位应用,勾选“i386 multiarch support”复选框。否则,什么都不要动(或者输入名字和密码),点击“OK”。

在这之后,这个 Xorg 容器就准备好,可以使用了。在 Libertine 找到它并启动。删除也很容易,右键点击容器,选择“删除”选项。

注意:每一个 Xorg 容器有 500 MB的最大内存限制。所以多个容器是有必要的。

安装软件

在 Libertine 容器中安装软件有两个方法。第一种是允许用户启动容器后选择“输入包名或者 Debian 文件”,这意味着用户可以在软件中心或者终端找到一个软件的名字,然后在 Libertine 中输入它来安装。也可以指定特定的 DEB 文件来安装,可以在Libertine LXC 容器中直接搜索安装包。

注意:Unity 8 非常新,一些程序或许不能在 Libertine 里加载或者完全安装。

结论

Unity 8 展现了不少的新特性,它现代、时髦,而且比之前任何一个 Unity 迭代版本都快。唯一限制它的就是使用率。事实是大部分用户更乐意选择实用的应用程序,而不是一个别致新颖的桌面环境。某种程度上来说,使用 Libertine 能解决这个问题,但它不会永久有效。早晚有一天,Canonical 都需要自行移植这些程序或者向社区求助来彻底解决这个问题。


via: https://www.maketecheasier.com/use-old-xorg-apps-unity-8/

作者:Derrik Diener 译者:ypingcn 校对:wxy

本文由 LCTT 组织编译,Linux中国 荣誉推出

NTP 是通过网络来同步时间的一种 TCP/IP 协议。通常客户端向服务器请求当前的时间,并根据结果来设置其时钟。

这个描述是挺简单的,实现这一功能却是极为复杂的 - 首先要有多层 NTP 服务器,第一层 NTP 服务器连接原子时钟,第二层、第三层服务器则担起负载均衡的责任,以处理因特网传来的所有请求。另外,客户端可能也超乎你想象的复杂 - 它必须排除通讯延迟,调整时间的同时不干扰其它在服务器中运行的进程。幸运的是,所有的这些复杂性都进行了封装,你是不可见也不需要见到的。

在 Ubuntu 中,是使用 ntpdatentpd 来同步时间的。

timedatectl

在最新的 Ubuntu 版本中,timedatectl 替代了老旧的 ntpdate。默认情况下,timedatectl 在系统启动的时候会立刻同步时间,并在稍后网络连接激活后通过 socket 再次检查一次。

如果已安装了 ntpdate / ntptimedatectl 会退而让你使用之前的设置。这样确保了两个时间同步服务不会相互冲突,同时在你升级的时候还保留原本的行为和配置。但这也意味着从旧版本的发行版升级时 ntp/ntpdate 仍会安装,因此会导致新的基于 systemd 的时间服务被禁用。

timesyncd

在最新的 Ubuntu 版本中,timesyncd 替代了 ntpd 的客户端的部分。默认情况下 timesyncd 会定期检测并同步时间。它还会在本地存储更新的时间,以便在系统重启时做时间单步调整。

通过 timedatectltimesyncd 设置的当前时间状态和时间配置,可以使用 timedatectl status 命令来进行确认。

timedatectl status
      Local time: Fri 2016-04-29 06:32:57 UTC
  Universal time: Fri 2016-04-29 06:32:57 UTC
        RTC time: Fri 2016-04-29 07:44:02
       Time zone: Etc/UTC (UTC, +0000)
 Network time on: yes
NTP synchronized: no
 RTC in local TZ: no

如果安装了 NTP,并用它替代 timedatectl 来同步时间,则 NTP synchronized 将被设置为 yes

timedatectltimesyncd 用来获取时间的 nameserver 可以通过 /etc/systemd/timesyncd.conf 来指定,另外在 /etc/systemd/timesyncd.conf.d/ 下还有灵活的附加配置文件。

ntpdate

由于 timedatectl 的存在,各发行版已经弃用了 ntpdate,默认不再进行安装。如果你安装了,它会在系统启动的时候根据 Ubuntu 的 NTP 服务器来设置你电脑的时间。之后每当一个新的网络接口启动时,它就会重新尝试同步时间 —— 在这期间只要其涵盖的时间差不是太大,它就会慢慢偏移时间。该行为可以通过 -B/-b 开关来进行控制。

ntpdate ntp.ubuntu.com

时间服务器

默认情况下,基于 systemd 的工具都是从 ntp.ubuntu.com 请求时间同步的。经典的基于 ntpd 的服务基本上都是使用 [0-3].ubuntu.pool.ntp.org 池中的 2.ubuntu.pool.ntp.org,还有 ntp.ubuntu.com,此外需要的话还支持 IPv6。如果想强制使用 IPv6,可以使用 ipv6.ntp.ubuntu.com,不过这并非默认配置。

ntpd

ntp 的守护进程 ntpd 会计算你的系统时钟的时间偏移量并且持续的进行调整,所以不会出现时间差距较大的更正,比如说,不会导致不连续的日志。该进程只花费少量的进程资源和内存,但对于现代的服务器来说实在是微不足道的了。

安装

要安装 ntpd,在终端命令行中输入:

sudo apt install ntp

配置

编辑 /etc/ntp.conf —— 增加/移除 server 行。默认配置有以下服务器:

# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
server 0.ubuntu.pool.ntp.org
server 1.ubuntu.pool.ntp.org
server 2.ubuntu.pool.ntp.org
server 3.ubuntu.pool.ntp.org

修改配置文件之后,你需要重新加载 ntpd

sudo systemctl reload ntp.service

查看状态

使用 ntpq 来查看更多信息:

# sudo ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+stratum2-2.NTP. 129.70.130.70    2 u    5   64  377   68.461  -44.274 110.334
+ntp2.m-online.n 212.18.1.106     2 u    5   64  377   54.629  -27.318  78.882
*145.253.66.170  .DCFa.           1 u   10   64  377   83.607  -30.159  68.343
+stratum2-3.NTP. 129.70.130.70    2 u    5   64  357   68.795  -68.168 104.612
+europium.canoni 193.79.237.14    2 u   63   64  337   81.534  -67.968  92.792

PPS 支持

从 Ubuntu 16.04 开始,ntp 支持 PPS 规范,给 ntp 提供了本地时间源,以提供更高的精度。查看下边列出的链接来获取更多配置信息。

参考资料


via: https://help.ubuntu.com/lts/serverguide/NTP.html

作者:Ubuntu 译者:GHLandy 校对:jasminepeng

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

 title=

在本系列的最后,我们将详细介绍如何在 Dovecot 和 Postfix 中设置虚拟用户和邮箱。

欢迎回来,热心的 Linux 系统管理员们! 在本系列的第一部分第二部分中,我们学习了如何将 Postfix 和 Dovecot 组合在一起,搭建一个不错的 IMAP 和 POP3 邮件服务器。 现在我们将学习设置虚拟用户,以便我们可以管理所有 Dovecot 中的用户。

抱歉,还不能配置 SSL

我知道我答应过教你们如何设置一个受 SSL 保护的服务器。 不幸的是,我低估了这个话题的范围。 所以,我会下个月再写一个全面的教程。

今天,在本系列的最后一部分中,我们将详细介绍如何在 Dovecot 和 Postfix 中设置虚拟用户和邮箱。 在你看来这是有点奇怪,所以我尽量让下面的例子简单点。我们将使用纯文本文件和纯文本来进行身份验证。 你也可以选择使用数据库后端和较强的加密认证形式,具体请参阅文末链接了解有关这些的更多信息。

虚拟用户

我们希望邮件服务器上用的是虚拟用户而不是 Linux 系统用户。使用 Linux 系统用户不能扩展,并且它们会暴露系统登录账号,给你的服务器带来不必要的风险。 设置虚拟用户需要在 Postfix 和 Dovecot 中编辑配置文件。我们将从 Postfix 开始。首先,我们将从一个干净、简化的 /etc /postfix/main.cf 开始。移动你原始的 main.cf 到别处做个备份,创建一个新的干净的文件,内容如下:

compatibility_level=2
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu/GNU)
biff = no
append_dot_mydomain = no

myhostname = localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = $myhostname
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

virtual_mailbox_domains = /etc/postfix/vhosts.txt
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmaps.txt
virtual_minimum_uid = 1000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = lmtp:unix:private/dovecot-lmtp0

你可以直接拷贝这份文件,除了 mynetworks 参数的设置 192.168.0.0/24,它应该是你的本地子网掩码。

接下来,创建用户和组 vmail 来拥有你的虚拟邮箱。虚拟邮箱保存在 vmail 的家目录下。

$ sudo groupadd -g 5000 vmail
$ sudo useradd -m -u 5000 -g 5000 -s /bin/bash vmail

接下来重新加载 Postfix 配置:

$ sudo postfix reload
[sudo] password for carla: 
postfix/postfix-script: refreshing the Postfix mail system

Dovecot 虚拟用户

我们会使用 Dovecot 的 lmtp 协议来连接到 Postfix。你可以这样安装:

$ sudo apt-get install dovecot-lmtpd

main.cf 的最后一行涉及到 lmtp。复制这个 /etc/dovecot/dovecot.conf 示例文件来替换已存在的文件。再说一次,我们只使用这一个文件,而不是 /etc/dovecot/conf.d 内的所有文件。

protocols = imap pop3 lmtp
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot-info.log
ssl = no
disable_plaintext_auth = no
mail_location = maildir:~/.Mail
pop3_uidl_format = %g
auth_verbose = yes
auth_mechanisms = plain

passdb {
  driver = passwd-file
  args = /etc/dovecot/passwd
}

userdb {
  driver = static
  args = uid=vmail gid=vmail home=/home/vmail/studio/%u
}

service lmtp {
 unix_listener /var/spool/postfix/private/dovecot-lmtp {
   group = postfix
   mode = 0600
   user = postfix
  }
}

protocol lmtp {
  postmaster_address = postmaster@studio
}
service lmtp {
  user = vmail
}

最后,你可以创建一个含有用户和密码的文件 /etc/dovecot/passwd。对于纯文本验证,我们只需要用户的完整邮箱地址和密码:

alrac@studio:{PLAIN}password
layla@studio:{PLAIN}password
fred@studio:{PLAIN}password
molly@studio:{PLAIN}password
benny@studio:{PLAIN}password

Dovecot 虚拟用户独立于 Postfix 虚拟用户,因此你需要管理 Dovecot 中的用户。保存所有的设置并重启 Postfix 和 Dovecot:

$ sudo service postfix restart
$ sudo service dovecot restart

现在让我们使用老朋友 telnet 来看下 Dovecot 是否设置正确。

$ telnet studio 110
Trying 127.0.1.1...
Connected to studio.
Escape character is '^]'.
+OK Dovecot ready.
user molly@studio
+OK
pass password
+OK Logged in.
quit
+OK Logging out.
Connection closed by foreign host.

现在一切都好!让我们用 mail 命令,发送测试消息给我们的用户。确保使用用户的完整电子邮箱地址而不只是用户名。

$ mail benny@studio
Subject: hello and welcome!
Please enjoy your new mail account!
.

最后一行的英文句点表示发送消息。让我们看下它是否到达了正确的邮箱。

$ sudo ls -al /home/vmail/studio/benny@studio/.Mail/new
total 16
drwx------ 2 vmail vmail 4096 Dec 14 12:39 .
drwx------ 5 vmail vmail 4096 Dec 14 12:39 ..
-rw------- 1 vmail vmail  525 Dec 14 12:39 1481747995.M696591P5790.studio,S=525,W=540

找到了。这是一封我们可以阅读的纯文本文件:

$ less 1481747995.M696591P5790.studio,S=525,W=540
Return-Path: <carla@localhost>
Delivered-To: benny@studio
Received: from localhost
        by studio (Dovecot) with LMTP id V01ZKRuuUVieFgAABiesew
        for <benny@studio>; Wed, 14 Dec 2016 12:39:55 -0800
Received: by localhost (Postfix, from userid 1000)
        id 9FD9CA1F58; Wed, 14 Dec 2016 12:39:55 -0800 (PST)
Date: Wed, 14 Dec 2016 12:39:55 -0800
To: benny@studio
Subject: hello and welcome!
User-Agent: s-nail v14.8.6
Message-Id: <20161214203955.9FD9CA1F58@localhost>
From: carla@localhost (carla)

Please enjoy your new mail account!

你还可以使用 telnet 进行测试,如本系列前面部分所述,并在你最喜欢的邮件客户端中设置帐户,如 Thunderbird,Claws-Mail 或 KMail。

故障排查

当邮件工作不正常时,请检查日志文件(请参阅配置示例),然后运行 journalctl -xe。 这时会提供定位输入错误、未安装包和可以 Google 的短语等所有需要的信息。

接下来?

假设你的 LAN 名称服务配置正确,你现在有一台很好用的 LAN 邮件服务器。 显然,以纯文本发送消息不是最佳的,不支持互联网的邮件也是绝对不可以的。 请参阅 Dovecot SSL 配置Postfix TLS 支持VirtualUserFlatFilesPostfix 涵盖了 TLS 和数据库后端。并请期待我之后的 SSL 指南。这次我说的是真的。


via: https://www.linux.com/learn/sysadmin/building-email-server-ubuntu-linux-part-3

作者:CARLA SCHRODER 译者:geekpi 校对:jasminepeng

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

UFW,即 简单防火墙 uncomplicated firewall ,是一个 Arch Linux、Debian 或 Ubuntu 中管理防火墙规则的前端。 UFW 通过命令行使用(尽管它有可用的 GUI),它的目的是使防火墙配置简单(即 不复杂 uncomplicated )。

开始之前

1、 熟悉我们的入门指南,并完成设置服务器主机名和时区的步骤。

2、 本指南将尽可能使用 sudo。 在完成保护你的服务器指南的章节,创建一个标准用户帐户,强化 SSH 访问和移除不必要的网络服务。 但不要跟着创建防火墙部分 - 本指南是介绍使用 UFW 的,它对于 iptables 而言是另外一种控制防火墙的方法。

3、 更新系统

Arch Linux

sudo pacman -Syu

Debian / Ubuntu

sudo apt-get update && sudo apt-get upgrade

安装 UFW

UFW 默认包含在 Ubuntu 中,但在 Arch 和 Debian 中需要安装。 Debian 将自动启用 UFW 的 systemd 单元,并使其在重新启动时启动,但 Arch 不会。 这与告诉 UFW 启用防火墙规则不同,因为使用 systemd 或者 upstart 启用 UFW 仅仅是告知 init 系统打开 UFW 守护程序。

默认情况下,UFW 的规则集为空,因此即使守护程序正在运行,也不会强制执行任何防火墙规则。 强制执行防火墙规则集的部分在下面。

Arch Linux

1、 安装 UFW:

sudo pacman -S ufw

2、 启动并启用 UFW 的 systemd 单元:

sudo systemctl start ufw
sudo systemctl enable ufw

Debian / Ubuntu

1、 安装 UFW

sudo apt-get install ufw

使用 UFW 管理防火墙规则

设置默认规则

大多数系统只需要打开少量的端口接受传入连接,并且关闭所有剩余的端口。 从一个简单的规则基础开始,ufw default命令可以用于设置对传入和传出连接的默认响应动作。 要拒绝所有传入并允许所有传出连接,那么运行:

sudo ufw default allow outgoing
sudo ufw default deny incoming

ufw default 也允许使用 reject 参数。

警告:

除非明确设置允许规则,否则配置默认 denyreject 规则会锁定你的服务器。确保在应用默认 denyreject 规则之前,已按照下面的部分配置了 SSH 和其他关键服务的允许规则。

添加规则

可以有两种方式添加规则:用端口号或者服务名表示。

要允许 SSH 的 22 端口的传入和传出连接,你可以运行:

sudo ufw allow ssh

你也可以运行:

sudo ufw allow 22

相似的,要在特定端口(比如 111)上 deny 流量,你需要运行:

sudo ufw deny 111

为了更好地调整你的规则,你也可以允许基于 TCP 或者 UDP 的包。下面例子会允许 80 端口的 TCP 包:

sudo ufw allow 80/tcp
sudo ufw allow http/tcp

这个会允许 1725 端口上的 UDP 包:

sudo ufw allow 1725/udp

高级规则

除了基于端口的允许或阻止,UFW 还允许您按照 IP 地址、子网和 IP 地址/子网/端口的组合来允许/阻止。

允许从一个 IP 地址连接:

sudo ufw allow from 123.45.67.89

允许特定子网的连接:

sudo ufw allow from 123.45.67.89/24

允许特定 IP/ 端口的组合:

sudo ufw allow from 123.45.67.89 to any port 22 proto tcp

proto tcp 可以删除或者根据你的需求改成 proto udp,所有例子的 allow 都可以根据需要变成 deny

删除规则

要删除一条规则,在规则的前面加上 delete。如果你希望不再允许 HTTP 流量,你可以运行:

sudo ufw delete allow 80

删除规则同样可以使用服务名。

编辑 UFW 的配置文件

虽然可以通过命令行添加简单的规则,但仍有可能需要添加或删除更高级或特定的规则。 在运行通过终端输入的规则之前,UFW 将运行一个文件 before.rules,它允许回环接口、ping 和 DHCP 等服务。要添加或改变这些规则,编辑 /etc/ufw/before.rules 这个文件。 同一目录中的 before6.rules 文件用于 IPv6 。

还存在一个 after.ruleafter6.rule 文件,用于添加在 UFW 运行你通过命令行输入的规则之后需要添加的任何规则。

还有一个配置文件位于 /etc/default/ufw。 从此处可以禁用或启用 IPv6,可以设置默认规则,并可以设置 UFW 以管理内置防火墙链。

UFW 状态

你可以在任何时候使用命令:sudo ufw status 查看 UFW 的状态。这会显示所有规则列表,以及 UFW 是否处于激活状态:

Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

启用防火墙

随着你选择规则完成,你初始运行 ufw status 可能会输出 Status: inactive。 启用 UFW 并强制执行防火墙规则:

sudo ufw enable

相似地,禁用 UFW 规则:

sudo ufw disable
UFW 会继续运行,并且在下次启动时会再次启动。

日志记录

你可以用下面的命令启动日志记录:

sudo ufw logging on

可以通过运行 sudo ufw logging low|medium|high 设计日志级别,可以选择 lowmedium 或者 high。默认级别是 low

常规日志类似于下面这样,位于 /var/logs/ufw

Sep 16 15:08:14 <hostname> kernel: [UFW BLOCK] IN=eth0 OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=123.45.67.89 DST=987.65.43.21 LEN=40 TOS=0x00 PREC=0x00 TTL=249 ID=8475 PROTO=TCP SPT=48247 DPT=22 WINDOW=1024 RES=0x00 SYN URGP=0

前面的值列出了你的服务器的日期、时间、主机名。剩下的重要信息包括:

  • [UFW BLOCK]:这是记录事件的描述开始的位置。在此例中,它表示阻止了连接。
  • IN:如果它包含一个值,那么代表该事件是传入事件
  • OUT:如果它包含一个值,那么代表事件是传出事件
  • MAC:目的地和源 MAC 地址的组合
  • SRC:包源的 IP
  • DST:包目的地的 IP
  • LEN:数据包长度
  • TTL:数据包 TTL,或称为 time to live。 在找到目的地之前,它将在路由器之间跳跃,直到它过期。
  • PROTO:数据包的协议
  • SPT:包的源端口
  • DPT:包的目标端口
  • WINDOW:发送方可以接收的数据包的大小
  • SYN URGP:指示是否需要三次握手。 0 表示不需要。

via: https://www.linode.com/docs/security/firewalls/configure-firewall-with-ufw

作者:Linode 译者:geekpi 校对:wxy

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