从头到尾快速学习一遍Linux,高级工程师多年实践实战经验精华总结和实例示例,第七章:Linux精通学习路线及各个大厂优秀的学习资料。
Linux精通学习路线及各个大厂优秀的学习资料
看见好东西先收集起来,待时间充裕集中消灭他们。
tcp_wrappers
################################
Linux 系统下的防火墙主要分为两层:第一层是对 IP 进行过滤的 iptables,第二层就是 tcp_wrappers。
TCP Wrappers(也称为 tcp_wrappers,全称 Transmission Control Protocol Wrappers)是一个基于主机的网络 ACL 系统,用于过滤对(类Unix)操作系统上的 Internet 协议服务的网络访问。
原始代码由 Wietse Venema 于 1990 年编写,用于监控在埃因霍温科技大学数学与计算机科学系的 Unix 工作站上的破解者活动,并于 2001 年 6 月 1 日以自己的 BSD 式许可证发布。
tarball 包含一个名为 libwrap 的库,它实现了实际的功能。最初,只有使用 tcpd 程序将来自超级服务器(例如 inetd)的每个连接生成的服务包装起来。但是,今天最常见的网络服务守护进程可以直接链接到 libwrap。守护进程直接使用它而不是从超级服务器生成,或者当单个进程处理多个连接时运行。
与守护进程配置文件中经常出现的主机访问控制指令相比,TCP Wrappers 具有运行 ACL 时重新配置的优势(即不必重新加载或重新启动服务)。
有两种方式来判断一个服务是否支持 tcp wrapper:
-
通过查找库文件看是否有 libwrap
ldd
which command
2.查看是否连接到 /etc/hosts.allow|deny
strings `which command` # 查看静态链接库
如果有/etc/hosts.allow
/etc/hosts.deny # 就说明这个命令静态链接了 tcpwrraper
tcpwrraper 自身工作在内核,却可以通过这两个配置文件控制, /etc/hosts.allow
控制可以访问本机的 IP 地址, /etc/hosts.deny
控制禁止访问本机的 IP 地址。如果两个文件的配置有冲突,以 /etc/hosts.deny
为准。
hosts.allow 和 hosts.deny 文件中的每行代码都遵循以下格式
daemon_list client_list [command]
其中,daemon_list 是一个或多个服务器 daemon 程序(如rpcbind、vsftpd、或sshd)的列表(用逗号分隔)。client_list 是一个或者多个客户端的列表(用逗号分隔)。命令是可选的,当 client_list 的客户端试图访问从 daemon_list 访问服务器 daemon 程序时指代被执行的命令。
tcpwrraper自身工作在内核,却可以通过这两个文件来提供访问控制
请求
↓
服务 --->/etc/hosts.allow ---> 如有有就放行
↓ 没有
/etc/hosts.deny ----> 如果没有就放行
↓
如果有明确的匹配条目拒绝
/etc/hosts.allow|deny文件格式:damon_list: client_list [:option]
匹配服务列表:damon_list
vsftpd: 192.168.0.
vsftpd,sshd,in.telnetd:
ALL
daemon@host
vsftpd@192.168.0.186
#可以简写192.168.0 代表192.168.0.0网段
#可以一次指定多个服务
#可以使用通配符ALL来指定所有的服务
#@只对某个主机来控制
匹配客户端列表clent_list
IP
network address
network/mask: mask不能使用长度格式 ,只能是有完全ip的格式
172.16.0.0--->172.16. 也可以简写网段
HOSTNAME
fqdn
.a.rog 表示a.org域内的所有主机
option 选项
spawn #可以通过spawn来实现日志定义
spawn echo “”
#下面定义一个条件,只要用户通过telnet登录就记录到一个日志
vim /etc/hosts.deny
in.telnetd:ALL EXCEPT 172.16.0.1: spawnecho “Login attemp(date
) %u from %a attemp to login %A, the deamon is%d.” >> /var/log/telnet.log
##注意不能在echo后面用: 分号在这里有特殊意义。
##可以通过man 5 hosts_access 来查看上述%的含义
常用的宏定义 MACRO
ALL #代表所有主机,或者所有服务
LOCAL #表示本地主机,非FQDN主机
KNOWN #表示可以被解析的主机
UNKNOWN #反向可以被解析的主机
PARANOID #正反向解析不匹配的主机
EXCEPT #排除某个主机或某个网络
怎么来控制vsftpd的访问
1. which vsftpd # 确定文件路径
2. vim /etc/hosts.deny # 改文件立即生效
vsftpd: 172.16.100.100
#假设仅允许172.16网段访问
vim /etc/hosts.allow
vsftpd: 171.16 # 只允许172.16.0.0/16网段
vim /etc/hosts.deny
ALL: ALL # 拒绝其他的用户登陆
这样就只有172.16.0.0网段可以访问了
控制SSH ,只允许192.168.0.32网段登陆,并且不允许192.168.0.32登陆
vim /etc/hosts.deny
ALL:ALL
vim /etc/hosts.allow
sshd: 192.168.0 EXCEPT 192.168.0.32
在 Linux 系统中有一个特殊的守护进程 inetd(InterNET services Daemon),它用于 Internet 标准服务,通常随系统自动启动。inetd 的主要任务是为那些在系统初始化时没有启动的服务监听请求,当一个请求到达由 inetd 管理的服务端口时,inetd 会将该请求转发给名为 tcpd 的程序。tcpd 根据配置文件判断是否允许请求,如果请求被允许则会启动相应的服务器程序(如:ftpd、 telnet)。
inetd
tcpd
inetd(Internet服务守护程序)是许多提供Internet服务的Unix系统上的超级服务器守护程序。对于每个已配置的服务,它将侦听来自连接客户端的请求。根据请求运行的外部可执行文件可以是单线程或多线程。
通常称为超级服务器,inetd侦听Internet服务(如FTP,POP3和telnet)使用的指定端口。当TCP数据包或UDP数据包到达时具有特定目标端口号时,inetd会启动相应的服务器程序来处理连接。对于预计不会以高负载运行的服务,此方法更有效地使用内存,因为特定服务器仅在需要时运行。此外,特定于服务的程序中不需要网络代码,因为inetd将套接字直接挂钩到生成进程的stdin,stdout和stderr。对于具有频繁流量的协议,例如HTTP和POP3,可以优选直接截取流量的专用服务器。
inetd被称作 “Internet 超级服务器”, 因为它可以为多种服务管理连接。 当 inetd 接到连接时, 它能够确定连接所需的程序, 启动相应的进程,并把 socket 交给它 (服务 socket 会作为程序的标准输入、 输出和错误输出描述符)。 使用 inetd 来运行那些负载不重的服务有助于降低系统负载,因为它不需要为每个服务都启动独立的服务程序。
xinetd(eXended InterNET services Daemon)提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。在主流的 Linux 发行版中已经逐渐用xinetd取代了inetd,并且提供了访问控制、加强的日志和资源管理功能,成了Linux系统的Internet标准超级守护进程。很多系统服务都用到了xinetd如:FTP、IMAP、POP和telnet等。/etc/services中所有的服务通过他们的端口来访问服务器的时候,先由xinetd来处理,在唤起服务请求之前,xinetd先检验请求者是否满足配置文件中指定的访问控制规则,当前的访问是否超过了指定的同时访问数目,还有配置文件中指定的其他规则等,检查通过,xinetd将这个请求交付到相应的服务去处理,自己就进入sleep状态,等待下一个请求的处理。
Xinetd是Internet服务守护程序inetd的安全替代品。 Xinetd根据远程主机的地址和/或访问时间为所有服务提供访问控制,并可以防止拒绝访问攻击。 Xinetd提供广泛的日志记录,对服务器参数的数量没有限制,并允许用户将特定服务绑定到主机上的特定IP地址。每个服务都有自己的Xinetd特定配置文件;这些文件位于/etc/xinetd.d目录中。
xinetd 提供类似于 inetd + TCP Wrappers 的功能,但是更加强大和安全。后面 xinetd 已经取代了 inetd,并且提供了访问控制、加强的日志和资源管理功能。
注意:xinetd 只是取代了 inetd,想要完成的功能还需要安装 tcp_wrappers 。
TCP Wrappers 是一个应用层的访问控制程序,其原理是在服务器向外提供的 TCP 服务上包裹一层安全检测机制。外来的连接请求首先要通过这层安全检测,获得认证之后才能被系统服务接收。TCP Wrappers 的功能有两种实现方式:一种是由 tcpd 守护进程实现的,常被用于 inetd + TCP Wrappers 的系统中(如FreeBSD等);另一种是通过每种服务程序调用 libwrap.so 链接库实现的,即 libwrap.so 库支持的网络服务程序都能使用 TCP Wrappers 来实现访问控制,常用于 xinetd + TCP Wrappers 的系统中(如CentOS等)。
在CentOS中,TCP Wrappers 一般是默认安装的,若未安装成功,可以使用如下命令安装:
Linux 守护进程与初始化进程
服务器的主要任务就是为本地或远程用户提供各种服务。通常 Linux 系统上提供服务的程序是由运行在后台的守护进程(Daemon)来执行。一个实际运行中的 Linux 服务器一般会有多个这样的程序在运行。这些后台守护进程在系统开机后就运行了,并且在时刻地监听前台客户的请求,一旦客户发出了服务请求,守护进程便为它们提供服务。
按照服务类型,守护进程可以分为如下两类:
-
系统守护进程:如 crond(周期任务)、rsyslogd(日志服务)、cpus等;
-
网络守护进程:如 sshd、httpd、xinetd(托管)等。
Linux 操作系统的启动首先从 BIOS 开始,接下来进入 boot loader,由 bootloader 载入内核,进行内核初始化,内核初始化的最后一步就是启动系统初始化进程。系统初始化进程是一个特殊的的守护进程(其 PID 为 1),并且是所有其它守护进程的父进程或者祖先进程。也就是说,系统上所有的守护进程都是由系统初始化进程进行管理的(如启动、停止、重启等)。
在 Linux 的发展过程中,使用过三种 Linux 初始化进程。
-
SysVinit(大名鼎鼎的 init)
为 UNIX System V 系统创建的;
RHEL/CentOS 5 及之前的版本一直使用。 -
Upstart
由 Ubuntu 创建的;
RHEL/CentOS 6 使用Upstart。 -
Systemd
先进的初始化系统;
RHEL/CentOS 7 使用 Systemd(大多数 Linux 发行版都在采用)。
Linux 守护进程运行方式
- 独立运行(stand-alone)的守护进程
独立运行的守护进程由init脚本负责管理,所有独立运行的守护进程的脚本在/etc/rc.d/init.d/目录下。系统服务都是独立运行的守护进程,包括syslogd和cron等。独立运行的守护进程的工作方式称做stand-alone,它是UNIX传统的C/S模式的访问模式。
2.xinetd模式运行独立的守护进程
从守护进程的概念可以看出,对于系统所要通过的每一种服务,都必须运行一个监听某个端口连接所发生的守护进程,这意味着资源浪费。为了解决这个问题,Linux引进了"网络守护进程服务程序"的概念。也就是xinted(extended internet daemon)。xinetd能够同时监听多个指定的端口,在接受用户请求时,它能够根据用户请求的端口的不同,启动不同的网络服务进程来处理这些用户请求。可以把xinetd看做一个管理启动服务的管理服务器,它决定把一个客户请求交给哪个程序处理,然后启动相应的守护进程。xinetd无时不在运行并监听它所管理的所有端口上的服务。当某个要连接它管理的某项服务的请求到达时,xinetd就会为该服务启动合适的服务器。
DHCP 服务配置文件
###############################
/etc/dhcpd.conf 是DHCP服务的配置文件,DHCP 服务所有参数都是通过修改 dhcpd.conf 文件来实现,安装后 dhcpd.conf 是没有做任何配置的,将 /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample 复制为 dhcpd.conf 文件进行配置:
updatedb 一下,然后执行 locate dhcpd.conf
会发现所有与 dhcpd.conf 有关的配置文件。
备份文件之后对 /etc/dhcpd.conf 文件修改,配置 DHCP 服务参数
[root@linux-a ~]# vim /etc/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
subnet 192.168.124.0 netmask 255.255.255.0 {
# --- default gateway
option routers 192.168.124.1;
option subnet-mask 255.255.255.0;
option time-offset -18000; # Eastern Standard Time
# option ntp-servers 192.168.1.1;
# option netbios-name-servers 192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
# option netbios-node-type 2;
range dynamic-bootp 192.168.124.200 192.168.124.230;
default-lease-time 21600;
max-lease-time 43200;
# we want the nameserver to appear at a fixed address
host www {
hardware ethernet 12:34:56:78:AB:CD;
fixed-address 207.175.42.254;
}
}
dhcpd.conf参数说明
/etc/dhcpd.conf 通常包括三部分:parameters、declarations 、option。
- DHCP 配置文件中的 parameters(参数):表明如何执行任务,是否要执行任务,或将哪些网络配置选项发送给客户
ddns-update-style 配置DHCP-DNS 互动更新模式。
default-lease-time 指定确省租赁时间的长度,单位是秒。
max-lease-time 指定最大租赁时间长度,单位是秒。
hardware 指定网卡接口类型和MAC地址。
server-name 通知DHCP客户服务器名称。
get-lease-hostnames flag 检查客户端使用的IP地址。
fixed-address ip 分配给客户端一个固定的地址。
authritative 拒绝不正确的IP地址的要求。
- DHCP 配置文件中的 declarations (声明):用来描述网络布局、提供客户的IP地址等
shared-network 用来告知是否一些子网络分享相同网络。
subnet 描述一个IP地址是否属于该子网。
range 起始IP 终止IP 提供动态分配IP 的范围。
host 主机名称 参考特别的主机。
group 为一组参数提供声明。
allow unknown-clients;deny unknown-client 是否动态分配IP给未知的使用者。
allow bootp;deny bootp 是否响应激活查询。
allow booting;deny booting 是否响应使用者查询。
filename 开始启动文件的名称. 应用于无盘工作站。
next-server 设置服务器从引导文件中装如主机名,应用于无盘工作站。
- DHCP配置文件中的option(选项):用来配置DHCP可选参数,全部用option关键字作为开始
subnet-mask 为客户端设定子网掩码。
domain-name 为客户端指明DNS名字。
domain-name-servers 为客户端指明DNS服务器IP地址。
host-name 为客户端指定主机名称。
routers 为客户端设定默认网关。
broadcast-address 为客户端设定广播地址。
ntp-server 为客户端设定网络时间服务器IP地址。
time-offset 为客户端设定和格林威治时间的偏移时间,单位是秒。
注意:如果客户端使用的是视窗操作系统,不要选择"host-name"选项,即不要为其指定主机名称
启动和检查DHCP服务器
使用命令启动DHCP服务器
#service dhcpd start
关闭DHCP服务器
#service dhcpd stop
重启DHCP服务器
#service dhcpd restart
使用ps命令检查dhcpd进程
#ps -ef | grep dhcpd
root 2402 1 0 14:25 ? 00:00:00 /usr/sbin/dhcpd
root 2764 2725 0 14:29 pts/2 00:00:00 grep dhcpd
使用检查dhcpd运行的端口
# netstat -nutap | grep dhcpd
udp 0 0 0.0.0.0:67 0.0.0.0:* 2402/dhcpd
配置DHCP客户端
通常网管员使用选择手工配置 DHCP 客户,需要修改 /etc/sysconfig/network 文件来启用联网;并修改 /etc/sysconfig/network-scripts 目录中每个网络设备的配置文件。在该目录中,每个设备都有一个叫做 ifcfg-eth? 的配置文件,eth?是网络设备的名称。如 eth0 等。如果你想在引导时启动联网,NETWORKING 变量必须设为 yes。 除了此处之外 /etc/sysconfig/network 文件应该包含以下行:
NETWORKING=yes
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
Bourne shell 的内部命令
##############################
Bourne Shell 是 UNIX 的初始外壳程序之一,它是20世纪70年代中期由 Stephen R. Bourne 在贝尔实验室编写的。下面介绍 Bourne shell 的内部命令,它们严格遵循 POSIX 规范。
:(冒号)
: [arguments]
通常情况下它只是一个占位符,返回状态是零。在 Linux 的帮助页中说它除了参数扩展和重定向之外不产生任何作用。
.(点号)
. filename [arguments]
在当前的 shell 环境中,读取并执行 filename 中的命令。.
命令和 Bash 的内部命令 source 是等价的。
source 命令与 shell scripts 的区别是,source 在当前 shell 环境下执行命令,而 shell scripts 是启动一个子 shell 来执行命令。如果把设置环境变量(或 alias 等)的命令写进 scripts 中,那么它只会影响子 shell,无法改变当前的 shell,所以 source(或点)命令经常用来执行刚修改的初始化文档。
break
break [n]
跳出所有循环,从 for、while、until 或 select 循环中跳出。如果指定 n(n ≥ 1),则跳出外围的第 n 层循环。
cd
cd [-L|[-P [-e]] [-@] [directory]
切换工作目录至 directory(directory 可以使用绝对路径或相对路径)。如果没有指定 directory,则使用 shell 变量 $HOME
的值。
命令 | 说明 |
---|---|
cd | 进入用户主目录 |
cd ~ | 进入用户主目录 |
cd ~xiao | 进入用户 xiao 的主目录(需要权限) |
cd - | 返回上一个目录 |
continue
continue [n]
跳出当前循环,继续执行外围的 for,while,until 或 select 的循环。如果指定 n(n ≥ 1),则继续执行外围第 n 层的循环。
eval
eval [arguments]
eval会对后面的 arguments 扫描两遍。第一遍扫描后,如果 arguments 是普通命令,则执行此命令;如果 arguments 中包含间接引用的变量,则该命令会对变量进行第两遍扫描。
exec
exec [-cl] [-a name] [command [arguments]]
用于调用并执行指令的命令。如果在当前终端中使用命令,则当指定的命令执行完毕后会立即退出终端。
exit
exit [n]
退出 shell,并在 shell 的父进程中返回状态 n。执行 exit 可以指定 shell 的返回状态 n。若不设置状态参数,则以预设值退出。状态值0代表执行成功,其他值代表执行失败。
export
export [-fn] [-p] [name[=value]]
将 shell 变量输出为环境变量,或者将 shell 函数输出为环境变量。“-f”选项(助记词: Function, 函数)用于指定 shell 函数;否则,它是 shell 变量。如果名称后面是“=值”的形式,那么这个值就会赋给名称。
getopts
getopts optstring name [args]
Shell 脚本用 getopts 来分析位置参数。在执行脚本时,getopts 就检查命令行参数,并判断它是否合法。即检查参数是否以 - 开头,后面跟一个包含在 options 中的字母。如果是,就把匹配的选项字母存在指定的变量 variable 中,并返回退出状态0;如果 - 后面的字母没有包含在 options 中,就在 variable 中存入一个 ?,并返回退出状态0;如果命令行中已经没有参数,或者下一个参数不以 - 开头,就返回不为0的退出状态。
hash
hash [-r] [-p filename] [-dt] [name]
linux 系统下有一个 hash 表(就相当于命令缓存),当开机时这个 hash 表为空,每当你执行命令时,hash 表会记录这条命令的路径。第一次执行命令时,shell 会从默认的 PATH 路径下寻找该命令,当第二次使用该命令时,shell会先查看 hash 表,如果没有该命令才会去 PATH 路径下寻找。hash表的主要作用是提高命令的调用速率。
pwd
pwd [-LP]
打印出当前工作目录的绝对路径。如果给定了“-P”选项(助记词: Physical, 物理路径),则打印的路径中不会包含符号链接。如果给定了“-L”选项(助记词: symLink, 符号链接),则打印的路径中可能包含符号链接。
readonly
readonly [-aAf] [-p] [name[=value]] ...
用于定义只读 shell 变量和 shell 函数。readonly命令的选项-p可以输出显示系统中所有定义的只读变量。
return
return [n]
退出函数并返回指定的退出状态码 n。return 命令允许指定一个整数值 n 来定义函数的退出状态码。如果没有指定 n,则返回函数中最后一个执行命令的退出状态码。return 命令也可以用来结束执行一个用内部命令 . 或 source 执行的脚本。
shift
shift [n]
用于左移位置参数。比如 shift 3 会将 $4 左移 3 位变成 $1,如果原来的是 $1、$2 或 $3 则丢弃,$0不移动。不带参数的 shift 命令相当于 shift 1。
shift命令对于位置变量或命令行参数非常有用,它可以在不知道位置变量个数的情况下,逐个的把参数一一处理。
test 和 [ ]
test expr
用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。test 不接受任何选项。在if then else语句中,也可以用[]代替,即 [ condition ],注意:方括号两边都要用空格。
times
times command
获取命令执行时间,其中包括命令的实际运行时间(real time),以及执行此进程所消耗的实际CPU时间(user time)和内核执行系统调用所使用的时间(sys time)。
trap
trap [-lp] [arg] [sigspec ...]
用于在接收到指定信号后将要采取的命令,常见的用途是在脚本程序被中断时完成清理工作。
umask
umask [-p] [-S] [mode]
用来设置限制新建文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次登陆系统时,都会执行 umask 命令, 并自动设置掩码 mode 来限制新文件的权限。用户可以再次执行 umask 命令来改变默认值,新的权限将会把旧的覆盖掉。
unset
unset [-fnv] [name]
用于删除已定义的 shell 变量(包括环境变量)和 shell 函数。unset 命令不能够删除具有只读属性的 shell 变量和环境变量。
成为Linux运维专家是一个涉及广泛技能和知识面的过程。以下是按类别整理的50个优秀的学习资料,包括书籍、在线课程、官方文档、论坛和工具等,以及它们的概括介绍和访问链接:
书籍:
-
《鸟哥的Linux私房菜》
- 简介:适合Linux初学者,深入浅出地介绍了Linux的基础知识和操作。
- 访问链接:鸟哥的Linux私房菜
-
《Linux命令行与Shell脚本编程大全》
- 简介:详细介绍了Linux命令行的使用和Shell脚本编程。
- 访问链接:Linux命令行与Shell脚本编程大全
-
《深入理解Linux内核》
- 简介:深入探讨了Linux内核的工作原理和实现机制。
- 访问链接:深入理解Linux内核
-
《TCP/IP详解 卷1:协议》
- 简介:详细介绍了TCP/IP协议族,是网络编程和网络管理的重要参考书籍。
- 访问链接:TCP/IP详解 卷1:协议
-
《UNIX环境高级编程》
- 简介:深入讲解了UNIX系统编程,包括文件IO、进程控制、网络通信等内容。
- 访问链接:UNIX环境高级编程
在线课程:
-
Linux Academy
- 简介:提供全面的Linux和云计算课程,适合初学者和专业人士。
- 访问链接:Linux Academy
-
Coursera - Linux操作系统
- 简介:Coursera提供多个Linux相关课程,涵盖从基础到高级的内容。
- 访问链接:Coursera - Linux
-
edX - Linux and OpenStack for Cloud Infrastructure
- 简介:专注于Linux和OpenStack在云计算中的应用。
- 访问链接:edX - Linux and OpenStack
-
Udemy - Linux for Programmers and Developers
- 简介:面向程序员和开发者的Linux课程,强调实践和应用。
- 访问链接:Udemy - Linux for Programmers
-
Pluralsight - Linux Administration
- 简介:提供丰富的Linux管理课程,适合不同层次的学习者。
- 访问链接:Pluralsight - Linux
官方文档:
-
Linux Kernel Archives
- 简介:Linux内核的官方文档,包括内核源代码和文档。
- 访问链接:Linux Kernel Archives
-
GNOME Project
- 简介:GNOME桌面环境的官方文档和资源。
- 访问链接:GNOME Project
-
Apache HTTP Server Documentation
- 简介:Apache HTTP服务器的官方文档,包括配置指南和教程。
- 访问链接:Apache HTTP Server Documentation
-
Nginx Documentation
- 简介:Nginx服务器的官方文档,包括安装、配置和优化指南。
- 访问链接:Nginx Documentation
-
Docker Documentation
- 简介:Docker容器平台的官方文档,包括快速入门、最佳实践和API文档。
- 访问链接:Docker Documentation
论坛和社区:
-
Stack Overflow
- 简介:一个编程问答社区,可以找到大量关于Linux的问题和答案。
- 访问链接:Stack Overflow
-
Reddit - r/linux
- 简介:Reddit的Linux社区,讨论Linux相关的话题和新闻。
- 访问链接:Reddit - r/linux
-
Server Fault
- 简介:专注于服务器和网络管理的问答社区。
- 访问链接:Server Fault
-
Unix & Linux Stack Exchange
- 简介:一个专注于Unix和Linux的问答网站,提供专业的问答和讨论。
- 访问链接:Unix & Linux Stack Exchange
-
LinuxQuestions.org
- 简介:一个Linux用户社区,提供Linux相关的帮助和讨论。
- 访问链接:LinuxQuestions.org
工具和资源:
-
Git - Distributed Version Control System
- 简介:分布式版本控制系统,广泛用于代码管理和协作开发。
- 访问链接:Git
-
Vim - The Editor
- 简介:一个功能强大的文本编辑器,适合程序员和系统管理员。
- 访问链接:Vim
-
tmux - Terminal Multiplexer
- 简介:一个开源的终端复用器,允许在一个终端窗口中访问多个独立的终端会话。
- 访问链接:tmux
-
Docker
- 简介:一个开源的应用容器引擎,可以打包、分发和运行任何应用。
- 访问链接:Docker
-
Kubernetes
- 简介:一个开源的容器编排系统,用于自动化应用的部署、扩展和管理。
- 访问链接:Kubernetes
认证和培训:
-
LPI - Linux Professional Institute
- 简介:提供Linux认证和培训,是Linux领域公认的专业认证机构。
- 访问链接:LPI
-
CompTIA Linux+
- 简介:CompTIA提供的Linux认证,适合Linux初学者和专业人士。
- 访问链接:CompTIA Linux+
-
Red Hat Certification Program
- 简介:Red Hat提供的认证计划,包括Red Hat Certified System Administrator (RHCSA) 和 Red Hat Certified Engineer (RHCE)。
- 访问链接:Red Hat Certification
-
Oracle Linux Certification
- 简介:Oracle提供的Linux认证,包括Oracle Linux Certified Administrator (OLCA) 和 Oracle Linux Certified Engineer (OLCE)。
- 访问链接:Oracle Linux Certification
-
Cisco CCNA
- 简介:Cisco提供的网络认证,包括Linux和网络管理的相关知识。
- 访问链接:Cisco CCNA
博客和教程:
-
The Linux Foundation
- 简介:Linux基金会的官方网站,提供Linux相关的新闻、教程和资源。
- 访问链接:The Linux Foundation
-
How-to Geek
- 简介:一个提供各种技术教程的网站,包括Linux的使用技巧和故障排除。
- 访问链接:How-to Geek
-
DigitalOcean Community Tutorials
- 简介:DigitalOcean社区提供的教程,涵盖Linux、云计算和Web开发等主题。
- 访问链接:DigitalOcean Tutorials
-
Linux Journal
- 简介:一个专注于Linux和开源技术的杂志,提供深入的技术文章和教程。
- 访问链接:Linux Journal
-
SysAdmin Casts
- 简介:提供系统管理和Linux相关的视频教程和播客。
- 访问链接:SysAdmin Casts
实验和实践:
-
Vagrant
- 简介:一个用于创建和配置虚拟开发环境的工具,适合Linux和系统管理的学习。
- 访问链接:Vagrant
-
Puppet
- 简介:一个配置管理工具,用于自动化服务器和网络设备的配置。
- 访问链接:Puppet
-
Ansible
- 简介:一个开源的配置管理、应用部署和任务执行系统。
- 访问链接:Ansible
-
Chef
- 简介:一个企业级的配置管理工具,用于自动化基础设施的构建、部署和管理。
- 访问链接:Chef
-
HashiCorp Learning Platform
- 简介:HashiCorp提供的在线学习平台,包括Vagrant、Packer、Terraform等工具的教程。
- 访问链接:HashiCorp Learning
监控和日志:
-
Nagios
- 简介:一个开源的计算机系统监控、网络监控和应用程序监控软件。
- 访问链接:Nagios
-
Zabbix
- 简介:一个开源的监控解决方案,用于监控网络和应用程序。
- 访问链接:Zabbix
-
ELK Stack
- 简介:Elasticsearch、Logstash和Kibana的组合,用于日志收集、分析和可视化。
- 访问链接:ELK Stack
-
Prometheus
- 简介:一个开源的系统监控和警报工具包。
- 访问链接:Prometheus
-
Graylog
- 简介:一个开源的日志管理平台,用于收集、索引和分析日志数据。
- 访问链接:Graylog
安全和审计:
-
OpenSCAP
- 简介:一个用于安全内容自动化协议的工具,用于评估系统和软件的安全配置。
- 访问链接:OpenSCAP
-
SELinux
- 简介:Security-Enhanced Linux,一个Linux内核安全模块。
- 访问链接:SELinux
-
AIDE
- 简介:Advanced Intrusion Detection Environment,一个开源的入侵检测系统。
- 访问链接:AIDE
-
OSSEC
- 简介:一个开源的主机入侵检测和监控系统。
- 访问链接:OSSEC
-
Fail2Ban
- 简介:一个用于防范暴力攻击的日志分析工具。
- 访问链接:Fail2Ban
这些资源涵盖了Linux运维专家需要掌握的各个方面,包括基础知识、网络管理、系统安全、自动化和监控等。建议根据自己的兴趣和需求选择合适的资源进行学习。同时,实践是提高技能的关键,可以通过搭建实验环境来加深理解和应用所学知识。
Linux运维工程师需要掌握一系列技能,以确保系统稳定、安全、高效地运行。以下是一些必须掌握的关键技能:
-
Linux基础知识:
- 熟悉Linux操作系统的基本概念,包括文件系统、权限、用户管理、进程管理等。
-
命令行操作:
- 熟练使用各种命令行工具,如
ls
、grep
、sed
、awk
、find
等。
- 熟练使用各种命令行工具,如
-
Shell脚本编程:
- 能够编写Shell脚本来自动化日常运维任务。
-
文本处理:
- 熟练使用文本处理工具,如
vi
或nano
编辑器,以及grep
、sed
、awk
等文本处理命令。
- 熟练使用文本处理工具,如
-
网络管理:
- 理解TCP/IP网络原理,能够配置网络接口、路由、DNS、DHCP等。
-
服务配置与管理:
- 掌握Web服务器(如Apache、Nginx)、数据库服务器(如MySQL、PostgreSQL)、邮件服务器等的安装、配置和维护。
-
安全性:
- 理解Linux系统安全,能够配置防火墙、设置安全策略、监控系统日志、处理安全事件。
-
备份与恢复:
- 能够制定和执行数据备份策略,以及在出现问题时恢复数据。
-
性能监控与优化:
- 掌握性能监控工具,如
top
、htop
、iostat
、vmstat
等,能够分析系统性能并进行优化。
- 掌握性能监控工具,如
-
系统监控工具:
- 熟悉使用监控工具,如Nagios、Zabbix、Prometheus等,进行系统监控和警报。
-
容器技术:
- 理解Docker和Kubernetes等容器技术,能够部署和管理容器化应用。
-
虚拟化技术:
- 熟悉虚拟化技术,如VMware、KVM,能够创建和管理虚拟机。
-
配置管理工具:
- 掌握配置管理工具,如Ansible、Puppet、Chef,以自动化配置管理和应用部署。
-
持续集成/持续部署(CI/CD):
- 理解CI/CD流程,熟悉Jenkins、GitLab CI等工具。
-
云服务管理:
- 了解公有云平台,如AWS、Azure、Google Cloud,能够管理和部署云资源。
-
故障排查:
- 具备快速定位和解决系统故障的能力。
-
版本控制系统:
- 熟悉Git等版本控制系统,能够管理代码和软件版本。
-
安全协议与合规性:
- 理解常见的安全协议和标准,如SSL/TLS、SSH,以及合规性要求。
-
硬件知识:
- 基本的硬件知识,包括服务器组件、存储设备、网络设备等。
-
项目管理:
- 能够规划和执行项目,管理变更和发布。
这些技能覆盖了Linux运维工程师日常工作的方方面面,从系统管理到网络配置,再到安全和性能优化。随着技术的发展,运维工程师还需要不断学习新技术和工具,以适应不断变化的IT环境。
在Linux运维工作中,遵守安全协议和标准是非常重要的,以确保系统的安全性和数据的完整性。以下是一些必须遵守的安全协议和标准:
-
SSL/TLS:
- 用于在网络通信中提供加密,保护数据传输的安全。
-
SSH (Secure Shell):
- 用于安全地访问远程服务器,替代不安全的Telnet协议。
-
HTTPS:
- HTTP的安全版本,通过SSL/TLS提供加密的Web通信。
-
SFTP (SSH File Transfer Protocol):
- 用于安全地传输文件,是FTP的安全性替代方案。
-
防火墙规则:
- 配置iptables或firewalld等防火墙,以控制进出服务器的网络流量。
-
SELinux (Security-Enhanced Linux):
- 强制访问控制安全策略,增强Linux系统的安全性。
-
AppArmor:
- 另一种Linux内核安全模块,用于限制程序的资源访问。
-
密码策略:
- 采用强密码策略,定期更换密码,并使用密码管理工具。
-
最小权限原则:
- 仅给用户和应用程序提供完成其任务所必需的最小权限。
-
安全审计:
- 定期进行系统审计,使用如
auditd
等工具来跟踪和记录安全事件。
- 定期进行系统审计,使用如
-
数据备份:
- 定期备份数据,并确保备份的安全性和可恢复性。
-
系统更新和补丁管理:
- 及时应用系统和软件的安全更新和补丁。
-
入侵检测系统 (IDS):
- 部署如Snort或Suricata等入侵检测系统,以监测潜在的恶意活动。
-
安全配置基准:
- 遵循如CIS (Center for Internet Security) 提供的安全配置基准。
-
访问控制列表 (ACLs):
- 使用ACLs来细化文件和目录的访问权限。
-
多因素认证 (MFA):
- 在可能的情况下,实施多因素认证以增加账户安全性。
-
网络安全协议:
- 遵守如IPSec等网络安全协议,用于加密网络通信。
-
密码存储标准:
- 使用如bcrypt、PBKDF2、Argon2等安全算法来存储密码。
-
安全编码实践:
- 遵循安全编码标准,减少应用程序中的安全漏洞。
-
合规性标准:
- 根据所在行业和地区的法律法规,如GDPR、HIPAA、PCI DSS等,确保合规性。
-
安全日志管理:
- 实施日志管理策略,确保日志的完整性、可用性和保密性。
-
安全培训:
- 定期对运维人员进行安全培训,提高安全意识和技能。
-
应急响应计划:
- 制定和维护应急响应计划,以快速响应安全事件。
-
物理安全:
- 确保服务器和数据中心的物理安全。
-
供应链安全:
- 确保软件和硬件供应链的安全性,防止恶意软件和硬件的威胁。
遵守这些安全协议和标准有助于构建一个更加安全和可靠的Linux运维环境。随着技术的发展和威胁的演变,运维人员需要不断更新他们的知识和技能,以应对新的安全挑战。