在linux入门指南

在linux中传输文件文件夹的10个scp命令

scp 命令的基本语法

下面的命令将读作 copy source_file_name进入destination_folderdestination_host使用username account

> scp source_file_name username@destination_host:destination_folder

里面有很多参数scp你可以使用的命令。以下是可能在日常使用中使用的参数。

使用-v参数提供 scp 进程的详细信息

基础的scp不带参数的命令将在后台复制文件。除非该过程完成或出现某些错误,否则用户将看不到任何内容。

你可以使用 -v 参数将调试信息打印到屏幕中。它可以帮助你调试连接、身份验证和配置问题。

rumenz@local $ scp -v Label.pdf rumenz@192.168.1.110:.
输出

复制文件时 scp 显示进度

Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -t .
OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
debug1: Connection established.
debug1: Host '202.x.x.x' is known and matches the RSA host key.
debug1: Found key in /home/pungki/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Next authentication method: password
rumenz@202.x.x.x's password:
debug1: Authentication succeeded (password).
Authenticated to 202.x.x.x ([202.x.x.x]:22).
Sending file modes: C0770 3760348 Label.pdf
Sink: C0770 3760348 Label.pdf
Label.pdf 100% 3672KB 136.0KB/s 00:27
Transferred: sent 3766304, received 3000 bytes, in 65.2 seconds
Bytes per second: sent 57766.4, received 46.0
debug1: Exit status 0

提供原始文件的修改时间、访问时间和模式

-p 参数将帮助你解决这个问题。估计时间和连接速度将出现在屏幕上。

rumenz@local $ scp -p Label.pdf rumenz@192.168.1.110:.
输出

scp 估计复制大文件所需的时间

> rumenz@202.x.x.x's password:
Label.pdf 100% 3672KB 126.6KB/s 00:29

使用 -C 参数加快文件传输速度

可以加快文件传输速度的参数之一是 -C 范围。这 -C 参数将随时随地压缩你的文件,独特的是压缩只发生在网络中。当文件到达目标服务器时,它将恢复到压缩前的原始大小。

> rumenz@local $ scp -pv messages.log rumenz@192.168.1.110:.
输出

scp 在不压缩的情况下传输文件

Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t .
OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
debug1: Connection established.
debug1: identity file /home/pungki/.ssh/id_rsa type -1
debug1: Found key in /home/pungki/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Trying private key: /home/pungki/.ssh/id_rsa
debug1: Next authentication method: password
rumenz@202.x.x.x's password:
debug1: Authentication succeeded (password).
Authenticated to 202.x.x.x ([202.x.x.x]:22).
debug1: Sending command: scp -v -p -t .
File mtime 1323853868 atime 1380425711
Sending file timestamps: T1323853868 0 1380425711 0
messages.log 100% 93MB 58.6KB/s 27:05
Transferred: sent 97614832, received 25976 bytes, in 1661.3 seconds
Bytes per second: sent 58758.4, received 15.6
debug1: Exit status 0

-C 允许压缩

rumenz@local $ scp -Cpv messages.log rumenz@192.168.1.110:.
输出

scp 使用压缩更快地传输文件

Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t .
OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
debug1: Connection established.
debug1: identity file /home/pungki/.ssh/id_rsa type -1
debug1: Host '202.x.x.x' is known and matches the RSA host key.
debug1: Found key in /home/pungki/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Next authentication method: publickey
debug1: Trying private key: /home/pungki/.ssh/id_rsa
debug1: Next authentication method: password
rumenz@202.x.x.x's password:
debug1: Enabling compression at level 6.
debug1: Authentication succeeded (password).
Authenticated to 202.x.x.x ([202.x.x.x]:22).
debug1: channel 0: new [client-session]
debug1: Sending command: scp -v -p -t .
File mtime 1323853868 atime 1380428748
Sending file timestamps: T1323853868 0 1380428748 0
Sink: T1323853868 0 1380428748 0
Sending file modes: C0600 97517300 messages.log
messages.log 100% 93MB 602.7KB/s 02:38
Transferred: sent 8905840, received 15768 bytes, in 162.5 seconds
Bytes per second: sent 54813.9, received 97.0
debug1: Exit status 0
debug1: compress outgoing: raw data 97571111, compressed 8806191, factor 0.09
debug1: compress incoming: raw data 7885, compressed 3821, factor 0.48

如果你要通过网络复制大量文件,-C 参数将帮助你减少所需的总时间。

压缩方法不适用于所有文件。当源文件已经被压缩时,就没有什么效果了。文件如.zip,.rar,pictures, 和.iso

更改 scp 密码以加密文件

默认情况下scp使用 AES-128 来加密文件。如果你想更改为其他密码对其进行加密,你可以使用 -c 范围。看看这个命令。

rumenz@local $ scp -c 3des Label.pdf rumenz@192.168.1.110:.

rumenz@202.x.x.x's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13

上面的命令告诉scp使用3des algorithm来加密文件。请注意此参数使用 -c不是-C

使用 scp 命令限制带宽使用

另一个可能有用的参数是 -l 范围。这 -l 参数将限制使用的带宽制 。如果你执行自动化脚本来复制大量文件,这将很有用

rumenz@local $ scp -l 400 Label.pdf rumenz@192.168.1.110:.

rumenz@202.x.x.x's password:
Label.pdf 100% 3672KB 50.3KB/s 01:13

scp 默认带宽的单位是Kilobyte/sec(KB/s)。所以如果你想限制你的带宽scp最多只有50 KB/s,你需要将其设置为50 x 8=400.

指定要与 scp 一起使用的特定端口

scp正在使用端口22作为默认端口。但出于安全原因,你可以将端口更改为另一个端口. 例如,我们使用端口2249.

rumenz@local $ scp -P 2249 Label.pdf rumenz@192.168.1.110:.

rumenz@202.x.x.x's password:
Label.pdf 100% 3672KB 262.3KB/s 00:14

递归复制目录中的文件

有时我们需要复制目录和其中的所有文件,目录

rumenz@local $ scp -r documents rumenz@192.168.1.110:.

rumenz@202.x.x.x's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13
scp.txt 100% 10KB 9.8KB/s 00:00

复> 制过程完成后,你将在目标服务器上找到一个名为documents及其所有文件。文件夹documents是自动创建的。

禁用进度表和警告 / 诊断消息

rumenz@local $ scp -q Label.pdf rumenz@192.168.1.110:.

rumenz@202.x.x.x's password:
rumenz@local $

可以看到,输入密码后,没有关于 scp 进程的信息。该过程完成后,你将再次看到提示。

通过代理使用 scp 复制文件

代理服务器通常用于办公环境。scp 本身没有配置代理。当你的环境使用代理时,你必须告诉scp 与代理进行通信。

例如代理地址是10.0.96.6代理端口是8080.代理还实现了用户身份验证。首先,你需要创建 ~/.ssh/config文件

ProxyCommand /usr/bin/corkscrew 10.0.96.6 8080 %h %p ~/.ssh/proxyauth

然后你需要创建文件 ~/.ssh/proxyauth 里面输入。

myusername:mypassword

前提是需要安装corkscrew

$ apt-get install corkscrew

Centos系统可以用yum安装corkscrew

# yum install corkscrew

由于 ~/.ssh/proxyauth 文件包含你的 usernamepassword 以明文格式,请确保该文件只能自己访问。

选择不同的ssh_config 文件

对于经常在公司网络和公共网络之间切换的移动用户来说,总是在scp中更改设置会很痛苦。

场景示例

代理在公司网络中使用,但不在公共网络中使用,并且你定期切换网络。

rumenz@local $ scp -F /home/pungki/proxy_ssh_config Label.pdf

rumenz@192.168.1.110:.
rumenz@202.x.x.x's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13

默认情况下 ssh_config 每个用户的文件将被放置在 ~/.ssh/config。创建一个特定的 ssh_config 具有代理兼容性的文件将更容易在网络之间切换。

当你在公司网络,你可以使用 -F 范围。当你在公共网络上时,你可以不用-F参数。

linux网络管理的20个netstat命令

netstat (network statistics) 是一个命令行工具,用于监视传入和传出的网络连接以及查看路由表、接口统计信息等。

netstat可在所有类Unix操作系统上使用,也可在Windows OS以及。它在网络故障排除和性能测量方面非常有用。netstat是最基本的网络服务调试工具之一,告诉你哪些端口是开放的,是否有程序在监听端口。

常见参数

-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服务状态

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

1. 列出所有TCP和UDP连接的监听端口

使用以下命令列出所有端口(TCP 和 UDP)netstat

# netstat -a | more

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 *:sunrpc                    *:*                         LISTEN
tcp        0     52 192.168.0.2:ssh             192.168.0.1:egs             ESTABLISHED
tcp        1      0 192.168.0.2:59292           www.gov.com:http            CLOSE_WAIT
tcp        0      0 localhost:smtp              *:*                         LISTEN
tcp        0      0 *:59482                     *:*                         LISTEN
udp        0      0 *:35036                     *:*
udp        0      0 *:npmp-local                *:*

Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     16972  /tmp/orbit-root/linc-76b-0-6fa08790553d6
unix  2      [ ACC ]     STREAM     LISTENING     17149  /tmp/orbit-root/linc-794-0-7058d584166d2
unix  2      [ ACC ]     STREAM     LISTENING     17161  /tmp/orbit-root/linc-792-0-546fe905321cc
unix  2      [ ACC ]     STREAM     LISTENING     15938  /tmp/orbit-root/linc-74b-0-415135cb6aeab

2. 列出TCP端口连接

TCP(Transmission Control Protocol) 端口连接使用netstat -at.

# netstat -at

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 *:ssh                       *:*                         LISTEN
tcp        0      0 localhost:ipp               *:*                         LISTEN
tcp        0      0 localhost:smtp              *:*                         LISTEN
tcp        0     52 192.168.0.2:ssh             192.168.0.1:egs             ESTABLISHED
tcp        1      0 192.168.0.2:59292           www.gov.com:http            CLOSE_WAIT

3. 列出UDP端口连接

UDP(User Datagram Protocol) 端口连接使用netstat -au.

# netstat -au

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
udp        0      0 *:35036                     *:*
udp        0      0 *:npmp-local                *:*
udp        0      0 *:mdns                      *:*

4. 列出所有LISTENING连接

列出所有活动的监听端口连接netstat -l.

# netstat -l

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 *:sunrpc                    *:*                         LISTEN
tcp        0      0 *:58642                     *:*                         LISTEN
tcp        0      0 *:ssh                       *:*                         LISTEN
udp        0      0 *:35036                     *:*
udp        0      0 *:npmp-local                *:*

Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     16972  /tmp/orbit-root/linc-76b-0-6fa08790553d6
unix  2      [ ACC ]     STREAM     LISTENING     17149  /tmp/orbit-root/linc-794-0-7058d584166d2
unix  2      [ ACC ]     STREAM     LISTENING     17161  /tmp/orbit-root/linc-792-0-546fe905321cc
unix  2      [ ACC ]     STREAM     LISTENING     15938  /tmp/orbit-root/linc-74b-0-415135cb6aeab

5. 列出所有TCP监听端口

使用选项列出所有活动的监听 TCP 端口netstat -lt.

# netstat -lt

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 *:dctp                      *:*                         LISTEN
tcp        0      0 *:mysql                     *:*                         LISTEN
tcp        0      0 *:sunrpc                    *:*                         LISTEN
tcp        0      0 *:munin                     *:*                         LISTEN
tcp        0      0 *:ftp                       *:*                         LISTEN
tcp        0      0 localhost.localdomain:ipp   *:*                         LISTEN
tcp        0      0 localhost.localdomain:smtp  *:*                         LISTEN
tcp        0      0 *:http                      *:*                         LISTEN
tcp        0      0 *:ssh                       *:*                         LISTEN
tcp        0      0 *:https                     *:*                         LISTEN

6. 列出所有UDP监听端口

使用选项列出所有活动的监听UDP端口netstat -lu.

# netstat -lu

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
udp        0      0 *:39578                     *:*
udp        0      0 *:meregister                *:*
udp        0      0 *:vpps-qua                  *:*
udp        0      0 *:openvpn                   *:*
udp        0      0 *:mdns                      *:*
udp        0      0 *:sunrpc                    *:*
udp        0      0 *:ipp                       *:*
udp        0      0 *:60222                     *:*
udp        0      0 *:mdns                      *:*

7. 列出所有UNIX监听端口

使用列出所有活动的UNIX监听端口netstat -lx.

# netstat -lx

Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     4171   @ISCSIADM_ABSTRACT_NAMESPACE
unix  2      [ ACC ]     STREAM     LISTENING     5767   /var/run/cups/cups.sock
unix  2      [ ACC ]     STREAM     LISTENING     7082   @/tmp/fam-root-
unix  2      [ ACC ]     STREAM     LISTENING     6157   /dev/gpmctl
unix  2      [ ACC ]     STREAM     LISTENING     6215   @/var/run/hald/dbus-IcefTIUkHm
unix  2      [ ACC ]     STREAM     LISTENING     6038   /tmp/.font-unix/fs7100
unix  2      [ ACC ]     STREAM     LISTENING     6175   /var/run/avahi-daemon/socket
unix  2      [ ACC ]     STREAM     LISTENING     4157   @ISCSID_UIP_ABSTRACT_NAMESPACE
unix  2      [ ACC ]     STREAM     LISTENING     60835836 /var/lib/mysql/mysql.sock
unix  2      [ ACC ]     STREAM     LISTENING     4645   /var/run/audispd_events
unix  2      [ ACC ]     STREAM     LISTENING     5136   /var/run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     6216   @/var/run/hald/dbus-wsUBI30V2I
unix  2      [ ACC ]     STREAM     LISTENING     5517   /var/run/acpid.socket
unix  2      [ ACC ]     STREAM     LISTENING     5531   /var/run/pcscd.comm

8. 按协议显示统计数据

按协议显示统计信息。默认情况下,会显示 TCP、UDP、ICMP 和 IP 协议的统计信息。-s 参数可用于指定一组协议。

# netstat -s

Ip:
2461 total packets received
0 forwarded
0 incoming packets discarded
2431 incoming packets delivered
2049 requests sent out
Icmp:
0 ICMP messages received
0 input ICMP message failed.
ICMP input histogram:
1 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
    destination unreachable: 1
Tcp:
159 active connections openings
1 passive connection openings
4 failed connection attempts
0 connection resets received
1 connections established
2191 segments received
1745 segments send out
24 segments retransmited
0 bad segments received.
4 resets sent
Udp:
243 packets received
1 packets to unknown port received.
0 packet receive errors
281 packets sent

9. 按TCP协议显示统计信息

使用选项仅显示TCP协议的统计信息netstat -st.

# netstat -st

Tcp:
2805201 active connections openings
1597466 passive connection openings
1522484 failed connection attempts
37806 connection resets received
1 connections established
57718706 segments received
64280042 segments send out
3135688 segments retransmited
74 bad segments received.
17580 resets sent

10. UDP统计

# netstat -su

Udp:
1774823 packets received
901848 packets to unknown port received.
0 packet receive errors
2968722 packets sent

11. 用PID显示服务名称

使用选项显示服务名称及其PID编号netstat -tp将显示PID/程序名称

# netstat -tp

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 192.168.0.2:ssh             192.168.0.1:egs             ESTABLISHED 2179/sshd
tcp        1      0 192.168.0.2:59292           www.gov.com:http            CLOSE_WAIT  1939/clock-applet

12. 显示混杂模式

使用-ac开关显示混杂模式,netstat每五秒打印一次选定的信息或刷新屏幕。默认屏幕每秒刷新一次。

# netstat -ac 5 | grep tcp

tcp        0      0 *:sunrpc                    *:*                         LISTEN
tcp        0      0 *:58642                     *:*                         LISTEN
tcp        0      0 *:ssh                       *:*                         LISTEN
tcp        0      0 localhost:ipp               *:*                         LISTEN
tcp        0      0 localhost:smtp              *:*                         LISTEN
tcp        1      0 192.168.0.2:59447           www.gov.com:http            CLOSE_WAIT
tcp        0     52 192.168.0.2:ssh             192.168.0.1:egs             ESTABLISHED
tcp        0      0 *:sunrpc                    *:*                         LISTEN
tcp        0      0 *:ssh                       *:*                         LISTEN
tcp        0      0 localhost:ipp               *:*                         LISTEN
tcp        0      0 localhost:smtp              *:*                         LISTEN
tcp        0      0 *:59482                     *:*                         LISTEN

13. 显示内核 IP 路由

使用netstatroute命令显示内核 IP 路由表。

# netstat -r

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.0.0     *               255.255.255.0   U         0 0          0 eth0
link-local      *               255.255.0.0     U         0 0          0 eth0
default         192.168.0.1     0.0.0.0         UG        0 0          0 eth0

14. 显示网络接口事务

显示网络接口数据包事务,包括传输和接收具有 MTU 大小的数据包。

# netstat -i

Kernel Interface table
Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500   0     4459      0      0      0     4057      0      0      0 BMRU
lo        16436   0        8      0      0      0        8      0      0      0 LRU

15. 显示内核接口表

显示内核接口表,类似于ifconfig命令。

# netstat -ie

Kernel Interface table
br-e059a2d63b1e: flags=4355<UP,BROADCAST,PROMISC,MULTICAST>  mtu 1500
        inet 172.18.1.1  netmask 255.255.0.0  broadcast 172.18.255.255
        inet6 fe80::42:81ff:fece:ec18  prefixlen 64  scopeid 0x20<link>
        ether 02:42:81:ce:ec:18  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

br-f99ee05905fa: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.18.1.1  netmask 255.255.0.0  broadcast 172.18.255.255
        inet6 fe80::42:85ff:feef:8f9c  prefixlen 64  scopeid 0x20<link>
        ether 02:42:85:ef:8f:9c  txqueuelen 0  (Ethernet)
        RX packets 99361793  bytes 36125845748 (33.6 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 99361793  bytes 36125845748 (33.6 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1450
        inet 192.168.0.3  netmask 255.255.240.0  broadcast 192.168.15.255
        inet6 fe80::d662:97b7:3976:db84  prefixlen 64  scopeid 0x20<link>
        ether fa:16:3e:7c:d0:42  txqueuelen 1000  (Ethernet)
        RX packets 11653213466  bytes 5112384579320 (4.6 TiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11634733071  bytes 4992127805775 (4.5 TiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 99361793  bytes 36125845748 (33.6 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 99361793  bytes 36125845748 (33.6 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

16. 显示IPv4和IPv6信息

显示IPv4和IPv6的多播组成员信息。

# netstat -g

IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      224.0.0.1
eth0            1      224.0.0.1
br-e059a2d63b1e 1      224.0.0.1
br-f99ee05905fa 1      224.0.0.1
lo              1      ff02::1
lo              1      ff01::1
eth0            1      ff02::1:ff76:db84
eth0            1      ff02::1
eth0            1      ff01::1
docker0         1      ff02::1
docker0         1      ff01::1
br-e059a2d63b1e 1      ff02::1:ffce:ec18
br-e059a2d63b1e 1      ff02::1
br-e059a2d63b1e 1      ff01::1
br-f99ee05905fa 1      ff02::1:ffef:8f9c
br-f99ee05905fa 1      ff02::1
br-f99ee05905fa 1      ff01::1

17. 连续打印netstat信息

要每隔几秒获取一次netstat信息,然后使用以下命令,它将连续打印netstat信息,例如每隔几秒。

# netstat -c

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 JD:6379                 114.67.65.213:60534     ESTABLISHED
tcp        0     64 JD:ssh                  27.17.211.71:5996       ESTABLISHED
tcp        0      0 JD:13980                218.207.144.248:39538   ESTABLISHED

18. 寻找不支持的地址

使用一些有用的信息查找未配置的地址族。

# netstat --verbose

netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.
netstat: no support for `AF X25' on this system.
netstat: no support for `AF NETROM' on this system.

19. 找出程序运行的端口

找出在一个端口上运行的监听程序。

# netstat -ap | grep http

tcp        0      0 JD.com:radan-http       0.0.0.0:*               LISTEN      3144/influxd        
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN      13360/nginx: master 
tcp        0      0 JD:49236                100.67.239.135:http     ESTABLISHED -   

20. 显示RAW网络统计信息

# netstat --statistics --raw

Ip:
    12027754111 total packets received
    4073035 forwarded
    0 incoming packets discarded
    12008317607 incoming packets delivered
    11036880089 requests sent out
    2957857 outgoing packets dropped
    1 dropped because of missing route
    18474 fragments dropped after timeout
    29861895 reassemblies required
    14899673 packets reassembled ok
    18498 packet reassembles failed
    725852528 fragments received ok
    414 fragments failed
    1451705056 fragments created
Icmp:
    81169352 ICMP messages received
    5022325 input ICMP message failed.
    InCsumErrors: 23
    ICMP input histogram:
        destination unreachable: 55591037
        timeout in transit: 5402249
        wrong parameters: 199
        source quenches: 42
        redirects: 38799
        echo requests: 14289982
        echo replies: 251764
        timestamp request: 93
    117932136 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
        destination unreachable: 49879683
        time exceeded: 4979
        echo request: 174053
        echo replies: 14289982
        timestamp replies: 93
IcmpMsg:
        InType0: 251764
        InType3: 55591037
        InType4: 42
        InType5: 38799
        InType8: 14289982
        InType11: 5402249
        InType12: 199
        InType13: 93
        InType15: 5595164
        OutType0: 14289982
        OutType3: 49879683
        OutType8: 174053
        OutType11: 4979
        OutType14: 93
        OutType69: 53583346
UdpLite:
IpExt:
    InNoRoutes: 27
    OutMcastPkts: 15
    InBcastPkts: 279100451
    OutBcastPkts: 279100451
    InOctets: 5026681712589
    OutOctets: 4855303523603
    OutMcastOctets: 1170
    InBcastOctets: 44368686653
    OutBcastOctets: 44368686653
    InNoECTPkts: 12028075355
    InECT0Pkts: 22692

使用Rsync同步备份两个web服务器文件

同步Web服务器的优势

使用rsync创建Web服务器备份的主要优点如下:

  1. Rsync仅同步那些已更改的字节和数据块。
  2. Rsync能够检查和删除备份服务器上已从主Web服务器中删除的那些文件和目录。
  3. 它在远程复制数据时处理权限、所有权和特殊属性。
  4. 它还支持SSH协议以加密方式传输数据,让你放心所有数据都是安全的。
  5. Rsync在传输数据时使用压缩和解压缩方法,消耗更少的带宽。

如何同步两个Web服务器

设置rsync以创建Web服务器的镜像。我将使用两台服务器。

主服务器
  1. IP Address: 192.168.1.111
  2. Hostname: webserver.rumenz.com
备份服务器
  1. IP Address: 192.168.1.112
  2. Hostname:backup.rumenz.com

第 1 步:安装Rsync工具

[root@rumenz]# yum install rsync        [On Red Hat based systems]
[root@rumenz]# apt-get install rsync    [On Debian based systems]

第 2 步:创建一个用户来运行Rsync

我们可以设置 rsyncroot用户,但出于安全原因,你可以在主网络服务器上创建一个非特权用户,即webserver.rumenz.com运行 rsync。

[root@rumenz]# useradd rumenz
[root@rumenz]# passwd rumenz

在这里我创建了一个用户 rumenz 并为用户分配了密码。

第 3 步:测试 Rsync 设置

测试 rsync 设置了(backup.rumenz.com) 并要执行此操作,请键入以下命令。

[root@backup www]# rsync -avzhe ssh rumenz@webserver.rumenz.com:/var/www/ /var/www
输出
rumenz@webserver.rumenz.com's password:

receiving incremental file list
sent 128 bytes  received 32.67K bytes  5.96K bytes/sec
total size is 12.78M  speedup is 389.70

你可以看到你的 rsync 现在工作正常并且正在同步数据。我用过了 /var/www 转移;你可以根据需要更改文件夹位置。

第 4 步:使用SSH无密码登录自动同步

已经完成了 rsync 设置,现在是时候设置一个cron对于 rsync。因为我们将使用rsync与SSH协议,ssh 将要求进行身份验证. 为了让cron顺利工作,我们需要设置passwordless ssh logins对于 rsync。

在这个例子中,我这样做root保存file ownerships同样,你也可以为其他用户执行此操作。

首先,我们将生成一个publicprivate在备份服务器上使用以下命令键(即backup.rumenz.com)。

[root@backup]# ssh-keygen -t rsa -b 2048

输入此命令时,请不要提供密码,然后按回车键Empty passphrase这样 rsync cron 就不需要任何密码来同步数据。

样本输出
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
9a:33:a9:5d:f4:e1:41:26:57:d0:9a:68:5b:37:9c:23 root@backup.exmple.com
The key's randomart image is:
+--[ RSA 2048]----+
|          .o.    |
|           ..    |
|        ..++ .   |
|        o=E *    |
|       .Sooo o   |
|       =.o o     |
|      * . o      |
|     o +         |
|    . .          |
+-----------------+

我们的PublicPrivate密钥已生成,我们必须与主服务器共享它,以便主 Web 服务器能够识别此备份机器,并允许它在同步数据时无需输入任何密码即可登录。

[root@backup html]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@webserver.rumenz.com

现在尝试登录服务器,使用 ssh root@webserver.rumenz.com,然后签入.ssh/authorized_keys.

[root@backup html]# root@webserver.rumenz.com

现在,我们完成了共享密钥。要更深入地了解SSH password less login

第5步:设置Cron以自动同步

我们为此设置一个 cron。要设置 cron,请使用以下命令打开 crontab 文件。

[root@backup ~]# crontab –e

它将打开 /etc/crontab 文件以使用你的默认编辑器进行编辑。在此示例中,我正在编写一个 cron,每5分钟运行一次以同步数据。

*/5  *  *  *  *   rsync -avzhe ssh root@webserver.rumenz.com:/var/www/ /var/www/

上面的 cron 和 rsync 命令只是同步 /var/www/ 从主要web serverbackup server在每一个5 minutes.你可以根据需要更改时间和文件夹位置配置。 

用lynis工具对linux系统进行安全审计

Lynis 是一个开源且功能强大的 auditing tool适用于类 Unix/Linux 操作系统。它扫描系统的安全信息、一般系统信息、已安装和可用的软件信息、配置错误、安全问题、没有密码的用户帐户、错误的文件权限、防火墙审计等。

Lynis是最值得信赖的自动化审计工具之一,用于在基于 Unix/Linux 的系统中进行软件补丁管理、恶意软件扫描和漏洞检测。这个工具很有用auditorsnetwork 和 system administratorssecurity specialists, 和 penetration testers.

Lynis 很灵活,它用于各种不同的目的,包括:

  • 安全审计
  • 合规性测试
  • 渗透测试
  • 漏洞检测
  • 系统强化

在 Linux 中安装 Lynis

安装 Lynis通过系统包管理器是开始使用 Lynis 的最简单方法之一。要在你的发行版上安装 Lynis,请按照以下说明进行操作。

在 Debian、Ubuntu 和 Mint 上安装 Lynis

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C80E383C3DE9F082E01391A0366C67DE91CA5D5F
$ sudo apt install apt-transport-https
echo "deb https://packages.cisofy.com/community/lynis/deb/ stable main" | sudo tee /etc/apt/sources.list.d/cisofy-lynis.list
$ apt update
$ apt install lynis
$ lynis show version

在 CentOS、RHEL 和 Fedora 上安装 Lynis

# yum makecache fast
# yum install lynis -y

在 openSUSE 上安装 Lynis

$ sudo rpm --import https://packages.cisofy.com/keys/cisofy-software-rpms-public.key
$ sudo zypper addrepo --gpgcheck --name "CISOfy Lynis repository" --priority 1 --refresh --type rpm-md https://packages.cisofy.com/community/lynis/rpm/ lynis
$ sudo zypper repos
$ sudo zypper refresh
$ sudo zypper install lynis

使用源码安装 Lynis

如果不想安装 Lynis,你可以下载源文件并直接从任何目录运行它。因此,为以下内容创建自定义目录是个好主意Lynis

/usr/local/lynis
# mkdir /usr/local/lynis

下载稳定版 Lynis使用wget 命令从受信任的网站获取源文件,然后使用tar 命令将其解压缩,如下所示。

# cd /usr/local/lynis
# wget https://downloads.cisofy.com/lynis/lynis-3.0.4.tar.gz

解压压缩包

# tar -xvf lynis-3.0.4.tar.gz

lynis基本使用

你必须是 root 用户运行 Lynis 因为它创建并将输出写入

/var/log/lynis.log

不带任何选项运行,它将为你提供可用参数的完整列表

# cd lynis
# ./lynis
Usage: lynis command [options]

  Command:

    audit
        audit system                  : Perform local security scan
        audit system remote <host>    : Remote security scan
        audit dockerfile <file>       : Analyze Dockerfile

    show
        show                          : Show all commands
        show version                  : Show Lynis version
        show help                     : Show help

    update
        update info                   : Show update details
 ...

使用以下命令以如下所示的参数开始扫描。

# ./lynis audit system
Or
# lynis audit system

你执行上述命令,它将开始扫描你的系统并要求你 press [Enter] to continue, or [CTRL]+C to stop)它扫描并完成的每个过程。

Lynis 颜色含义

  • 绿色:意味着一切正常或被禁用
  • 黄色:跳过,未找到,可能有建议
  • 红色:表示特定测试或扫描不安全或需要更多关注。

在内核扫描运行级别、CPU 支持、内核版本、内核类型、/etc/inittab 和加载的内核模块中。

 

 用于审计和强化 Linux 系统的 Lynis 安全工具

用户、组和身份验证扫描管理员帐户、UID、GID、/etc/passwd、sudoers 和 PAM 文件、密码、单用户模式、登录失败和 umask。

 

 用于审计和强化 Linux 系统的 Lynis 安全工具

端口和包扫描包管理器,如果找到包管理器(rpm、deb 等),它将查询已安装的包列表并检查包漏洞、包更新。最后,检查 GPG 签名以确保包安全。

 

 用于审计和强化 Linux 系统的 Lynis 安全工具

网络扫描 IPv6 是否启用、服务器配置测试、搜索可用网络接口、MAC 地址、网络 IP 地址、DHCP 状态。

 

 用于审计和强化 Linux 系统的 Lynis 安全工具

日志和文件扫描 syslog 守护进程是否正在运行及其配置文件。

 

 用于审计和强化 Linux 系统的 Lynis 安全工具

文件权限在此扫描所有类型的文件权限

 

 

创建 Lynis Cronjobs

如果你想为你的系统创建每日扫描报告,那么你需要为其设置一个 cron 作业。在 shell 中运行以下命令。

# crontab -e

添加以下带有选项的 cron 作业,

--cronjob

所有特殊字符将从输出中忽略,并且扫描将完全自动运行。

30 22 * * * root    /path/to/lynis -c -Q --auditor "automated" --cronjob

上面的示例 cron 作业将在每天晚上10:30运行

/var/log/lynis.log

Lynis 扫描结果

扫描时,你将看到输出为 [OK] 或者 [WARNING]。在哪里 [OK] 被认为是一个很好的结果和 [WARNING] 一样糟糕。但这并不意味着 [OK] 结果配置正确且 [WARNING] 不一定是坏的。在阅读日志后,你应该采取纠正措施来解决这些问题

/var/log/lynis.log

更新 Lynis

如果你想 update 或者 upgrade 当前的 lynis 版本,只需键入以下命令,它就会下载并安装最新版本的 lynis。

# ./lynis update info         
Or
# lynis update info  

Lynis 参数

一些 Lynis 参数供你参考。

  • audit system – 执行系统审核。
  • show commands – 显示可用的 Lynis 命令。
  • show help – 提供帮助屏幕。
  • show profiles – 显示发现的配置文件。
  • show settings – 列出配置文件中的所有活动设置。
  • show version – 显示当前的 Lynis 版本。

常用的选项

参数说明
--auditor 审计人员
--checkall,-c 开始审查整个系统
--check-update 检查lynis是否需要升级
--cronjob 作为定时任务启动 (includes -c -Q)
--help,-h 显示帮助
--manpage 查看手册页
--nocolors 不使用任何颜色
--pentest 执行渗透测试扫描(非特权)
--quick,-Q 除错误外,不要等待用户输入
--quiet 仅显示警告(包括 -quick,但不等待)
--reverse-colors 为浅色背景使用不同的配色方案
--version,-V 检查版本

linux中使用ACL保护文件目录

ACl (Access Control List),主要目的是提供传统的 owner、group、others 的 read、write、execute 权限之外的特殊权限需求设置。ACL 可以针对单一使用者、单一文件或目录来进行 r、w、x 的权限规范,对于需要特殊权限的使用状况非常有帮助

ACl 主要针对以下方面来控制权限:

  • 使用者 user
  • 群组 group
  • 默认属性 mask:针对在该目录下在建立新文件/目录时,规范新数据的默认权限

有一个目录,给一堆人使用,每个人或每个群组所需要的权限并不相同,使用传统 Linux 三种身份的三种权限是无法达到的,因此基本上,传统的 Linux 权限只能针对一个用户、一个群组以及非此群组的其他人设置权限。无法针对单一用户或个人来设计权限。

Note:根据 Redhat 产品文档,它为 ext3 文件系统和 NFS 导出文件系统提供 ACL 支持。

如何检查 Linux 系统中的 ACL 支持

在继续之前,你应该在当前内核和挂载的文件系统上支持 ACL。

1. 检查内核是否支持 ACL

运行以下命令检查文件系统的 ACL 支持和 POSIX_ACL=Y 选项(如果有 N 代替 Y,则表示内核不支持ACL,需要重新编译)。

[root@linux ~]# grep -i acl /boot/config*

CONFIG_`EXT4_FS_POSIX_ACL=y`
CONFIG_`REISERFS_FS_POSIX_ACL=y`
CONFIG_JFS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_GENERIC_ACL=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_CIFS_ACL=y
CONFIG_9P_FS_POSIX_ACL=y

2.检查所需的包

在开始使用 ACL 之前,请确保你已安装所需的软件包。以下是需要使用安装的必需软件包yum 或者 apt-get.

[root@linux ~]# yum install nfs4-acl-tools acl libacl  [on `RedHat` based systems]
[rumenz@linux ~]$ sudo apt-get install nfs4-acl-tools acl [on `Debian` based systems]

3. 检查挂载的文件系统是否支持 ACL

现在,检查挂载的文件系统是否使用 ACL 选项挂载。我们可以用mount 用于检查相同的命令,如下所示。

[root@linux ~]# mount  | grep -i root
/dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered)

但在我们的例子中,它默认不显示 acl。因此,接下来我们可以选择使用 acl 选项再次重新挂载已安装的分区。但是,在继续之前,我们有另一个选项来确保分区是否使用 acl 选项挂载,因为对于最近的系统,它可能与默认挂载选项集成。

[root@linux ~]# tune2fs -l /dev/mapper/fedora-root | grep acl
Default mount options:    user_xattr acl

在上面的输出中,你可以看到默认挂载选项已经支持 acl。另一种选择是重新挂载分区,如下所示。

[root@linux ~]# mount -o remount,acl /

接下来,将以下条目添加到/etc/fstab文件中以使其永久化。

/dev/mapper/fedora-root / ext4    defaults,acl 1 1

再次,重新挂载分区。

[root@linux ~]# mount -o remount  /

4.对于NFS服务器

在 NFS 服务器上,如果 NSF 服务器导出的文件系统支持 ACL,并且 NFS 客户端可以读取 ACL,那么客户端系统就会使用 ACL。

要禁用 NFS 共享上的 ACL,你必须添加选项no_acl 在 /etc/exportfs NFS 服务器上的文件。要再次在 NSF 客户端禁用它,请使用no_acl 挂载时间的选项。

如何在 Linux 系统中实现 ACL 支持

有两种类型 ACLs

  1. Access ACLs:访问 ACL 用于授予对任何文件或目录的权限。
  2. Default ACLs:默认 ACL 仅用于在特定目录上授予/设置访问控制列表。

访问 ACL 和默认 ACL 的区别:

  1. 默认 ACL 只能在目录级别使用。
  2. 在该目录中创建的任何子目录或文件都将从其父目录继承 ACL。另一方面,文件继承默认 ACL 作为其访问 ACL。
  3. 我们利用–d用于设置默认 ACL,默认 ACL 是可选的。
设置默认 ACL 之前

要确定特定文件或目录的默认 ACL,请使用 getfacl 命令。在下面的例子中,getfacl 用于获取文件夹的默认 ACL Music

[root@linux ~]# getfacl Music/

# file: Music/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::rw-
设置默认 ACL 后

要为特定文件或目录设置默认 ACL,请使用 setfacl 命令。在下面的例子中,setfacl 命令将设置一个新的 ACL(read 和 execute) 给文件夹 Music.

[root@linux ~]# setfacl -m d:o:rx Music/
[root@linux ~]# getfacl Music/
# file: Music/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
`default:user::rwx
default:group::r-x
default:other::r-x`

如何设置新的 ACL

使用 setfacl用于设置或修改任何文件或目录的命令。例如,rumenz1用户赋予read 和 write 的权限。

# setfacl -m u:rumenz1:rw /rumenz1/example

如何查看 ACL

使用 getfacl 用于查看任何文件或目录上的 ACL 的命令。例如,要查看  上的 ACL/rumenz1/example 使用下面的命令。

# getfacl /rumenz1/example

# file: rumenz1/example/
# owner: rumenz1
# group: rumenz1
user::rwx
user:rumenz1:rwx
user:rumenz2:r--
group::rwx
mask::rwx
other::---

如何删除 ACL

为了从任何文件/目录中删除 ACL,我们使用 x 和 b 选项

# setfacl -x ACL file/directory   # remove only specified ACL from file/directory.
# setfacl -b  file/directory     #removing all ACL from file/direcoty

两个用户(rumenz1 和 rumenz2),两者都有名为的共同次要组acl。我们将创建一个所有者是rumenz1的目录, 并将该目录的 read 和 execute 授权给用户 rumenz2

Step 1: 创建两个用户并从两者中删除密码

[root@linux ~]# for user in rumenz1 rumenz2
do
> useradd $user
> passwd -d $user
done
Removing password for user rumenz
passwd: Success
Removing password for user rumenz
passwd: Success

Step 2: 创建一个组和用户到次要组。

[root@linux ~]# groupadd acl
[root@linux ~]# usermod -G acl rumenz1
[root@linux ~]# usermod -G acl rumenz2

Step 3:创建目录/rumenz并将所有权更改为rumenz1`.

[root@linux ~]# mkdir /rumenz1
[root@linux ~]# chown rumenz1 /rumenz1/
[root@linux ~]# ls -ld /rumenz1/

drwxr-xr-x 2 rumenz1 root 4096 Apr 17 14:46 /rumenz1/
[root@linux ~]# getfacl /rumenz1

`getfacl: Removing leading '/' from absolute path names`
# file: rumenz1
# owner: rumenz1
# group: root
user::rwx
group::r-x
other::r-x

Step 4: 登录 rumenz1 并在其中创建一个目录。

[rumenz@linux ~]$ su - rumenz1

Last login: Thu Apr 17 14:49:16 IST 2014 on pts/4
[rumenz1@linux ~]$ cd /rumenz1/
[rumenz1@linux rumenz1]$ mkdir example
[rumenz1@linux rumenz1]$ ll

total 4
drwxrwxr-x 2 rumenz1 rumenz1 4096 Apr 17 14:50 example
[rumenz1@linux rumenz1]$ whoami 
rumenz1

Step 5: 现在使用设置ACLsetfacl,  rumenz1 将拥有所有 rwx 权限,rumenz2 将只有 read 的权限,example 文件夹和其他文件夹将没有权限。

$ setfacl -m u:rumenz1:rwx example/
$ setfacl -m u:rumenz2:r-- example/
$ setfacl -m  other:--- example/
$ getfacl example/

# file: example
# owner: rumenz1
# group: rumenz1
user::rwx
user:rumenz1:rwx
user:rumenz2:r--
group::r-x
mask::rwx
other::---

Step 6: rumenz2 在另一个终端上并将目录更改为 /rumenz1。现在尝试使用ls命令 查看内容,然后尝试更改目录并查看如下差异。

[rumenz@linux ~]$ su - rumenz2

Last login: Thu Apr 17 15:03:31 IST 2014 on pts/5
[rumenz2@linux ~]$ cd /rumenz1/
[rumenz2@linux rumenz1]$ ls -lR example/
example/:
total 0
[rumenz2@linux rumenz1]$ cd example/

-bash: cd: example/: Permission denied
[rumenz2@linux rumenz1]$ getfacl example/

# file: example
# owner: rumenz1
# group: rumenz1
user::rwx
user:rumenz1:rwx
user:rumenz2:r--
group::rwx
mask::rwx
other::---

Step 7: 现在给 execute许可rumenz2 在 example 文件夹,然后使用 cd 命令查看效果。现在 rumenz2 具有查看和更改目录的权限,但没有写入任何内容的权限。

[rumenz1@linux rumenz1]$ setfacl -m u:rumenz2:r-x example/
[rumenz1@linux rumenz1]$ getfacl example/

# file: example
# owner: rumenz1
# group: rumenz1
user::rwx
user:rumenz1:rwx
user:rumenz2:r-x
group::rwx
mask::rwx
other::---
[rumenz@linux ~]$ su - rumenz2

Last login: Thu Apr 17 15:09:49 IST 2014 on pts/5
[rumenz2@linux ~]$ cd /rumenz1/
[rumenz2@linux rumenz1]$ cd example/
[rumenz2@linux example]$ getfacl .
[rumenz2@linux example]$ mkdir test

mkdir: cannot create directory test: Permission denied
[rumenz2@linux example]$ touch test

touch: cannot touch test: Permission denied

Note: 执行 ACL 后,你将看到一个额外的 + 符号为 ls –l 输出如下。

[root@linux rumenz1]# ll

total 4
drwxrwx---+ 2 rumenz1 rumenz1 4096 Apr 17 17:01 example





posted @ 2021-10-01 10:17  CharyGao  阅读(87)  评论(0编辑  收藏  举报