在linux入门指南
在linux中传输文件文件夹的10个scp命令
scp 命令的基本语法
下面的命令将读作
copy source_file_name
进入destination_folder
在destination_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
文件包含你的username
和password
以明文格式,请确保该文件只能自己访问。
选择不同的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-415135cb6aeab2. 列出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_WAIT3. 列出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-415135cb6aeab5. 列出所有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 *:* LISTEN6. 列出所有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.comm8. 按协议显示统计数据
按协议显示统计信息。默认情况下,会显示 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 sent9. 按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 sent10. UDP统计
# netstat -su
Udp:
1774823 packets received
901848 packets to unknown port received.
0 packet receive errors
2968722 packets sent11. 用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-applet12. 显示混杂模式
使用
-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 *:* LISTEN13. 显示内核 IP 路由
使用
netstat
和route
命令显示内核 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 eth014. 显示网络接口事务
显示网络接口数据包事务,包括传输和接收具有 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 LRU15. 显示内核接口表
显示内核接口表,类似于
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 016. 显示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::117. 连续打印
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 ESTABLISHED18. 寻找不支持的地址
使用一些有用的信息查找未配置的地址族。
# 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服务器备份的主要优点如下:
- Rsync仅同步那些已更改的字节和数据块。
- Rsync能够检查和删除备份服务器上已从主Web服务器中删除的那些文件和目录。
- 它在远程复制数据时处理权限、所有权和特殊属性。
- 它还支持SSH协议以加密方式传输数据,让你放心所有数据都是安全的。
- Rsync在传输数据时使用压缩和解压缩方法,消耗更少的带宽。
如何同步两个Web服务器
设置rsync以创建Web服务器的镜像。我将使用两台服务器。
主服务器
IP Address
: 192.168.1.111Hostname
: webserver.rumenz.com备份服务器
IP Address
: 192.168.1.112Hostname
: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
我们可以设置 rsync
root
用户,但出于安全原因,你可以在主网络服务器上创建一个非特权用户,即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
同样,你也可以为其他用户执行此操作。首先,我们将生成一个
public
和private
在备份服务器上使用以下命令键(即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 + |
| . . |
+-----------------+我们的
Public
和Private
密钥已生成,我们必须与主服务器共享它,以便主 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 server
到backup server
在每一个5 minutes
.你可以根据需要更改时间和文件夹位置配置。用lynis工具对linux系统进行安全审计
Lynis
是一个开源且功能强大的auditing tool
适用于类 Unix/Linux 操作系统。它扫描系统的安全信息、一般系统信息、已安装和可用的软件信息、配置错误、安全问题、没有密码的用户帐户、错误的文件权限、防火墙审计等。
Lynis
是最值得信赖的自动化审计工具之一,用于在基于 Unix/Linux 的系统中进行软件补丁管理、恶意软件扫描和漏洞检测。这个工具很有用auditors
,network
和system administrators
,security 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
:
Access ACLs
:访问 ACL 用于授予对任何文件或目录的权限。Default ACLs
:默认 ACL 仅用于在特定目录上授予/设置访问控制列表。
访问 ACL 和默认 ACL 的区别:
- 默认 ACL 只能在目录级别使用。
- 在该目录中创建的任何子目录或文件都将从其父目录继承 ACL。另一方面,文件继承默认 ACL 作为其访问 ACL。
- 我们利用
–d
用于设置默认 ACL,默认 ACL 是可选的。
设置默认 ACL 之前
要确定特定文件或目录的默认 ACL,请使用
getfacl
命令。在下面的例子中,getfacl
用于获取文件夹的默认 ACLMusic
。
[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: 现在使用设置ACL
setfacl
,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