Linux 基础篇(06)Linux 系统管理员

系统服务 (daemons)

一、守护进程daemon与服务service

  • 举例来说,linux系统需要实现循环执行定时任务的功能就需要 crond 程序的执行
  • 这里讲的循环执行定时任务就是系统提供的服务service,但是实现这个功能的是 crond 这个程序,也就是daemon
  • 一般情况没有必要非要去区分二者的差别,就将二者视为一样的也可以

1、daemon 的类型

stand alone:此 daemon 可以自行单独启动服务
  • stand alone 的 daemon 响应速度较快。
  • 常见的 stand alone daemon 有 WWW 的 daemon (httpd)、FTP 的 daemon (vsftpd) 等等
  • 系统服务都是独立运行的守护进程,包括syslogd和crond等
super daemon:一支特殊的 daemon 来统一管理
  • 这种服务的启动方式则是藉由一个统一的 daemon 来负责唤起服务,这个特殊的 daemon 就被称为 super daemon

  • 当没有客户端的请求时,各项服务都是未启动的情况,等到有来自客户端的要求时, super daemon 才唤醒相对应的服务,当客户端的请求结束后,被唤醒的这个服务也会关闭并释放系统资源,这种模式的运行示意图如下
    Linux 基础篇(06)Linux 系统管理员_第1张图片

  • 这种模式的优缺点:

    • super daemon 可以具有安全控管的机制,就是类似网络防火墙的功能啦
    • 比较节约系统的资源,但是同时对客户端提供响应的速度相对慢一些
  • super daemon 的处理模式有两种,分别是这样:

    • multi-threaded (多重线程):
      全部客户的请求都给他拿来,一次给他交办下去,所以一个服务同时会负责好几个程序
    • single-threaded (单个线程):
      一个一个来,第一个没有处理完之前,后面的请排队,请求多的话要等很久
      Linux 基础篇(06)Linux 系统管理员_第2张图片
  • 以 daemon 提供服务的的工作状态来区分,又可以将 daemon 分为两大类

    • signal-control
      通过讯号来管理的,只要有任何客户端的需求进来,他就会立即启动去处理。
    • interval-control
      就是每隔一段时间就主动的去运行某项工作,前面学到的 atd 与 crond 就属于这种类型的 daemon 啦

守护进程(daemon)命名守则:就是在与原有的单词后面加上一个 d

2、服务与端口的对应

  • 在互联网的世界里,通过IP可以找到我们的主机,通过具体的port端口可以定位到具体的服务(程序)
  • Linux 里面配置对应关系的服务和端口号就是 /etc/services啦,不过这个东西最好不要随便改,因为都是遵循互联网的协议的

3、daemon 的启动脚本与启动方式

daemon相关文件
  • /etc/init.d/* :启动脚本放置处
    系统上几乎所有的服务启动脚本都放置在这里,这是公认的目录,实际上放置在 /etc/rc.d/init.d/ 啦,此目录是一个链接文件;centos7中这个目录里面基本没啥东西了,init已经被systemd取代了
  • /etc/sysconfig/*:各服务的初始化环境配置文件
    几乎所有的服务都会将初始化的一些选项配置写入到这个目录下,举例来说,而网络的配置则写在 /etc/sysconfig/network-script 这个文件夹中
  • /etc/xinetd.conf, /etc/xinetd.d/* :super daemon 配置文件
  • /var/lib/* :各服务产生的数据库
  • /var/run/*:各服务的程序之 PID 记录处
    daemon 通常会将自己的 PID 记录一份到 /var/run/ 当中!例如登录文件的 PID 就记录在 /var/run/syslogd.pid 这个文件中
Stand alone 的启动方式
  • 独立运行的守护进程由init脚本负责管理,所有独立运行的守护进程的脚本在/etc/init.d/目录下
  • 老版本的 centos 命令 service 本质也是到 /etc/init.d/* 目录下寻找相关的启动脚本来启动服务
  • centos7中 init.d 文件夹里面基本没啥启动的脚本了,服务的管理都是通过 systemctl 来管理了
Super daemon 的启动方式
  • centos中的super daemon一般是由 xinetd 来实现的,他可以同时监听多个指定的端口
  • Xinetd的配置文件 /etc/xinetd.conf ,个别 daemon 配置文件则在 /etc/xinetd.d/* 内,也就是说前者是一个全局的配置,后者是针对个别 daemon 的配置

参考文章:
systemctl使用指南:CentOS 7.x systemd对比CentOS 6.x daemon
Linux中的两种守护进程stand alone和xinetd
最简明扼要的 Systemd 教程,只需十分钟

二、解析 super daemon 的配置文件

1、centos7的服务的配置

  • centos7 里面的 systemd 替代了 centos5 里面的 init,支持多线程的启动,使用 systemctl 命令控制
  • systemd开启和监督整个系统是基于unit的概念,所有unit的配置可以到/usr/lib/systemd里面查看,下级目录分别有system和user放置系统和用户的unit 配置文件
unit的类型
  • service:代表一个后台服务进程,这是最常用的一类。
  • socket:封装系统和互联网中的一个套接字,相应的服务在第一个“连接”进入套接字时就会启动(例如:nscd.socket在有新连接后便启动nscd.service)。
  • mount:封装文件系统结构层次中的一个挂载点,systemd会将/etc/fstab中的条目都转换为挂载点,并在开机时处理。
  • automount:封装系统结构层次中的一个自动挂载点。
  • target:此类配置单元为其他配置单元进行逻辑分组。它们本身实际上并不做什么,只是引用其他配置单元而已,这样便可以对配置单元做一个统一的控制,就可以实现大家都非常熟悉的运行级别的概念。
  • timer:定时器配置单元用来定时触发用户定义的操作。这类配置单元取代了atd,crond等传统的定时服务。
service配置文件
  • cat sshd.service可以得到下面的内容,可以看到配置文件分为 unit、service和install三个部分
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target
  • unit 部分:启动顺序与依赖关系

    • Description:就是服务的一个基本描述
    • Documentation:指定文档的位置
    • After:定义启动顺序,表示此 unit 需要在后面定义的 unit 之后启动,与此对应的还有 before
    • Wants:表示一种弱依赖,就是即便后面的服务启动失败啥的,也不会影响我们的目标 unit ,配置强依赖的话使用 requires
  • service 部分:启动行为

    • Type字段定义启动类型。它可以设置的值如下。
      • simple(默认值):ExecStart字段启动的进程为主进程
      • forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程
      • oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务
      • dbus:类似于simple,但会等待 D-Bus 信号后启动
      • notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务
      • idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合
    • EnvironmentFile字段:指定当前服务的环境参数文件
    • ExecStart字段:定义启动进程时执行的命令,其中的变量$OPTIONS就来自EnvironmentFile字段指定的环境参数文件。与之作用相似的,还有如下这些字段。
      • ExecReload字段:重启服务时执行的命令
      • ExecStop字段:停止服务时执行的命令
      • ExecStartPre字段:启动服务之前执行的命令
      • ExecStartPost字段:启动服务之后执行的命令
      • ExecStopPost字段:停止服务之后执行的命令
    • KillMode字段:定义 Systemd 如何停止 sshd 服务,可选的值可以是
      • control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
      • process:只杀主进程
      • mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
      • none:没有进程会被杀掉,只是执行服务的 stop 命令。
    • Restart字段:定义了 sshd 退出后,Systemd 的重启方式。
    • RestartSec字段:表示 Systemd 重启服务之前,需要等待的秒数。
  • install 部分

    • WantedBy字段:表示该服务所在的 Target。
    • 通过这个字段实现开机启动:执行systemctl enable sshd.service命令时,sshd.service的一个链接文件,就会放在/etc/systemd/system目录下面的multi-user.target.wants子目录之中,假如系统默认的target就是 multi-user,开机进入到这个目标,就会启动 multi-user.target.wants 这个文件夹里面的服务
  • 相关命令

=> 查看系统默认的 target
systemctl get-default

=> 查看 multi-user.target 包含的所有服务
systemctl list-dependencies multi-user.target

=> 切换到另一个 target
sudo systemctl isolate shutdown.target
target配置文件
  • Requires字段:要求basic.target一起运行。
  • Conflicts字段:冲突字段。如果rescue.service或rescue.target正在运行,multi-user.target就不能运行,反之亦然。
  • After:表示multi-user.target在basic.target 、 rescue.service、 rescue.target之后启动,如果它们有启动的话。
  • AllowIsolate:允许使用systemctl isolate命令切换到multi-user.target。
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
  • 修改配置文件以后,需要重新加载配置文件,然后重新启动相关服务。
=> 重新加载配置文件
sudo systemctl daemon-reload

=> 重启相关服务
sudo systemctl restart ssh

 

三、服务防火墙管理(TCP Wrappers)

1、TCP Wrappers 基本使用

  • tcp wrapper是一种访问控制工具,类似于iptables可以作访问控制
  • tcp wrapper只能对基于tcp协议的服务作访问控制,但并不是所有基于tcp协议的服务都能实现用tcp wraper作访问控制, 服务是否支持tcpwrapper,具体要看是否依赖于库文件libwrap,通过这个命令就可以查看ldd /PATH/TO/PROGRAM|grep libwrap.so
  • tcp wrapper实现访问控制主要依靠两个文件,一个是/etc.hosts.allow文件,另一个是/etc/hosts.deny文件,这两个文件使用的时候先访问allow后访问deny,具体的工作原理如下
    Linux 基础篇(06)Linux 系统管理员_第3张图片

配置文件

  • 就是三个部分组成:(程序:客户端:选项)最后选项中的allow和deny可以省略
  • 配置文件中的特殊词汇
- ALL:代表全部的 program_name 或者是 IP 都接受的意思,例如 ALL: ALL: deny
- LOCAL:代表来自本机的意思,例如: ALL: LOCAL: allow
- UNKNOWN:代表不知道的 IP 或者是 domain 或者是服务时;
- KNOWN:代表为可解析的 IP, domain 等等信息时;

配置示例

  • 示例1:需求
只允许 140.116.0.0/255.255.0.0 与 203.71.39.0/255.255.255.0 这两个网段
和203.71.38.123 这个主机可以进入我们的 rsync 服务器;
此外,其他的 IP 全部都挡掉!
  • 示例1:配置
[root@www ~]# vim /etc/hosts.allow
rsync:  140.116.0.0/255.255.0.0
rsync:  203.71.39.0/255.255.255.0
rsync:  203.71.38.123
rsync:  LOCAL

[root@www ~]# vim /etc/hosts.deny
rsync: ALL  <==利用 ALL 配置让所有其他来源不可登陆
  • 示例2:需求
sshd服务不允许172.16.0.0/16,但允许172.16.1.3访问
  • 示例2:配置
/etc/hosts.deny
sshd : 172.16. EXCEPT 172.16.1.3

2、TCP Wrappers 实现额外操作

  • 除了 deny 和 allow,还支持更加细部的操作
    • spawn (action):可以利用后续接的 shell 来进行额外的工作,shell中可以使用%h (hostname), %a (address), %d (daemon)等变量
    • twist (action):立刻以后续的命令进行,且运行完后终止该次联机的要求 (DENY)

一个示例说明

  • rsync: 指的就是 rsync 这个服务的程序啰;
  • ALL: 指的是来源,这个范围指的当然是全部的所有来源啰
  • spawn 中第一个括号的作用是数据流汇整,作为mail的正文
  • twist 后面的动作会将 Warning 的字样传送到客户端主机的屏幕上,然后将该联机中断
[root@www ~]# vim /etc/hosts.deny
rsync : ALL: spawn (echo "security notice from host $(/bin/hostname)" ;\
			echo; /usr/sbin/safe_finger @%h ) | \
			/bin/mail -s "%d-%h security" root & \
			: twist ( /bin/echo -e "\n\nWARNING connection not allowed.\n\n" )

 

四、系统开启的服务

1、观察系统启动的服务

  • ps来观察整个系统上面的所有服务是比较妥当的
  • 观察有启动网络监听的服务使用 netstat 来查阅啦

2、配置服务的开机启动

centos7的开机启动过程

Linux 基础篇(06)Linux 系统管理员_第4张图片

配置服务开机启动
  • chkconfig是centos5的,centos7用systemctl来配置
  • 直接通过 systemctl enable xxxx 就可以设置开机自启了
  • 类图形接口管理
    • 直接命令行输入ntsysv就可以进入类图形接口来管理服务的开机启动
    • 这个类图形接口,好像是只有红帽系的 linux 才有

Linux日志文件

一、关于日志文件

  • 日志文件记录系统在什么时候由哪个程序做了什么样的行为时,发生了何种的事件等信息
  • 日志文件的重要性不言而喻,系统出现什么问题的时候,很多时候我们就会需要他来进行问题分析
  • 日志文件的权限通常是配置为仅有 root 能够读取而已

常见的日志文件

  • /var/log/cron
    记录和定时任务相关的信息,可以查看我们配置的定时任务是否真的按时执行
  • /var/log/dmesg
    记录系统在启动的时候核心侦测过程所产生的各项资讯
  • /var/log/lastlog
    可以记录系统上面所有的帐号最近一次登陆系统时的相关资讯,lastlog命令查询到的内容就是来自于这个文件
  • /var/log/maillog 或 /var/log/mail/*:
    主要是记录收发邮件所产生的信息啦
    SMTP 是发信所使用的通讯协议, POP3 则是收信使用的通讯协议。
    sendmail 与 dovecot 则分别是两套达成通讯协议的软件。
  • /var/log/messages
    这个文件相当的重要,几乎系统发生的错误信息 (或者是重要的资讯) 都会记录在这个文件中;
    如果系统发生莫名的错误时,这个文件是一定要查阅的登录文件之一。
  • /var/log/secure
    只要牵涉到需要输入帐号口令的软件,那么当登陆时 (不管登陆正确或错误) 都会被记录在此文件中
  • /var/log/wtmp, /var/log/faillog
    这两个文件可以记录正确登陆系统者的帐号资讯 (wtmp) 与错误登陆时所使用的帐号资讯 (faillog)
  • /var/log/httpd/, /var/log/news/, /var/log/samba/*:
    不同的网络服务会使用它们自己的登录文件来记载它们自己产生的各项信息

注意:在不同的发行版中,各个日志文件的名字可能不一定相同

记录管理日志的程序(服务)

  • syslogd:主要记录系统与网络等服务的信息
  • klogd:主要记录核心产生的各项资讯
  • logrotate:主要在进行日志文件的轮替

二、syslogd

1、日志文件格式

  • 每条信息均会记录的几个重要数据:
    • 事件发生的日期与时间;
    • 发生此事件的主机名称;
    • 启动此事件的服务名称
    • 该信息的实际数据内容。

在这里插入图片描述

2、syslog 的配置文件

  • centos7 里面记录日志的工作是由 rsyslogd这个服务来完成的,配置文件是 /etc/rsyslog.conf
  • 这个配置文件的作用就是将不同服务产生的日志分门别类放到不同的地方
  • 配置文件的内容通常包含服务名称、信息等级和记录位置,可以使用通配符
  • 邮件日志记录位置的那一栏最前的-代表日志先写入缓冲区,再写入日志文件
  • :omusrmsg:*代表以广播的方式通知所有的人
    Linux 基础篇(06)Linux 系统管理员_第5张图片
  • rsyslogd支持很多类型的服务,不同的程序通过调用不同类型的日志服务来完成日志的记录
    Linux 基础篇(06)Linux 系统管理员_第6张图片
信息等级

Linux 基础篇(06)Linux 系统管理员_第7张图片

  • 还有两个特殊的等级,那就是 debug(错误侦测等级) 与 none (不需登录等级) 两个,当我们想要作一些错误侦测,或者是忽略掉某些服务的资讯时, 就用这两个
  • 关于三个符号:. .= .!分别代表高于该等级(含)记录日志,等于这个等级进行日志记录、不等于该等级进行记录

3、日志文件的安全性配置

  • 一些黑客在攻击了你的系统之后可能会删除你的日志文件来抹除痕迹
  • 要防止日志文件被删除,可以使用隐藏属性的设置(lsattr、chattr)
  • 隐藏的属性设置为 i 的话,连root用户都无法删除,设置为 a 的话就只能添加,不能删除和修改
  • 但是还是要注意自己的 root 账号一定要保管好,不然什么都白搭,root 可以为所欲为
  • 有时候我们不小心通过 vim 修改了日志文件,这会导致日志文件不能继续记录,需要重启 rsyslog 这个服务才行
  • 设置隐藏权限为 a 可以避免上面的这个问题,但是会导致在进行日志文件的替换的时候无法移动的情况,所以我们平时使用不要去设置特殊权限了,不然会遇到很多麻烦

4、多主机日志文件集中管理

  • 很多台 linux 服务器的日志需要统一管理的话,就需要一台专门的日志文件服务器了,这样比较方便,不用逐一登录去查看
服务器的配置
  • 修改 syslogd 的启动配置档vim /etc/sysconfig/rsyslog,配置SYSLOGD_OPTIONS="-m 0 -r"
  • 重新启动与观察 syslogd 喔!顺利的话可以看到系统监听了 514 端口
/etc/init.d/syslog restart
netstat -lunp | grep syslog 
客户端的配置
vim /etc/syslog.conf
*.*       @192.168.1.100 => 下面的 IP 就是服务器的地址

 

三、日志文件轮替 (logrotate)

  • 这个 logrotate 是 Linux 系统中的一个定时任务,在 /etc/cron.daily 里面可以看到

1、logrotate配置

  • 两个配置文件:/etc/logrotate.conf 、/etc/logrotate.d/
  • 前者是默认的配置文件,后者是一个目录,里面是这对具体的服务的配置文件
  • 日志文件的替换的原理如图:
    Linux 基础篇(06)Linux 系统管理员_第8张图片

/etc/logrotate.conf 文件内容

# 底下的配置是 "logrotate 的默认配置值" 
weekly    <==默认每个礼拜对登录文件进行一次 rotate 的工作
rotate 4  <==保留几个登录文件呢?默认是保留四个!
create    <==由於登录文件被更名,因此创建一个新的来继续储存之意!
#compress <==被更动的登录文件是否需要压缩?如果登录文件太大则可考虑此参数启动

# 将 /etc/logrotate.d/ 这个目录中的所有文件都读进来运行 rotate 的工作!
include /etc/logrotate.d

# 这个是针对个别文件的配置
/var/log/wtmp {       <==仅针对 /var/log/wtmp 所配置的参数
    monthly           <==每个月一次,取代每周!
    minsize 1M        <==文件容量一定要超过 1M 后才进行 rotate (略过时间参数)
    create 0664 root utmp <==指定新建文件的权限与所属帐号/群组
    rotate 1          <==仅保留一个,亦即仅有 wtmp.1 保留而已。
}

/etc/logrotate.d/ 文件夹下面的文件

  • 解决关于前面提到的日志文件加隐藏权限 a 怎么进行日志更替的问题
  • sharedscripts 和 endscript 一定是成对的使用
  • prerotate 代表是在替换之前进行的动作
  • postrotate 代表在替换之后进行的动作
  • 里面命令除了处理 a 权限,其他的动作就是重启并重新加载 syslog 服务的意思
# vi /etc/logrotate.d/syslog

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler \
/var/log/boot.log /var/log/cron {
  sharedscripts
  prerotate
    /usr/bin/chattr -a /var/log/messages
  endscript
  sharedscripts
  postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
    /usr/bin/chattr +a /var/log/messages
  endscript
}

2、logrotate使用示范

需求

  • 创建 /var/log/admin.log 这个文件,将该文件加上 +a 这个隐藏标签,而且配置底下的相关资讯:
    • 登录文件轮替一个月进行一次;
    • 该登录文件若大於 10MB 时,则主动进行轮替,不需要考虑一个月的期限;
    • 保存五个备份文件;
    • 备份文件需要压缩

测试

  • 先创建 +a 这个属性啊!
[root@www ~]# chattr +a /var/log/admin.log
[root@www ~]# lsattr /var/log/admin.log
[root@www ~]# mv /var/log/admin.log /var/log/admin.log.1   ==>测试 a 是否起作用
  • 开始创建 logrotate 的配置档,添加一个文件在 /etc/logrotate.d 里面
[root@www ~]# vi /etc/logrotate.d/admin
/var/log/admin.log {
        monthly   <==每个月进行一次
        size=10M  <==文件容量大於 10M 则开始处置
        rotate 5  <==保留五个!
        compress  <==进行压缩工作!
        sharedscripts
        prerotate
                /usr/bin/chattr -a /var/log/admin.log
        endscript
        sharedscripts
        postrotate
                /usr/bin/killall -HUP syslogd
                /usr/bin/chattr +a /var/log/admin.log
        endscript
}
  • 测试一下强制 logrotate 与相关功能的资讯显示:???
[root@www ~]# logrotate -vf /etc/logrotate.d/admin
[root@www ~]# lsattr /var/log/admin.log*

四、分析日志文件logwatch

  • logwatch 这个分析工具会每天分析一次登录文件,并且将数据以 email 的格式寄送给 root
  • centos7 默认是没有 logwatch 这个工具的,需要自己手动安装一下,安装好后,直接使用 logwatch --detail low即可进行日志文件的分析
  • logwatch 还可以指定日志文件指定服务进行分析,mailto 的选项可以指定分析结果的发送给谁,如果需要每天执行的话,配置相应的定时任务就可以了

你可能感兴趣的:(Linux)