Vivek Gite 发布的文章

sar 命令用用收集、报告、或者保存 UNIX / Linux 系统的活动信息。它保存选择的计数器到操作系统的 /var/log/sa/sadd 文件中。从收集的数据中,你可以得到许多关于你的服务器的信息:

  1. CPU 使用率
  2. 内存页面和使用率
  3. 网络 I/O 和传输统计
  4. 进程创建活动
  5. 所有的块设备活动
  6. 每秒中断数等等

sar 命令的输出能够用于识别服务器瓶颈。但是,分析 sar 命令提供的信息可能比较困难,所以要使用 kSar 工具。kSar 工具可以将 sar 命令的输出绘制成基于时间周期的、易于理解的图表。

sysstat 包

sarsa1、和 sa2 命令都是 sysstat 包的一部分。它是 Linux 包含的性能监视工具集合。

  1. sar:显示数据
  2. sa1sa2:收集和保存数据用于以后分析。sa2 shell 脚本在 /var/log/sa 目录中每日写入一个报告。sa1 shell 脚本将每日的系统活动信息以二进制数据的形式写入到文件中。
  3. sadc —— 系统活动数据收集器。你可以通过修改 sa1sa2 脚本去配置各种选项。它们位于以下的目录:

    • /usr/lib64/sa/sa1 (64 位)或者 /usr/lib/sa/sa1 (32 位) —— 它调用 sadc 去记录报告到 /var/log/sa/sadX 格式。
    • /usr/lib64/sa/sa2 (64 位)或者 /usr/lib/sa/sa2 (32 位) —— 它调用 sar 去记录报告到 /var/log/sa/sarX 格式。

如何在我的系统上安装 sar?

在一个基于 CentOS/RHEL 的系统上,输入如下的 yum 命令 去安装 sysstat:

# yum install sysstat

示例输出如下:

Loaded plugins: downloadonly, fastestmirror, priorities,
              : protectbase, security
Loading mirror speeds from cached hostfile
 * addons: mirror.cs.vt.edu
 * base: mirror.ash.fastserv.com
 * epel: serverbeach1.fedoraproject.org
 * extras: mirror.cogentco.com
 * updates: centos.mirror.nac.net
0 packages excluded due to repository protections
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package sysstat.x86_64 0:7.0.2-3.el5 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================
 Package        Arch          Version             Repository   Size
====================================================================
Installing:
 sysstat        x86_64        7.0.2-3.el5         base        173 k

Transaction Summary
====================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)

Total download size: 173 k
Is this ok [y/N]: y
Downloading Packages:
sysstat-7.0.2-3.el5.x86_64.rpm               | 173 kB     00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : sysstat                                      1/1

Installed:
  sysstat.x86_64 0:7.0.2-3.el5

Complete!

为 sysstat 配置文件

编辑 /etc/sysconfig/sysstat 文件去指定日志文件保存多少天(最长为一个月):

# vi /etc/sysconfig/sysstat

示例输出如下 :

# keep log for 28 days
# the default is 7
HISTORY=28

保存并关闭这个文件。

找到 sar 默认的 cron 作业

默认的 cron 作业位于 /etc/cron.d/sysstat

# cat /etc/cron.d/sysstat

示例输出如下:

# run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A

告诉 sadc 去报告磁盘的统计数据

使用一个文本编辑器去编辑 /etc/cron.d/sysstat 文件,比如使用 vim 命令,输入如下:

# vi /etc/cron.d/sysstat

像下面的示例那样更新这个文件,以记录所有的硬盘统计数据(-d 选项强制记录每个块设备的统计数据,而 -I 选项强制记录所有系统中断的统计数据):

# run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 -I -d 1 1
# generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A 

在 CentOS/RHEL 7.x 系统上你需要传递 -S DISK 选项去收集块设备的数据。传递 -S XALL 选项去采集如下所列的数据:

  1. 磁盘
  2. 分区
  3. 系统中断
  4. SNMP
  5. IPv6
# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 -S DISK 1 1
# 0 * * * * root /usr/lib64/sa/sa1 600 6 &
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A
# Run system activity accounting tool every 10 minutes

保存并关闭这个文件。

打开 CentOS/RHEL 版本 5.x/6.x 的服务

输入如下命令:

chkconfig sysstat on
service sysstat start

示例输出如下:

Calling the system activity data collector (sadc):

对于 CentOS/RHEL 7.x,运行如下的命令:

# systemctl enable sysstat
# systemctl start sysstat.service
# systemctl status sysstat.service 

示例输出:

● sysstat.service - Resets System Activity Logs
   Loaded: loaded (/usr/lib/systemd/system/sysstat.service; enabled; vendor preset: enabled)
   Active: active (exited) since Sat 2018-01-06 16:33:19 IST; 3s ago
  Process: 28297 ExecStart=/usr/lib64/sa/sa1 --boot (code=exited, status=0/SUCCESS)
 Main PID: 28297 (code=exited, status=0/SUCCESS)

Jan 06 16:33:19 centos7-box systemd[1]: Starting Resets System Activity Logs...
Jan 06 16:33:19 centos7-box systemd[1]: Started Resets System Activity Logs.

如何使用 sar?如何查看统计数据?

使用 sar 命令去显示操作系统中选定的累积活动计数器输出。在这个示例中,运行 sar 命令行,去实时获得 CPU 使用率的报告:

# sar -u 3 10

示例输出:

Linux 2.6.18-164.2.1.el5 (www-03.nixcraft.in)   12/14/2009

09:49:47 PM CPU %user %nice %system %iowait %steal %idle
09:49:50 PM all 5.66 0.00 1.22 0.04 0.00 93.08
09:49:53 PM all 12.29 0.00 1.93 0.04 0.00 85.74
09:49:56 PM all 9.30 0.00 1.61 0.00 0.00 89.10
09:49:59 PM all 10.86 0.00 1.51 0.04 0.00 87.58
09:50:02 PM all 14.21 0.00 3.27 0.04 0.00 82.47
09:50:05 PM all 13.98 0.00 4.04 0.04 0.00 81.93
09:50:08 PM all 6.60 6.89 1.26 0.00 0.00 85.25
09:50:11 PM all 7.25 0.00 1.55 0.04 0.00 91.15
09:50:14 PM all 6.61 0.00 1.09 0.00 0.00 92.31
09:50:17 PM all 5.71 0.00 0.96 0.00 0.00 93.33
Average: all 9.24 0.69 1.84 0.03 0.00 88.20

其中:

  • 3 表示间隔时间
  • 10 表示次数

查看进程创建的统计数据,输入:

# sar -c 3 10

查看 I/O 和传输率统计数据,输入:

# sar -b 3 10

查看内存页面统计数据,输入:

# sar -B 3 10

查看块设备统计数据,输入:

# sar -d 3 10

查看所有中断的统计数据,输入:

# sar -I XALL 3 10

查看网络设备特定的统计数据,输入:

# sar -n DEV 3 10
# sar -n EDEV 3 10

查看 CPU 特定的统计数据,输入:

# sar -P ALL
# Only 1st CPU stats
# sar -P 1 3 10 

查看队列长度和平均负载的统计数据,输入:

# sar -q 3 10

查看内存和交换空间的使用统计数据,输入:

# sar -r 3 10
# sar -R 3 10

查看 inode、文件、和其它内核表统计数据状态,输入:

# sar -v 3 10

查看系统切换活动统计数据,输入:

# sar -w 3 10

查看交换统计数据,输入:

# sar -W 3 10

查看一个 PID 为 3256 的 Apache 进程,输入:

# sar -x 3256 3 10

kSar 介绍

sarsadf 提供了基于命令行界面的输出。这种输出可能会使新手用户/系统管理员感到无从下手。因此,你需要使用 kSar,它是一个图形化显示你的 sar 数据的 Java 应用程序。它也允许你以 PDF/JPG/PNG/CSV 格式导出数据。你可以用三种方式去加载数据:本地文件、运行本地命令、以及通过 SSH 远程运行的命令。kSar 可以处理下列操作系统的 sar 输出:

  1. Solaris 8, 9 和 10
  2. Mac OS/X 10.4+
  3. Linux (Systat Version >= 5.0.5)
  4. AIX (4.3 & 5.3)
  5. HPUX 11.00+

下载和安装 kSar

访问 官方 网站去获得最新版本的源代码。使用 wget 去下载源代码,输入:

$ wget https://github.com/vlsi/ksar/releases/download/v5.2.4-snapshot-652bf16/ksar-5.2.4-SNAPSHOT-all.jar

如何运行 kSar?

首先要确保你的机器上 JAVA jdk 已安装并能够正常工作。输入下列命令去启动 kSar:

$ java -jar ksar-5.2.4-SNAPSHOT-all.jar

 title=

接下来你将看到 kSar 的主窗口,和有两个菜单的面板。

 title=

左侧有一个列表,是 kSar 根据数据已经解析出的可用图表的列表。右侧窗口将展示你选定的图表。

如何使用 kSar 去生成 sar 图表?

首先,你需要从命名为 server1 的服务器上采集 sar 命令的统计数据。输入如下的命令:

[ server1 ]# LC_ALL=C sar -A  > /tmp/sar.data.txt

接下来,使用 scp 命令从本地桌面拷贝到远程电脑上:

[ desktop ]$ scp [email protected]:/tmp/sar.data.txt /tmp/

切换到 kSar 窗口,点击 “Data” > “Load data from text file” > 从 /tmp/ 中选择 sar.data.txt > 点击 “Open” 按钮。

现在,图表类型树已经出现在左侧面板中并选定了一个图形:

 title=

 title=

 title=

放大和缩小

通过移动你可以交互式缩放图像的一部分。在要缩放的图像的左上角点击并按下鼠标,移动到要缩放区域的右下角,可以选定要缩放的区域。返回到未缩放状态,点击并拖动鼠标到除了右下角外的任意位置,你也可以点击并选择 zoom 选项。

了解 kSar 图像和 sar 数据

我强烈建议你去阅读 sarsadf 命令的 man 页面:

$ man sar
$ man sadf

案例学习:识别 Linux 服务器的 CPU 瓶颈

使用 sar 命令和 kSar 工具,可以得到内存、CPU、以及其它子系统的详细快照。例如,如果 CPU 使用率在一个很长的时间内持续高于 80%,有可能就是出现了一个 CPU 瓶颈。使用 sar -x ALL 你可以找到大量消耗 CPU 的进程。

mpstat 命令 的输出(sysstat 包的一部分)也会帮你去了解 CPU 的使用率。但你可以使用 kSar 很容易地去分析这些信息。

找出 CPU 瓶颈后 …

对 CPU 执行如下的调整:

  1. 确保没有不需要的进程在后台运行。关闭 Linux 上所有不需要的服务
  2. 使用 cron 在一个非高峰时刻运行任务(比如,备份)。
  3. 使用 top 和 ps 命令 去找出所有非关键的后台作业/服务。使用 renice 命令 去调整低优先级作业。
  4. 使用 taskset 命令去设置进程使用的 CPU (卸载所使用的 CPU),即,绑定进程到不同的 CPU 上。例如,在 2# CPU 上运行 MySQL 数据库,而在 3# CPU 上运行 Apache。
  5. 确保你的系统使用了最新的驱动程序和固件。
  6. 如有可能在系统上增加额外的 CPU。
  7. 为单线程应用程序使用更快的 CPU(比如,Lighttpd web 服务器应用程序)。
  8. 为多线程应用程序使用多个 CPU(比如,MySQL 数据库服务器应用程序)。
  9. 为一个 web 应用程序使用多个计算节点并设置一个 负载均衡器

isag —— 交互式系统活动记录器(替代工具)

isag 命令图形化显示了以前运行 sar 命令时存储在二进制文件中的系统活动数据。isag 命令引用 sar 并提取出它的数据来绘制图形。与 kSar 相比,isag 的选项比较少。

 title=

关于作者

本文作者是 nixCraft 的创始人和一位经验丰富的 Linux 操作系统/Unix shell 脚本培训师。他与包括 IT、教育、国防和空间研究、以及非营利组织等全球各行业客户一起合作。可以在 TwitterFacebookGoogle+ 上关注他。


via: https://www.cyberciti.biz/tips/identifying-linux-bottlenecks-sar-graphs-with-ksar.html

作者:Vivek Gite 译者:qhwdw 校对:wxy

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

OpenSSH 是 SSH 协议的一个实现。一般通过 scpsftp 用于远程登录、备份、远程文件传输等功能。SSH能够完美保障两个网络或系统间数据传输的保密性和完整性。尽管如此,它最大的优势是使用公匙加密来进行服务器验证。时不时会出现关于 OpenSSH 零日漏洞的传言。本文将描述如何设置你的 Linux 或类 Unix 系统以提高 sshd 的安全性。

OpenSSH 默认设置

  • TCP 端口 - 22
  • OpenSSH 服务配置文件 - sshd_config (位于 /etc/ssh/

1、 基于公匙的登录

OpenSSH 服务支持各种验证方式。推荐使用公匙加密验证。首先,使用以下 ssh-keygen 命令在本地电脑上创建密匙对:

1024 位或低于它的 DSA 和 RSA 加密是很弱的,请不要使用。当考虑 ssh 客户端向后兼容性的时候,请使用 RSA密匙代替 ECDSA 密匙。所有的 ssh 密钥要么使用 ED25519 ,要么使用 RSA,不要使用其它类型。
$ ssh-keygen -t key_type -b bits -C "comment"

示例:

$ ssh-keygen -t ed25519 -C "Login to production cluster at xyz corp"
或
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_aws_$(date +%Y-%m-%d) -C "AWS key for abc corp clients"

下一步,使用 ssh-copy-id 命令安装公匙:

$ ssh-copy-id -i /path/to/public-key-file user@host
或
$ ssh-copy-id user@remote-server-ip-or-dns-name

示例:

$ ssh-copy-id vivek@rhel7-aws-server

提示输入用户名和密码的时候,确认基于 ssh 公匙的登录是否工作:

$ ssh vivek@rhel7-aws-server

OpenSSH 服务安全最佳实践

更多有关 ssh 公匙的信息,参照以下文章:

2、 禁用 root 用户登录

禁用 root 用户登录前,确认普通用户可以以 root 身份登录。例如,允许用户 vivek 使用 sudo 命令以 root 身份登录。

在 Debian/Ubuntu 系统中如何将用户 vivek 添加到 sudo 组中

允许 sudo 组中的用户执行任何命令。 将用户 vivek 添加到 sudo 组中

$ sudo adduser vivek sudo

使用 id 命令 验证用户组。

$ id vivek

在 CentOS/RHEL 系统中如何将用户 vivek 添加到 sudo 组中

在 CentOS/RHEL 和 Fedora 系统中允许 wheel 组中的用户执行所有的命令。使用 usermod 命令将用户 vivek 添加到 wheel 组中:

$ sudo usermod -aG wheel vivek
$ id vivek

测试 sudo 权限并禁用 ssh root 登录

测试并确保用户 vivek 可以以 root 身份登录执行以下命令:

$ sudo -i
$ sudo /etc/init.d/sshd status
$ sudo systemctl status httpd

添加以下内容到 sshd_config 文件中来禁用 root 登录:

PermitRootLogin no
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no

更多信息参见“如何通过禁用 Linux 的 ssh 密码登录来增强系统安全” 。

3、 禁用密码登录

所有的密码登录都应该禁用,仅留下公匙登录。添加以下内容到 sshd_config 文件中:

AuthenticationMethods publickey
PubkeyAuthentication yes

CentOS 6.x/RHEL 6.x 系统中老版本的 sshd 用户可以使用以下设置:

PubkeyAuthentication yes

4、 限制用户的 ssh 访问

默认状态下,所有的系统用户都可以使用密码或公匙登录。但是有些时候需要为 FTP 或者 email 服务创建 UNIX/Linux 用户。然而,这些用户也可以使用 ssh 登录系统。他们将获得访问系统工具的完整权限,包括编译器和诸如 Perl、Python(可以打开网络端口干很多疯狂的事情)等的脚本语言。通过添加以下内容到 sshd_config 文件中来仅允许用户 root、vivek 和 jerry 通过 SSH 登录系统:

AllowUsers vivek jerry

当然,你也可以添加以下内容到 sshd_config 文件中来达到仅拒绝一部分用户通过 SSH 登录系统的效果。

DenyUsers root saroj anjali foo

你也可以通过配置 Linux PAM 来禁用或允许用户通过 sshd 登录。也可以允许或禁止一个用户组列表通过 ssh 登录系统。

5、 禁用空密码

你需要明确禁止空密码账户远程登录系统,更新 sshd_config 文件的以下内容:

PermitEmptyPasswords no

6、 为 ssh 用户或者密匙使用强密码

为密匙使用强密码和短语的重要性再怎么强调都不过分。暴力破解可以起作用就是因为用户使用了基于字典的密码。你可以强制用户避开字典密码并使用约翰的开膛手工具来检测弱密码。以下是一个随机密码生成器(放到你的 ~/.bashrc 下):

genpasswd() {
    local l=$1
    [ "$l" == "" ] && l=20
    tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs
}

运行:

genpasswd 16

输出:

uw8CnDVMwC6vOKgW

7、 为 SSH 的 22端口配置防火墙

你需要更新 iptables/ufw/firewall-cmd 或 pf 防火墙配置来为 ssh 的 TCP 端口 22 配置防火墙。一般来说,OpenSSH 服务应该仅允许本地或者其他的远端地址访问。

Netfilter(Iptables) 配置

更新 /etc/sysconfig/iptables (Redhat 和其派生系统特有文件) 实现仅接受来自于 192.168.1.0/24 和 202.54.1.5/29 的连接,输入:

-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -s 202.54.1.5/29 -m state --state NEW -p tcp --dport 22 -j ACCEPT

如果同时使用 IPv6 的话,可以编辑 /etc/sysconfig/ip6tables (Redhat 和其派生系统特有文件),输入:

-A RH-Firewall-1-INPUT -s ipv6network::/ipv6mask -m tcp -p tcp --dport 22 -j ACCEPT

ipv6network::/ipv6mask 替换为实际的 IPv6 网段。

Debian/Ubuntu Linux 下的 UFW

UFW 是 Uncomplicated FireWall 的首字母缩写,主要用来管理 Linux 防火墙,目的是提供一种用户友好的界面。输入以下命令使得系统仅允许网段 202.54.1.5/29 接入端口 22

$ sudo ufw allow from 202.54.1.5/29 to any port 22

更多信息请参见 “Linux:菜鸟管理员的 25 个 Iptables Netfilter 命令”。

*BSD PF 防火墙配置

如果使用 PF 防火墙 /etc/pf.conf 配置如下:

pass in on $ext_if inet proto tcp from {192.168.1.0/24, 202.54.1.5/29} to $ssh_server_ip port ssh flags S/SA synproxy state

8、 修改 SSH 端口和绑定 IP

ssh 默认监听系统中所有可用的网卡。修改并绑定 ssh 端口有助于避免暴力脚本的连接(许多暴力脚本只尝试端口 22)。更新文件 sshd_config 的以下内容来绑定端口 300 到 IP 192.168.1.5 和 202.54.1.5:

Port 300 
ListenAddress 192.168.1.5
ListenAddress 202.54.1.5

当需要接受动态广域网地址的连接时,使用主动脚本是个不错的选择,比如 fail2ban 或 denyhosts。

9、 使用 TCP wrappers (可选的)

TCP wrapper 是一个基于主机的访问控制系统,用来过滤来自互联网的网络访问。OpenSSH 支持 TCP wrappers。只需要更新文件 /etc/hosts.allow 中的以下内容就可以使得 SSH 只接受来自于 192.168.1.2 和 172.16.23.12 的连接:

sshd : 192.168.1.2 172.16.23.12

在 Linux/Mac OS X 和类 UNIX 系统中参见 TCP wrappers 设置和使用的常见问题

10、 阻止 SSH 破解或暴力攻击

暴力破解是一种在单一或者分布式网络中使用大量(用户名和密码的)组合来尝试连接一个加密系统的方法。可以使用以下软件来应对暴力攻击:

  • DenyHosts 是一个基于 Python SSH 安全工具。该工具通过监控授权日志中的非法登录日志并封禁原始 IP 的方式来应对暴力攻击。

    • RHEL / Fedora 和 CentOS Linux 下如何设置 DenyHosts
  • Fail2ban 是另一个类似的用来预防针对 SSH 攻击的工具。
  • sshguard 是一个使用 pf 来预防针对 SSH 和其他服务攻击的工具。
  • security/sshblock 阻止滥用 SSH 尝试登录。
  • IPQ BDB filter 可以看做是 fail2ban 的一个简化版。

11、 限制 TCP 端口 22 的传入速率(可选的)

netfilter 和 pf 都提供速率限制选项可以对端口 22 的传入速率进行简单的限制。

Iptables 示例

以下脚本将会阻止 60 秒内尝试登录 5 次以上的客户端的连入。

#!/bin/bash
inet_if=eth1
ssh_port=22
$IPT -I INPUT -p tcp --dport ${ssh_port} -i ${inet_if} -m state --state NEW -m recent --set
$IPT -I INPUT -p tcp --dport ${ssh_port} -i ${inet_if} -m state --state NEW -m recent --update --seconds 60 --hitcount 5

在你的 iptables 脚本中调用以上脚本。其他配置选项:

$IPT -A INPUT -i ${inet_if} -p tcp --dport ${ssh_port} -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
$IPT -A INPUT -i ${inet_if} -p tcp --dport ${ssh_port} -m state --state ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -o ${inet_if} -p tcp --sport ${ssh_port} -m state --state ESTABLISHED -j ACCEPT
# another one line example
# $IPT -A INPUT -i ${inet_if} -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 22 -m limit --limit 5/minute --limit-burst 5-j ACCEPT

其他细节参见 iptables 用户手册。

*BSD PF 示例

以下脚本将限制每个客户端的连入数量为 20,并且 5 秒内的连接不超过 15 个。如果客户端触发此规则,则将其加入 abusive\_ips 表并限制该客户端连入。最后 flush 关键词杀死所有触发规则的客户端的连接。

sshd_server_ip = "202.54.1.5" 
table <abusive_ips> persist
block in quick from <abusive_ips>
pass in on $ext_if proto tcp to $sshd_server_ip port ssh flags S/SA keep state (max-src-conn 20, max-src-conn-rate 15/5, overload <abusive_ips> flush) 

12、 使用端口敲门(可选的)

端口敲门是通过在一组预先指定的封闭端口上生成连接尝试,以便从外部打开防火墙上的端口的方法。一旦指定的端口连接顺序被触发,防火墙规则就被动态修改以允许发送连接的主机连入指定的端口。以下是一个使用 iptables 实现的端口敲门的示例:

$IPT -N stage1
$IPT -A stage1 -m recent --remove --name knock
$IPT -A stage1 -p tcp --dport 3456 -m recent --set --name knock2

$IPT -N stage2
$IPT -A stage2 -m recent --remove --name knock2
$IPT -A stage2 -p tcp --dport 2345 -m recent --set --name heaven

$IPT -N door
$IPT -A door -m recent --rcheck --seconds 5 --name knock2 -j stage2
$IPT -A door -m recent --rcheck --seconds 5 --name knock -j stage1
$IPT -A door -p tcp --dport 1234 -m recent --set --name knock

$IPT -A INPUT -m --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p tcp --dport 22 -m recent --rcheck --seconds 5 --name heaven -j ACCEPT
$IPT -A INPUT -p tcp --syn -j door

更多信息请参见:

Debian / Ubuntu: 使用 Knockd and Iptables 设置端口敲门

13、 配置空闲超时注销时长

用户可以通过 ssh 连入服务器,可以配置一个超时时间间隔来避免无人值守的 ssh 会话。 打开 sshd_config 并确保配置以下值:

ClientAliveInterval 300
ClientAliveCountMax 0

以秒为单位设置一个空闲超时时间(300秒 = 5分钟)。一旦空闲时间超过这个值,空闲用户就会被踢出会话。更多细节参见如何自动注销空闲超时的 BASH / TCSH / SSH 用户

14、 为 ssh 用户启用警示标语

更新 sshd_config 文件如下行来设置用户的警示标语:

Banner /etc/issue

`/etc/issue 示例文件:

----------------------------------------------------------------------------------------------
You are accessing a XYZ Government (XYZG) Information System (IS) that is provided for authorized use only.
By using this IS (which includes any device attached to this IS), you consent to the following conditions:

+ The XYZG routinely intercepts and monitors communications on this IS for purposes including, but not limited to,
penetration testing, COMSEC monitoring, network operations and defense, personnel misconduct (PM),
law enforcement (LE), and counterintelligence (CI) investigations.

+ At any time, the XYZG may inspect and seize data stored on this IS.

+ Communications using, or data stored on, this IS are not private, are subject to routine monitoring,
interception, and search, and may be disclosed or used for any XYZG authorized purpose.

+ This IS includes security measures (e.g., authentication and access controls) to protect XYZG interests--not
for your personal benefit or privacy.

+ Notwithstanding the above, using this IS does not constitute consent to PM, LE or CI investigative searching
or monitoring of the content of privileged communications, or work product, related to personal representation
or services by attorneys, psychotherapists, or clergy, and their assistants. Such communications and work
product are private and confidential. See User Agreement for details.
----------------------------------------------------------------------------------------------

以上是一个标准的示例,更多的用户协议和法律细节请咨询你的律师团队。

15、 禁用 .rhosts 文件(需核实)

禁止读取用户的 ~/.rhosts~/.shosts 文件。更新 sshd_config 文件中的以下内容:

IgnoreRhosts yes

SSH 可以模拟过时的 rsh 命令,所以应该禁用不安全的 RSH 连接。

16、 禁用基于主机的授权(需核实)

禁用基于主机的授权,更新 sshd_config 文件的以下选项:

HostbasedAuthentication no

17、 为 OpenSSH 和操作系统打补丁

推荐你使用类似 yumapt-getfreebsd-update 等工具保持系统安装了最新的安全补丁。

18、 Chroot OpenSSH (将用户锁定在主目录)

默认设置下用户可以浏览诸如 /etc/bin 等目录。可以使用 chroot 或者其他专有工具如 rssh 来保护 ssh 连接。从版本 4.8p1 或 4.9p1 起,OpenSSH 不再需要依赖诸如 rssh 或复杂的 chroot(1) 等第三方工具来将用户锁定在主目录中。可以使用新的 ChrootDirectory 指令将用户锁定在其主目录,参见这篇博文

19. 禁用客户端的 OpenSSH 服务

工作站和笔记本不需要 OpenSSH 服务。如果不需要提供 ssh 远程登录和文件传输功能的话,可以禁用 sshd 服务。CentOS / RHEL 用户可以使用 yum 命令 禁用或删除 openssh-server:

$ sudo yum erase openssh-server

Debian / Ubuntu 用户可以使用 apt 命令/apt-get 命令 删除 openssh-server:

$ sudo apt-get remove openssh-server

有可能需要更新 iptables 脚本来移除 ssh 的例外规则。CentOS / RHEL / Fedora 系统可以编辑文件 /etc/sysconfig/iptables/etc/sysconfig/ip6tables。最后重启 iptables 服务:

# service iptables restart
# service ip6tables restart

20. 来自 Mozilla 的额外提示

如果使用 6.7+ 版本的 OpenSSH,可以尝试下以下设置

#################[ WARNING ]########################
# Do not use any setting blindly. Read sshd_config #
# man page. You must understand cryptography to    #
# tweak following settings. Otherwise use defaults #
####################################################

# Supported HostKey algorithms by order of preference.
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

# Specifies the available KEX (Key Exchange) algorithms.
KexAlgorithms [email protected],ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256

# Specifies the ciphers allowed
Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr

#Specifies the available MAC (message authentication code) algorithms
MACs [email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,[email protected]

# LogLevel VERBOSE logs user's key fingerprint on login. Needed to have a clear audit track of which key was using to log in.
LogLevel VERBOSE

# Log sftp level file access (read/write/etc.) that would not be easily logged otherwise.
Subsystem sftp /usr/lib/ssh/sftp-server -f AUTHPRIV -l INFO

使用以下命令获取 OpenSSH 支持的加密方法:

$ ssh -Q cipher
$ ssh -Q cipher-auth
$ ssh -Q mac
$ ssh -Q kex
$ ssh -Q key

OpenSSH安全教程查询密码和算法选择

如何测试 sshd\_config 文件并重启/重新加载 SSH 服务?

在重启 sshd 前检查配置文件的有效性和密匙的完整性,运行:

$ sudo sshd -t

扩展测试模式:

$ sudo sshd -T

最后,根据系统的的版本重启 Linux 或类 Unix 系统中的 sshd 服务

$ [sudo systemctl start ssh][38] ## Debian/Ubunt Linux##
$ [sudo systemctl restart sshd.service][39] ## CentOS/RHEL/Fedora Linux##
$ doas /etc/rc.d/sshd restart ## OpenBSD##
$ sudo service sshd restart ## FreeBSD## 

其他建议

  1. 使用 2FA 加强 SSH 的安全性 - 可以使用 OATH ToolkitDuoSecurity 启用多重身份验证。
  2. 基于密匙链的身份验证 - 密匙链是一个 bash 脚本,可以使得基于密匙的验证非常的灵活方便。相对于无密码密匙,它提供更好的安全性。

更多信息

  • OpenSSH 官方 项目。
  • 用户手册: sshd(8)、ssh(1)、ssh-add(1)、ssh-agent(1)。

如果知道这里没用提及的方便的软件或者技术,请在下面的评论中分享,以帮助读者保持 OpenSSH 的安全。

关于作者

作者是 nixCraft 的创始人,一个经验丰富的系统管理员和 Linux/Unix 脚本培训师。他曾与全球客户合作,领域涉及 IT,教育,国防和空间研究以及非营利部门等多个行业。请在 TwitterFacebookGoogle+ 上关注他。


via: https://www.cyberciti.biz/tips/linux-unix-bsd-openssh-server-best-practices.html

作者:Vivek Gite 译者:shipsw 校对:wxy

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

我是一位新的 Vim 编辑器用户。我通常使用 :vs ~/.vimrc 来加载 ~/.vimrc 配置。而当编辑 .vimrc 时,我需要不重启 Vim 会话而重新加载它。在 Linux 或者类 Unix 系统中,如何在编辑 .vimrc 后,重新加载它而不用重启 Vim 呢?

Vim 是自由开源并且向上兼容 Vi 的编辑器。它可以用来编辑各种文本。它在编辑用 C/Perl/Python 编写的程序时特别有用。可以用它来编辑 Linux/Unix 配置文件。~/.vimrc 是你个人的 Vim 初始化和自定义文件。

如何在不重启 Vim 会话的情况下重新加载 .vimrc

在 Vim 中重新加载 .vimrc 而不重新启动的流程:

  1. 输入 vim filename 启动 vim
  2. 按下 Esc 接着输入 :vs ~/.vimrc 来加载 vim 配置
  3. 像这样添加自定义配置:
filetype indent plugin on
set number
syntax on
  1. 使用 :wq 保存文件,并从 ~/.vimrc 窗口退出
  2. 输入下面任一命令重载 ~/.vimrc:so $MYVIMRC 或者 :source ~/.vimrc

How to reload .vimrc file without restarting vim

图1:编辑 ~/.vimrc 并在需要时重载它而不用退出 vim,这样你就可以继续编辑程序了

:so[urce]! {file} 这个 vim 命令会从给定的文件比如 ~/.vimrc 读取配置。就像你输入的一样,这些命令是在普通模式下执行的。当你在 :global、:argdo:windo:bufdo 之后、循环中或者跟着另一个命令时,显示不会再在执行命令时更新。

如何设置按键来编辑并重载 ~/.vimrc

在你的 ~/.vimrc 后面跟上这些:

" Edit vimr configuration file
nnoremap confe :e $MYVIMRC<CR>
" Reload vims configuration file
nnoremap confr :source $MYVIMRC<CR>

现在只要按下 Esc 接着输入 confe 就可以编辑 ~/.vimrc。按下 Esc ,接着输入 confr 以重新加载。一些人喜欢在 .vimrc 中使用 <Leader> 键。因此上面的映射变成:

" Edit vimr configuration file
nnoremap <Leader>ve :e $MYVIMRC<CR>
" Reload vimr configuration file
nnoremap <Leader>vr :source $MYVIMRC<CR>

<Leader> 键默认映射成 \ 键。因此只要输入 \ 接着 ve 就能编辑文件。按下 \ 接着 vr 就能重载 ~/vimrc

这就完成了,你可以不用再重启 Vim 就能重新加载 .vimrc 了。

关于作者

作者是 nixCraft 的创建者,经验丰富的系统管理员,也是 Linux / Unix shell 脚本的培训师。他曾与全球客户以及IT、教育、国防和太空研究以及非营利部门等多个行业合作。在 Twitter、Facebook、Google + 上关注他。通过RSS/XML 订阅获取最新的系统管理、Linux/Unix 以及开源主题教程。


via: https://www.cyberciti.biz/faq/how-to-reload-vimrc-file-without-restarting-vim-on-linux-unix/

作者:Vivek Gite 译者:geekpi 校对:wxy

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

lftp 是一个文件传输程序。它可以用于复杂的 FTP、 HTTP/HTTPS 和其他连接。如果指定了站点 URL,那么 lftp 将连接到该站点,否则会使用 open 命令建立连接。它是所有 Linux/Unix 命令行用户的必备工具。我目前写了一些关于 Linux 下超快命令行下载加速器,比如 Axel 和 prozilla。lftp 是另一个能做相同的事,但有更多功能的工具。lftp 可以处理几种文件访问方式:

  1. ftp
  2. ftps
  3. http
  4. https
  5. hftp
  6. fish
  7. sftp
  8. file

那么 lftp 的独特之处是什么?

  • lftp 中的每个操作都是可靠的,即任何非致命错误都被忽略,并且重复进行操作。所以如果下载中断,它会自动重新启动。即使 FTP 服务器不支持 REST 命令,lftp 也会尝试从开头检索文件,直到文件传输完成。
  • lftp 具有类似 shell 的命令语法,允许你在后台并行启动多个命令。
  • lftp 有一个内置的镜像功能,可以下载或更新整个目录树。还有一个反向镜像功能(mirror -R),它可以上传或更新服务器上的目录树。镜像也可以在两个远程服务器之间同步目录,如果可用的话会使用 FXP。

如何使用 lftp 作为下载加速器

lftppget 命令。它能让你并行下载。语法是:

lftp -e 'pget -n NUM -c url; exit'

例如,使用 pget 分 5个部分下载 http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.2.tar.bz2

$ cd /tmp 
$ lftp -e 'pget -n 5 -c http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.2.tar.bz2'

示例输出:

45108964 bytes transferred in 57 seconds (775.3K/s)
lftp :~>quit

这里:

  1. pget - 并行下载文件
  2. -n 5 - 将最大连接数设置为 5
  3. -c - 如果当前目录存在 lfile.lftp-pget-status,则继续中断的传输

如何在 Linux/Unix 中使用 lftp 来加速 ftp/https下载

再尝试添加 exit 命令:

$ lftp -e 'pget -n 10 -c https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.15.tar.xz; exit'

关于并行下载的说明

请注意,通过使用下载加速器,你将增加远程服务器负载。另请注意,lftp 可能无法在不支持多点下载的站点上工作,或者防火墙阻止了此类请求。

其它的命令提供了更多功能。有关更多信息,请参考 lftp 的 man 页面:

man lftp

关于作者

作者是 nixCraft 的创建者,经验丰富的系统管理员,也是 Linux 操作系统/Unix shell 脚本的培训师。他曾与全球客户以及IT、教育、国防和太空研究以及非营利部门等多个行业合作。在 Twitter、Facebook、Google + 上关注他。通过 RSS/XML 订阅获取最新的系统管理、Linux/Unix 以及开源主题教程。


via: https://www.cyberciti.biz/tips/linux-unix-download-accelerator.html

作者:Vivek Gite 译者:geekpi 校对:wxy

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

您需要监控 Linux 服务器的性能吗?试试用这些内置命令和附加工具吧!大多数 Linux 发行版都附带了大量的监控工具。这些工具提供了获取系统活动的相关指标。您可以使用这些工具来查找性能问题的可能原因。本文提到的是一些基本的命令,用于系统分析和服务器调试等,例如:

  1. 找出系统瓶颈
  2. 磁盘(存储)瓶颈
  3. CPU 和内存瓶颈
  4. 网络瓶颈

1. top - 进程活动监控命令

top 命令会显示 Linux 的进程。它提供了一个运行中系统的实时动态视图,即实际的进程活动。默认情况下,它显示在服务器上运行的 CPU 占用率最高的任务,并且每五秒更新一次。

图 01:Linux top 命令

top 的常用快捷键

常用快捷键列表:

快捷键用法
t是否显示汇总信息
m是否显示内存信息
A根据各种系统资源的利用率对进程进行排序,有助于快速识别系统中性能不佳的任务。
f进入 top 的交互式配置屏幕,用于根据特定的需求而设置 top 的显示。
o交互式地调整 top 每一列的顺序。
r调整优先级(renice
k杀掉进程(kill
z切换彩色或黑白模式

相关链接:Linux 如何查看 CPU 利用率?

2. vmstat - 虚拟内存统计

vmstat 命令报告有关进程、内存、分页、块 IO、中断和 CPU 活动等信息。

# vmstat 3

输出示例:

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r b swpd free buff cache si so bi bo in cs us sy id wa st
 0 0 0 2540988 522188 5130400 0 0 2 32 4 2 4 1 96 0 0
 1 0 0 2540988 522188 5130400 0 0 0 720 1199 665 1 0 99 0 0
 0 0 0 2540956 522188 5130400 0 0 0 0 1151 1569 4 1 95 0 0
 0 0 0 2540956 522188 5130500 0 0 0 6 1117 439 1 0 99 0 0
 0 0 0 2540940 522188 5130512 0 0 0 536 1189 932 1 0 98 0 0
 0 0 0 2538444 522188 5130588 0 0 0 0 1187 1417 4 1 96 0 0
 0 0 0 2490060 522188 5130640 0 0 0 18 1253 1123 5 1 94 0 0

显示 Slab 缓存的利用率

# vmstat -m

获取有关活动和非活动内存页面的信息

# vmstat -a

相关链接:如何查看 Linux 的资源利用率从而找到系统瓶颈?

3. w - 找出登录的用户以及他们在做什么

w 命令 显示了当前登录在该系统上的用户及其进程。

# w username
# w vivek

输出示例:

 17:58:47 up 5 days, 20:28, 2 users, load average: 0.36, 0.26, 0.24
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.1.3.145 14:55 5.00s 0.04s 0.02s vim /etc/resolv.conf
root pts/1 10.1.3.145 17:43 0.00s 0.03s 0.00s w

4. uptime - Linux 系统运行了多久

uptime 命令可以用来查看服务器运行了多长时间:当前时间、已运行的时间、当前登录的用户连接数,以及过去 1 分钟、5 分钟和 15 分钟的系统负载平均值。

# uptime

输出示例:

 18:02:41 up 41 days, 23:42, 1 user, load average: 0.00, 0.00, 0.00

1 可以被认为是最佳负载值。不同的系统会有不同的负载:对于单核 CPU 系统来说,13 的负载值是可以接受的;而对于 SMP(对称多处理)系统来说,负载可以是 610

5. ps - 显示系统进程

ps 命令显示当前运行的进程。要显示所有的进程,请使用 -A-e 选项:

# ps -A

输出示例:

 PID TTY TIME CMD
 1 ? 00:00:02 init
 2 ? 00:00:02 migration/0
 3 ? 00:00:01 ksoftirqd/0
 4 ? 00:00:00 watchdog/0
 5 ? 00:00:00 migration/1
 6 ? 00:00:15 ksoftirqd/1
....
.....
 4881 ? 00:53:28 java
 4885 tty1 00:00:00 mingetty
 4886 tty2 00:00:00 mingetty
 4887 tty3 00:00:00 mingetty
 4888 tty4 00:00:00 mingetty
 4891 tty5 00:00:00 mingetty
 4892 tty6 00:00:00 mingetty
 4893 ttyS1 00:00:00 agetty
12853 ? 00:00:00 cifsoplockd
12854 ? 00:00:00 cifsdnotifyd
14231 ? 00:10:34 lighttpd
14232 ? 00:00:00 php-cgi
54981 pts/0 00:00:00 vim
55465 ? 00:00:00 php-cgi
55546 ? 00:00:00 bind9-snmp-stat
55704 pts/1 00:00:00 ps

pstop 类似,但它提供了更多的信息。

显示长输出格式

# ps -Al

显示完整输出格式(它将显示传递给进程的命令行参数):

# ps -AlF

显示线程(轻量级进程(LWP)和线程的数量(NLWP))

# ps -AlFH

在进程后显示线程

# ps -AlLm

显示系统上所有的进程

# ps ax
# ps axu

显示进程树

# ps -ejH
# ps axjf
# pstree

显示进程的安全信息

# ps -eo euser,ruser,suser,fuser,f,comm,label
# ps axZ
# ps -eM

显示指定用户(如 vivek)运行的进程

# ps -U vivek -u vivek u

设置用户自定义的输出格式

# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
# ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
# ps -eopid,tt,user,fname,tmout,f,wchan

显示某进程(如 lighttpd)的 PID

# ps -C lighttpd -o pid=

# pgrep lighttpd

# pgrep -u vivek php-cgi

显示指定 PID(如 55977)的进程名称

# ps -p 55977 -o comm=

找出占用内存资源最多的前 10 个进程

# ps -auxf | sort -nr -k 4 | head -10

找出占用 CPU 资源最多的前 10 个进程

# ps -auxf | sort -nr -k 3 | head -10

相关链接:显示 Linux 上所有运行的进程

6. free - 内存使用情况

free 命令显示了系统的可用和已用的物理内存及交换内存的总量,以及内核用到的缓存空间。

# free

输出示例:

 total used free shared buffers cached
Mem: 12302896 9739664 2563232 0 523124 5154740
-/+ buffers/cache: 4061800 8241096
Swap: 1052248 0 1052248

相关链接: 1. 获取 Linux 的虚拟内存的内存页大小(PAGESIZE) 2. 限制 Linux 每个进程的 CPU 使用率 3. 我的 Ubuntu 或 Fedora Linux 系统有多少内存?

7. iostat - CPU 平均负载和磁盘活动

iostat 命令用于汇报 CPU 的使用情况,以及设备、分区和网络文件系统(NFS)的 IO 统计信息。

# iostat

输出示例:

Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in)   06/26/2009

avg-cpu: %user %nice %system %iowait %steal %idle
 3.50 0.09 0.51 0.03 0.00 95.86

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 22.04 31.88 512.03 16193351 260102868
sda1 0.00 0.00 0.00 2166 180
sda2 22.04 31.87 512.03 16189010 260102688
sda3 0.00 0.00 0.00 1615 0

相关链接:如何跟踪 Linux 系统的 NFS 目录或磁盘的 IO 负载情况

8. sar - 监控、收集和汇报系统活动

sar 命令用于收集、汇报和保存系统活动信息。要查看网络统计,请输入:

# sar -n DEV | more

显示 24 日的网络统计:

# sar -n DEV -f /var/log/sa/sa24 | more

您还可以使用 sar 显示实时使用情况:

# sar 4 5

输出示例:

Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in)       06/26/2009

06:45:12 PM CPU %user %nice %system %iowait %steal %idle
06:45:16 PM all 2.00 0.00 0.22 0.00 0.00 97.78
06:45:20 PM all 2.07 0.00 0.38 0.03 0.00 97.52
06:45:24 PM all 0.94 0.00 0.28 0.00 0.00 98.78
06:45:28 PM all 1.56 0.00 0.22 0.00 0.00 98.22
06:45:32 PM all 3.53 0.00 0.25 0.03 0.00 96.19
Average: all 2.02 0.00 0.27 0.01 0.00 97.70

相关链接:

9. mpstat - 监控多处理器的使用情况

mpstat 命令显示每个可用处理器的使用情况,编号从 0 开始。命令 mpstat -P ALL 显示了每个处理器的平均使用率:

# mpstat -P ALL

输出示例:

Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in)       06/26/2009

06:48:11 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
06:48:11 PM all 3.50 0.09 0.34 0.03 0.01 0.17 0.00 95.86 1218.04
06:48:11 PM 0 3.44 0.08 0.31 0.02 0.00 0.12 0.00 96.04 1000.31
06:48:11 PM 1 3.10 0.08 0.32 0.09 0.02 0.11 0.00 96.28 34.93
06:48:11 PM 2 4.16 0.11 0.36 0.02 0.00 0.11 0.00 95.25 0.00
06:48:11 PM 3 3.77 0.11 0.38 0.03 0.01 0.24 0.00 95.46 44.80
06:48:11 PM 4 2.96 0.07 0.29 0.04 0.02 0.10 0.00 96.52 25.91
06:48:11 PM 5 3.26 0.08 0.28 0.03 0.01 0.10 0.00 96.23 14.98
06:48:11 PM 6 4.00 0.10 0.34 0.01 0.00 0.13 0.00 95.42 3.75
06:48:11 PM 7 3.30 0.11 0.39 0.03 0.01 0.46 0.00 95.69 76.89

相关链接:多处理器的 Linux 上单独显示每个 CPU 的使用率.

10. pmap - 监控进程的内存使用情况

pmap 命令用以显示进程的内存映射,使用此命令可以查找内存瓶颈。

# pmap -d PID

显示 PID 为 47394 的进程的内存信息,请输入:

# pmap -d 47394

输出示例:

47394: /usr/bin/php-cgi
Address Kbytes Mode Offset Device Mapping
0000000000400000 2584 r-x-- 0000000000000000 008:00002 php-cgi
0000000000886000 140 rw--- 0000000000286000 008:00002 php-cgi
00000000008a9000 52 rw--- 00000000008a9000 000:00000 [ anon ]
0000000000aa8000 76 rw--- 00000000002a8000 008:00002 php-cgi
000000000f678000 1980 rw--- 000000000f678000 000:00000 [ anon ]
000000314a600000 112 r-x-- 0000000000000000 008:00002 ld-2.5.so
000000314a81b000 4 r---- 000000000001b000 008:00002 ld-2.5.so
000000314a81c000 4 rw--- 000000000001c000 008:00002 ld-2.5.so
000000314aa00000 1328 r-x-- 0000000000000000 008:00002 libc-2.5.so
000000314ab4c000 2048 ----- 000000000014c000 008:00002 libc-2.5.so
.....
......
..
00002af8d48fd000 4 rw--- 0000000000006000 008:00002 xsl.so
00002af8d490c000 40 r-x-- 0000000000000000 008:00002 libnss_files-2.5.so
00002af8d4916000 2044 ----- 000000000000a000 008:00002 libnss_files-2.5.so
00002af8d4b15000 4 r---- 0000000000009000 008:00002 libnss_files-2.5.so
00002af8d4b16000 4 rw--- 000000000000a000 008:00002 libnss_files-2.5.so
00002af8d4b17000 768000 rw-s- 0000000000000000 000:00009 zero (deleted)
00007fffc95fe000 84 rw--- 00007ffffffea000 000:00000 [ stack ]
ffffffffff600000 8192 ----- 0000000000000000 000:00000 [ anon ]
mapped: 933712K writeable/private: 4304K shared: 768000K

最后一行非常重要:

  • mapped: 933712K 映射到文件的内存量
  • writeable/private: 4304K 私有地址空间
  • shared: 768000K 此进程与其他进程共享的地址空间

相关链接:使用 pmap 命令查看 Linux 上单个程序或进程使用的内存

11. netstat - Linux 网络统计监控工具

netstat 命令显示网络连接、路由表、接口统计、伪装连接和多播连接等信息。

# netstat -tulpn
# netstat -nat

12. ss - 网络统计

ss 命令用于获取套接字统计信息。它可以显示类似于 netstat 的信息。不过 netstat 几乎要过时了,ss 命令更具优势。要显示所有 TCP 或 UDP 套接字:

# ss -t -a

# ss -u -a

显示所有带有 SELinux 安全上下文 Security Context 的 TCP 套接字:

# ss -t -a -Z

请参阅以下关于 ssnetstat 命令的资料:

13. iptraf - 获取实时网络统计信息

iptraf 命令是一个基于 ncurses 的交互式 IP 网络监控工具。它可以生成多种网络统计信息,包括 TCP 信息、UDP 计数、ICMP 和 OSPF 信息、以太网负载信息、节点统计信息、IP 校验错误等。它以简单的格式提供了以下信息:

  • 基于 TCP 连接的网络流量统计
  • 基于网络接口的 IP 流量统计
  • 基于协议的网络流量统计
  • 基于 TCP/UDP 端口和数据包大小的网络流量统计
  • 基于二层地址的网络流量统计

 title=

图 02:常规接口统计:基于网络接口的 IP 流量统计

 title=

图 03:基于 TCP 连接的网络流量统计

相关链接:在 Centos / RHEL / Fedora Linux 上安装 IPTraf 以获取网络统计信息

14. tcpdump - 详细的网络流量分析

tcpdump 命令是简单的分析网络通信的命令。您需要充分了解 TCP/IP 协议才便于使用此工具。例如,要显示有关 DNS 的流量信息,请输入:

# tcpdump -i eth1 'udp port 53'

查看所有去往和来自端口 80 的 IPv4 HTTP 数据包,仅打印真正包含数据的包,而不是像 SYN、FIN 和仅含 ACK 这类的数据包,请输入:

# tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

显示所有目标地址为 202.54.1.5 的 FTP 会话,请输入:

# tcpdump -i eth1 'dst 202.54.1.5 and (port 21 or 20'

打印所有目标地址为 192.168.1.5 的 HTTP 会话:

# tcpdump -ni eth0 'dst 192.168.1.5 and tcp and port http'

使用 wireshark 查看文件的详细内容,请输入:

# tcpdump -n -i eth1 -s 0 -w output.txt src or dst port 80

15. iotop - I/O 监控

iotop 命令利用 Linux 内核监控 I/O 使用情况,它按进程或线程的顺序显示 I/O 使用情况。

$ sudo iotop

输出示例:

iotop monitoring linux disk read write IO

相关链接:Linux iotop:什么进程在增加硬盘负载

16. htop - 交互式的进程查看器

htop 是一款免费并开源的基于 ncurses 的 Linux 进程查看器。它比 top 命令更简单易用。您无需使用 PID、无需离开 htop 界面,便可以杀掉进程或调整其调度优先级。

$ htop

输出示例:

htop process viewer for Linux

相关链接:CentOS / RHEL:安装 htop——交互式文本模式进程查看器

17. atop - 高级版系统与进程监控工具

atop 是一个非常强大的交互式 Linux 系统负载监控器,它从性能的角度显示最关键的硬件资源信息。您可以快速查看 CPU、内存、磁盘和网络性能。它还可以从进程的级别显示哪些进程造成了相关 CPU 和内存的负载。

$ atop

atop Command Line Tools to Monitor Linux Performance

相关链接:CentOS / RHEL:安装 atop 工具——高级系统和进程监控器

18. ac 和 lastcomm

您一定需要监控 Linux 服务器上的进程和登录活动吧。psacctacct 软件包中包含了多个用于监控进程活动的工具,包括:

  1. ac 命令:显示有关用户连接时间的统计信息
  2. lastcomm 命令:显示已执行过的命令
  3. accton 命令:打开或关闭进程账号记录功能
  4. sa 命令:进程账号记录信息的摘要

相关链接:如何对 Linux 系统的活动做详细的跟踪记录

19. monit - 进程监控器

monit 是一个免费且开源的进程监控软件,它可以自动重启停掉的服务。您也可以使用 Systemd、daemontools 或其他类似工具来达到同样的目的。本教程演示如何在 Debian 或 Ubuntu Linux 上安装和配置 monit 作为进程监控器

20. NetHogs - 找出占用带宽的进程

NetHogs 是一个轻便的网络监控工具,它按照进程名称(如 Firefox、wget 等)对带宽进行分组。如果网络流量突然爆发,启动 NetHogs,您将看到哪个进程(PID)导致了带宽激增。

$ sudo nethogs

nethogs linux monitoring tools open source

相关链接:Linux:使用 Nethogs 工具查看每个进程的带宽使用情况

21. iftop - 显示主机上网络接口的带宽使用情况

iftop 命令监听指定接口(如 eth0)上的网络通信情况。它显示了一对主机的带宽使用情况

$ sudo iftop

iftop in action

22. vnstat - 基于控制台的网络流量监控工具

vnstat 是一个简单易用的基于控制台的网络流量监视器,它为指定网络接口保留每小时、每天和每月网络流量日志。

$ vnstat

vnstat linux network traffic monitor

相关链接:

23. nmon - Linux 系统管理员的调优和基准测量工具

nmon 是 Linux 系统管理员用于性能调优的利器,它在命令行显示 CPU、内存、网络、磁盘、文件系统、NFS、消耗资源最多的进程和分区信息。

$ nmon

nmon command

相关链接:安装并使用 nmon 工具来监控 Linux 系统的性能

24. glances - 密切关注 Linux 系统

glances 是一款开源的跨平台监控工具。它在小小的屏幕上提供了大量的信息,还可以工作于客户端-服务器模式下。

$ glances

Glances

相关链接:Linux:通过 Glances 监控器密切关注您的系统

25. strace - 查看系统调用

想要跟踪 Linux 系统的调用和信号吗?试试 strace 命令吧。它对于调试网页服务器和其他服务器问题很有用。了解如何利用其 追踪进程 并查看它在做什么。

26. /proc 文件系统 - 各种内核信息

/proc 文件系统提供了不同硬件设备和 Linux 内核的详细信息。更多详细信息,请参阅 Linux 内核 /proc 文档。常见的 /proc 例子:

# cat /proc/cpuinfo
# cat /proc/meminfo
# cat /proc/zoneinfo
# cat /proc/mounts

27. Nagios - Linux 服务器和网络监控

Nagios 是一款普遍使用的开源系统和网络监控软件。您可以轻松地监控所有主机、网络设备和服务,当状态异常和恢复正常时它都会发出警报通知。FAN 是“全自动 Nagios”的缩写。FAN 的目标是提供包含由 Nagios 社区提供的大多数工具包的 Nagios 安装。FAN 提供了标准 ISO 格式的 CD-Rom 镜像,使安装变得更加容易。除此之外,为了改善 Nagios 的用户体验,发行版还包含了大量的工具。

28. Cacti - 基于 Web 的 Linux 监控工具

Cacti 是一个完整的网络图形化解决方案,旨在充分利用 RRDTool 的数据存储和图形功能。Cacti 提供了快速轮询器、高级图形模板、多种数据采集方法和用户管理功能。这些功能被包装在一个直观易用的界面中,确保可以实现从局域网到拥有数百台设备的复杂网络上的安装。它可以提供有关网络、CPU、内存、登录用户、Apache、DNS 服务器等的数据。了解如何在 CentOS / RHEL 下 安装和配置 Cacti 网络图形化工具

29. KDE 系统监控器 - 实时系统报告和图形化显示

KSysguard 是 KDE 桌面的网络化系统监控程序。这个工具可以通过 ssh 会话运行。它提供了许多功能,比如可以监控本地和远程主机的客户端-服务器模式。前端图形界面使用传感器来检索信息。传感器可以返回简单的值或更复杂的信息,如表格。每种类型的信息都有一个或多个显示界面,并被组织成工作表的形式,这些工作表可以分别保存和加载。所以,KSysguard 不仅是一个简单的任务管理器,还是一个控制大型服务器平台的强大工具。

 title=

图 05:KDE System Guard {图片来源:维基百科}

详细用法,请参阅 KSysguard 手册

30. GNOME 系统监控器

系统监控程序能够显示系统基本信息,并监控系统进程、系统资源使用情况和文件系统。您还可以用其修改系统行为。虽然不如 KDE System Guard 强大,但它提供的基本信息对新用户还是有用的:

  • 显示关于计算机硬件和软件的各种基本信息
  • Linux 内核版本
  • GNOME 版本
  • 硬件
  • 安装的内存
  • 处理器和速度
  • 系统状况
  • 可用磁盘空间
  • 进程
  • 内存和交换空间
  • 网络使用情况
  • 文件系统
  • 列出所有挂载的文件系统及其基本信息

 title=

图 06:Gnome 系统监控程序

福利:其他工具

更多工具:

  • nmap - 扫描服务器的开放端口
  • lsof - 列出打开的文件和网络连接等
  • ntop 基于网页的工具 - ntop 是查看网络使用情况的最佳工具,与 top 命令之于进程的方式类似,即网络流量监控工具。您可以查看网络状态和 UDP、TCP、DNS、HTTP 等协议的流量分发。
  • Conky - X Window 系统下的另一个很好的监控工具。它具有很高的可配置性,能够监视许多系统变量,包括 CPU 状态、内存、交换空间、磁盘存储、温度、进程、网络接口、电池、系统消息和电子邮件等。
  • GKrellM - 它可以用来监控 CPU 状态、主内存、硬盘、网络接口、本地和远程邮箱及其他信息。
  • mtr - mtrtracerouteping 程序的功能结合在一个网络诊断工具中。
  • vtop - 图形化活动监控终端

如果您有其他推荐的系统监控工具,欢迎在评论区分享。

关于作者

作者 Vivek Gite 是 nixCraft 的创建者,也是经验丰富的系统管理员,以及 Linux 操作系统和 Unix shell 脚本的培训师。他的客户遍布全球,行业涉及 IT、教育、国防航天研究以及非营利部门等。您可以在 TwitterFacebookGoogle+ 上关注他。


via: https://www.cyberciti.biz/tips/top-linux-monitoring-tools.html

作者:Vivek Gite 译者:jessie-pang 校对:wxy

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

我想使用 Ansible 工具创建 Amazon EC2 密钥对。不想使用 AWS CLI 来创建。可以使用 Ansible 来创建 AWS ec2 密钥吗?

你需要使用 Ansible 的 ec2\_key 模块。这个模块依赖于 python-boto 2.5 版本或者更高版本。 boto 是亚马逊 Web 服务的一个 Python API。你可以将 boto 用于 Amazon S3、Amazon EC2 等其他服务。简而言之,你需要安装 Ansible 和 boto 模块。我们一起来看下如何安装 boto 并结合 Ansible 使用。

第一步 - 在 Ubuntu 上安装最新版本的 Ansible

你必须给你的系统配置 PPA 来安装最新版的 Ansible。为了管理你从各种 PPA(Personal Package Archives)安装软件的仓库,你可以上传 Ubuntu 源码包并编译,然后通过 Launchpad 以 apt 仓库的形式发布。键入如下命令 apt-get 命令或者 apt 命令

$ sudo apt update 
$ sudo apt upgrade 
$ sudo apt install software-properties-common

接下来给你的系统的软件源中添加 ppa:ansible/ansible

$ sudo apt-add-repository ppa:ansible/ansible

更新你的仓库并安装 Ansible:

$ sudo apt update 
$ sudo apt install ansible

安装 boto:

$ pip3 install boto3

关于在CentOS/RHEL 7.x上安装 Ansible 的注意事项

需要在 CentOS 和 RHEL 7.x 上配置 EPEL 源yum命令

$ cd /tmp 
$ wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 
$ ls *.rpm 
$ sudo yum install epel-release-latest-7.noarch.rpm 
$ sudo yum install ansible

安装 boto:

$ pip install boto3

第二步 2 – 配置 boto

你需要配置 AWS credentials/API 密钥。参考 “AWS Security Credentials” 文档如何创建 API key。用 mkdir 命令创建一个名为 ~/.aws 的目录,然后配置 API key:

$ mkdir -pv ~/.aws/ 
$ vi ~/.aws/credentials
[default]
aws_access_key_id = YOUR-ACCESS-KEY-HERE
aws_secret_access_key = YOUR-SECRET-ACCESS-KEY-HERE

还需要配置默认 AWS 区域

$ vi ~/.aws/config

输出样例如下:

[default]
region = us-west-1

通过创建一个简单的名为 test-boto.py 的 Python 程序来测试你的 boto 配置是否正确:

#!/usr/bin/python3
# A simple program to test boto and print s3 bucket names
import boto3
t = boto3.resource('s3')
for b in t.buckets.all():
 print(b.name)

按下面方式来运行该程序:

$ python3 test-boto.py

输出样例:

nixcraft-images
nixcraft-backups-cbz
nixcraft-backups-forum

上面输出可以确定 Python-boto 可以使用 AWS API 正常工作。

步骤 3 - 使用 Ansible 创建 AWS ec2 密钥

创建一个名为 ec2.key.yml 的剧本,如下所示:

---
- hosts: local
  connection: local
  gather_facts: no
  tasks:
 
 - name: Create a new EC2 key
   ec2_key:
   name: nixcraft-key
   region: us-west-1
   register: ec2_key_result
 
 - name: Save private key
   copy: content="{{ ec2_key_result.key.private_key }}" dest="./aws.nixcraft.pem" mode=0600
   when: ec2_key_result.changed

其中,

  • ec2_key: – ec2 密钥对。
  • name: nixcraft_key – 密钥对的名称。
  • region: us-west-1 – 使用的 AWS 区域。
  • register: ec2_key_result – 保存生成的密钥到 ec2keyresult 变量。
  • copy: content="{{ ec2_key_result.key.private_key }}" dest="./aws.nixcraft.pem" mode=0600 – 将 ec2_key_result.key.private_key 的内容保存到当前目录的一个名为 aws.nixcraft.pem 的文件中。设置该文件的权限为 0600 (unix 文件权限)。
  • when: ec2_key_result.changed – 仅仅在 ec2_key_result 改变时才保存。我们不想覆盖你的密钥文件。

你还必须创建如下 hosts 文件:

[local]
localhost

如下运行你的剧本:

$ ansible-playbook -i hosts ec2.key.yml

最后你应该有一个名为 `aws.nixcraft.pem 私钥,该私钥可以和 AWS EC2 一起使用。使用 cat 命令查看你的密钥:

$ cat aws.nixcraft.pem

如果你有 EC2 虚拟机,请按如下方式使用:

$ ssh -i aws.nixcraft.pem user@ec2-vm-dns-name

查看有关 python 数据结构变量名的信息,比如 ec2keyresult.changed 和 ec2keyresult.key.private\_key

你一定在想我是如何使用变量名的,比如 ec2_key_result.changedec2_key_result.key.private_key。它们在哪里定义过吗?变量的值是通过 API 调用返回的。简单地使用 -v 选项运行 ansible-playbook 命令来查看这样的信息:

$ ansible-playbook -v -i hosts ec2.key.yml

我该如何删除一个密钥?

使用如下 ec2-key-delete.yml

---
- hosts: local
  connection: local
  gather_facts: no
  tasks:
 
 - name: Delete a EC2 key
   ec2_key:
   name: nixcraft-key
   region: us-west-1
# absent means delete keypair
   state: absent

按照如下方式运行:

$ ansible-playbook -i hosts ec2-key-delete.yml

关于作者

作者是 nixCraft 的创始人,是一个经验丰富的系统管理员,DevOps 工程师,同时是一个 Linux 操作系统/Unix shell 脚本培训师。通过 RSS/XML 提要每周邮件简讯获得关于系统管理,Linux/Unix和开放源码主题的最新教程。


via: https://www.cyberciti.biz/faq/how-to-create-aws-ec2-key-using-ansible/

作者:Vivek Gite 译者:qianghaohao 校对:wxy

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