8.3.1 Linux服务管理

                                             8.3.1 Linux服务管理

8.1 systemd简介和特点

    systemd是Linux系统中最新的初始化系统(init),它的主要设计目标是克服sysvinit固有的缺点,提高

系统的启动速度。systemd和Ubuntu的upstart是竞争对手,预计会取代upstart。

    1.与sysvinit和LSB init script(初始化脚本)兼容

    systemd提供了与sysvinit和LSB INIT SCRIPT(初始化脚本)兼容的特性。系统中已经存在的服务和进程

无须修改,这降低了系统向systemd迁移的成本,使得systemd替代现有的初始化系统称为可能。


    2.具有更快的启动速度

    systemd 提供了比upstart更激进的并行启动能力,采用了socket/D-Bus activation等技术启动服务。

    为了减少系统的启动时间,system的目标是:

    。尽可能启动更少的进程

    。尽可能并行启动更多的进程。

    upstart 也试图实现这两个目标。upstart采用事件启动机制,服务可以暂不启动,当需要时才通过事件触发

其启动。这符合第一设计目标。此外,不相干的服务可以并行启动。这也实现了第二个目录。



8.1.1 systemd 提供了按需启动能力

    systemd可以提供按需启动能力,只有在某个服务被真正请求时才启动它。当该服务结束后,systemd可以关闭它,

等待下次需要时再次启动它。


8.1.2 systemd采用Linux的Cgroup特性跟踪和管理进程的生命周期

    systemd 利用了Linux内核特性即Cgroup来完成跟踪任务。当服务停止时,通过查询Cgroup,systemd可以确保找到

所有的相关进程,从而干净地停止服务。

    Cgroup主要用来实现系统资源配额管理。Cgroup提供了类似于文件系统的接口,使用方便。当进程创建子进程时,

子进程会继承父进程的Cgroup。因此无路服务如何启动新的子进程,所有的这些相关进程都会属于同一个Cgroup,systemd

只需要简单地便利指定的Cgroup,即可正确地找到所有的相关进程,将它们一一停止。


8.1.3 启动挂载点和自动挂载管理

    systemd兼容/etc/fstab文件,它还内建了自动挂载服务,无须另外安装autofs服务,可以直接使用systemd提供的自动

挂载管理能力来实现autofs的功能。


8.1.4 实现事务性依赖关系管理

    systemd 维护一个“事务一致性”的概念,保证所有相关的服务都可以正常启动而不会出现相互依赖,以至于死锁的情况。


8.1.5 能够对系统进行快照和恢复

    systemd 支持按需启动,因此系统的运行状态是动态变化的,人们无法准确地知道系统当前运行了哪些服务。systemd快照

提供了一种将当前系统运行状态保存并恢复的能力。

    systemd提供快照功能,不过不太成熟,需谨慎使用。


8.1.6 日志服务

    systemd 自带了日志服务journald,改日志服务的设计初衷是客服现有的syslog服务的缺点:

    。syslog 不安全,消息的内容无法验证。

    。数据没有严格的格式,非常随意。

    systemd journald 用二进制格式保存所有的日志消息,用户使用journalctl命令来查看日志信息,无须自己编写复杂、脆弱

的字符串分析处理程序。

    sytemd journald的优点如下:

    。简单性

    。零维护

    。移植性

    。性能

    。最小资源占用

    。统一化

    。扩展性

    。安全性


8.1.7 unit的概念

    1.类型

    systemd 开启和监督整个系统是基于unit的概念。unit是由一个与配置文件对应的名字和类型组成的。

    unit有以下几种类型:

    。service

    。socket

    。device

    。mount

    。automount 

    。target 

    。timer:定义器配置单元用来定时触发用户定义的操作,取代了atd、crond等传统的定时服务。

    。snapshot :快照是一组配置单元,它保存了系统当前的运行状态。

    2.依赖关系

    不能用“套接字激活”(socket activation)、D-Bus activation和autofs三大方法来解除依赖。

    systemd用配置单元定义文件中的关键字来描述配置单元之间的依赖关系。

    配置单元之间的依赖关系有两种:requireds是强制依赖,wants则是弱依赖,systemd将去掉wants关键字

指定的依赖看看是否能打破循环,如果无法修复,systemd会报错。systemd能够自动检测和修复这类配置错误,

极大地减轻了管理员的排错负担。


    3.target和运行级别

    systemd用目标(target)替代了运行级别的概念,提供了更大的灵活性,不然可以继承一个已有的目标,并

添加其它服务来创建自己的目标。

                                   sysvinit运行级别和systemd 目标的对应关系
    --------------------------------------------------------------------------------------------------------------------------
       sysvinit运行级别                    systemd 目标                          备注
    --------------------------------------------------------------------------------------------------------------------------
             0                runlevel0.target,poweroff.target      关闭系统
    --------------------------------------------------------------------------------------------------------------------------
             1,s,single       runlevel1.target, rescue.target        单用户模式
    --------------------------------------------------------------------------------------------------------------------------
             2,4              runlevel2.target,runlevel4.target      用户定义/域特定运行级别,默认等同于3
    --------------------------------------------------------------------------------------------------------------------------
             3                runlevel3.target,multi-user.target     多用户,非图形化。用户可以通过多个控制台或网络登录
    --------------------------------------------------------------------------------------------------------------------------
             5                runlevel5.target.graphical.target      多用户,图形化。通常为所有运行级别3的服务外加图形化登录
    --------------------------------------------------------------------------------------------------------------------------
             6                runlevel6.target,reboot.target         重启
    --------------------------------------------------------------------------------------------------------------------------
             emergency        emergency.target                       急救模式(Emergency shell)
    ----------------------------------------------------------------------------------------------
 

8.2 systemd的使用

8.2.1 unit文件的编写

    如何让服务能够被systemd管理,需要主要以下一些要点:

    。后台服务进程代码不需要执行两次派生来实现后台进程,只需要实现服务本身的主循环即可。

    。不要调用setsid(),交给systemd处理。

    。不再需要维护pid文件。

    。systemd提供了日志功能,服务进程只需要输出到stderr即可,无须使用syslog

    。处理信号SIGTERM的唯一正确作用就是停止当前服务,不要做其它的事情。

    。SIGHUB信号的作用是重启服务。

    。需要套接字的服务,不要自己创建套接字,让systemd传入套接字。

    。使用sd_notify()函数通知systemd服务自己的状态发生改变。

    
    配置单元文件,整个文件分3个部分:[Unit] [Service] [Install]

    [Unit]: 记录unit文件的通用信息。

    [Service]:记录服务信息。

    [Install]: 安装信息。


    Unit主要包含以下内容:

    。Description:对本服务的描述

    。Before、After:定义启动顺序,Before=xxx.service,代表本服务在xxx.service启动之前启动;

After=xxx.service,代表本服务在xxx.service之后启动。

    。Requires:这个单元启动了,那么它“需要”的单元也会被启动。建议使用Wants标记,可以使用

多个Requires。

    。RequiresOverridable:跟Requires很像,但是如果这个服务是由用户手动启动的,那么RequiresOveridable

后面的服务即使启动不成功也不报错。

    。Requisite:强势版本的Requires。如果这里需要的服务启动不成功,systemd会报错。

    。Wants:推荐使用。本单元启动了,那么它“想要”的单元也会被启动。但是启动不成功,对本单元没有影响。

    。Conflicts: 一个单元的启动会停止与它“冲突”的单元,反之亦然。

   
    Service主要包含以下内容:

    。Type:服务类型

      * simple

      * forking

      * oneshot 

      * notify 

    。ExecStart

    。ExecStartPre、ExecStartPost:ExecStart执行前后所调用的命令。

    。ExecStop

    。Restart

    。SuccessExitStatus

    Install主要包含以下内容:

    。WantedBy:在何种情况下,服务被启用。

    。Alias:别名

8.2.2 创建自己的systemd服务

    (1)编写属于自己的unit文件,命令为"my-demo.service"。整个文件如下:

[Unit]
Description=My-demo Service
[Service]
Type=oneshot
ExecStart=/bin/bash /root/test.sh
StandardOutput=syslog
StandardError=inherit

[Install]
WantedBy=multi-user.target

    (2)将上面的文件拷贝到/usr/lib/systemd/system/*目录下

    (3)编写unit文件中ExecStart=/bin/bash /root/test.sh所定义的test.sh文件,将其放在

定义的目录当中,此文件是服务的执行主题。文件内容乳腺癌:

#!/bin/bash

date >> /tmp/date

    (4)将my-demo.service注册到系统当中,执行命令

    -->systemctl enable my-demo.service 

    输出如下:
    
    ln -s '/usr/lib/sytemd/system/my-demo.service' '/etc/systemd/system/multi-user.target.wants/my-demo.service'

    输出结果表明,注册过程实际上就是将服务链接到/etc/systemd/system目录下。

    至此,服务已经创建完成,重新启动系统,会返现/tmp/date文件已经生成,服务在开机是启动成功。




8.3 系统管理员需要掌握的命令

8.3.1 sysvinit和systemd的命令对比列表

                                        表8-2 sysvinit和systemd服务命令对比

    -------------------------------------------------------------------------------------------------------------------------- 
       sysvinit命令            systemd命令                                            备注
    -------------------------------------------------------------------------------------------------------------------------- 
     service sshd start           systemctl start sshd.service                启动一个服务
    -------------------------------------------------------------------------------------------------------------------------- 
     service sshd stop            systemctl stop sshd.service                 停止一个服务
    -------------------------------------------------------------------------------------------------------------------------- 
     service sshd restart         systemctl restart.sshd.service              停止并重启一个服务
    -------------------------------------------------------------------------------------------------------------------------- 
     service sshd reload          systemctl reload sshd.service               当支持时,重新加装载配置文件而不终端等待操作
    -------------------------------------------------------------------------------------------------------------------------- 
     service  sshd condrestart    systemctl condrestart sshd.service          如果服务正在运行,那么重启它
    -------------------------------------------------------------------------------------------------------------------------- 
     service  sshd  status        systemctl status sshd.service               汇报服务是否正在运行
    -------------------------------------------------------------------------------------------------------------------------- 
     ls /etc/rc.d/init.d/         systemctl list-unit-files --type=service   
 
                                  ls /lib/systemd/system/*.service             列出可以启动或停止的服务列表

                                  /etc/systemd/system/*.service 
    -------------------------------------------------------------------------------------------------------------------------- 
    chkconfig sshd  on           systemctl enable sshd.service                在下次启动时或满足其它触发条件时设置服务为启用
    -------------------------------------------------------------------------------------------------------------------------- 
    chkconfig sshd off           systemctl disable sshd.service               在下次启动时或满足其它触发条件时设置服务为禁用            
    -------------------------------------------------------------------------------------------------------------------------- 
    chkconfig sshd               systemctl is-enabled sshd.service            用来检查一个服务在当前环境下被配置为启用还是禁用。
    -------------------------------------------------------------------------------------------------------------------------- 
    chkconfig --list             systemctl list-unit-files --type=service (推荐)

                                 ls /etc/systemd/system/*.wants/                输出在各个运行级别下服务的启用或禁用情况。
    -------------------------------------------------------------------------------------------------------------------------- 
    chkconfig sshd --list        ls /etc/systemd/system/*.wants/sshd.service    用来列出该服务在哪些运行级别下启用或禁用

                                 systemctl list-unit-files |grep sshd.service
    --------------------------------------------------------------------------------------------------------------------------  
    chkconfig sshd --add         systemctl daemon-reload                        当创建新服务文件或者变更设置时使用
    -------------------------------------------------------------------------------------------------------------------------- 



    sysvinit和systemd改变运行级别命令:

                                              表8-3 sysvinit和systemd改变运行级别命令对比
    ------------------------------------------------------------------------------------------------------------------------------------
           sysvinit命令                                      systemd命令                                 备注
    ------------------------------------------------------------------------------------------------------------------------------------
            telinit 3                              systemctl isolate multi-user.target 
                                                   或者                                                        改变至多用户运行级别
                                                   systemctl isolate runlevel3.target OR telinit3  
    ------------------------------------------------------------------------------------------------------------------------------------
     sed s/^id:.*:initdefault:/id:3:initdefault:/   ln -sf /lib/systemd/system/multi-user.target /etc/systemd  设置在下一次启动时使用多
    
                                                    system/default.target                                      用户运行级别
    -------------------------------------------------------------------------------------------------------------------------------------


     sysvinit和systemd电源管理命令

                                              表8-4 sysvinit和systemd电源管理命令对比
    ------------------------------------------------------------------------------------------------------------------------------------
          systemd命令                                      sysvinit命令                                        操作
    ------------------------------------------------------------------------------------------------------------------------------------
       systemctl reboot                     reboot                                                            重启机器                              
    ------------------------------------------------------------------------------------------------------------------------------------
       systemctl poweroff                   halt -p                                                            关机
    ------------------------------------------------------------------------------------------------------------------------------------
       systemctl suspend                    echo standby > /sys/power/state                                    待机
    ------------------------------------------------------------------------------------------------------------------------------------
                                            echo platform > /sys/power/disk; echo disk > /sys/power/state

       systemctl hibernate                  或者                                                               休眠

                                            echo shutdown > /sys/power/disk; echo disk > /sys/power/state          
    ------------------------------------------------------------------------------------------------------------------------------------
       systemctl hybrid-sleep                                                                                  同时休眠模式(同时休眠到硬盘并待机
    ------------------------------------------------------------------------------------------------------------------------------------


8.3.2 systemctl 命令实例

    1. systemctl 的基本用法

    。systemctl ---列出所有已加载的单元及其状态(单元是任务/服务的术语)

    。systemctl list-units ----列出所有单元

    。systemctl start [NAME...] ---启动(激活)一个或多个单元

    。systemctl stop  [NAME...] ---停止(停用)一个或多个单元

    。systemctl disable [NAME...] --禁用一个或多个单元文件

    。systemctl list-unit-files --显示所有已安装的单元文件及其状态

    。systemctl ---failed ---显示启动过程中哪些单元出现故障

    。systemctl --type=mount --类型过滤器;类型可能是:服务、挂载点、设备、套接字和启动目标

    。systemctl enable debug-shell.service ---启动TTY9上的shell,用于调试。

    如果想更方便地处理单元,还有程序包systemd-ui,它可以由用户用systemadm命令来启动

    切换运行级别、重启和关闭也由systemctl来处理:

    。systemctl isolate graphical.target  ---切换到运行级别5,X服务器唉运行级别5运行。

    。systemctl isolate multi-user.target  ---切换到运行级别3和TTY,不带X图形界面

    。systemctl reboot  --关闭和重启系统

    。systemctl poweroff --关闭系统


    2. 实例
 
    显示所有已安装的服务

    -->systemctl list-unit-files -t service -all  #大概236个

    整个输出界面包括5列;

    。UNIT---显示服务名称

    。LOAD---显示该服务是否已经加载。如果发现没有,则显示为红色

    。ACTIVE--显示高级单元是否已经激活,如果没有激活,则显示为红色。

    。SUB---显示低级单元是否已经激活,如果没有激活,则显示为红色。

    。DESCRIPTION---显示服务说明。

    显示httpd服务的详细信息:

    -->systemctl status httpd.service 

    。启动一个服务

    格式:systemctl enable service_name.service 

    例:systemctl enable httpd.service


    。停止一个服务

    格式:systemctl disable service_name.service 

    例:system disable httpd.service 

    显示一个服务的相互依赖情况

    -->systemctl list-dependencies nfs-server.service 


    。在开机时启用一个服务:

    -->systemctl enable foo.service 

    。在开机时禁用一个服务

    -->systemctl disable foo.service 

    。检查一个服务是否已开机启用

    -->systemctl is-enabled foo.service; etho $?

    -->systemctl is-enabled sshd.service; echo $?
enabled
0

    0 表示已开机启用,1表示没有开机启用。在Fedora 17中,除了返回值外,相应的"enable"或"disable"

也会显示到标准输出上。

    修改了httpd.service后,通过以下命令就能让系统使用新的设置:

    -->systemctl daemon-reload

    -->systemctl restart httpd.service 

    。检查一个服务的运行情况:

    -->systemctl  status crond.service 

crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled)
   Active: active (running) since 日 2015-12-20 18:58:44 CST; 5h 43min ago
 Main PID: 1487 (crond)
   CGroup: /system.slice/crond.service
           └─1487 /usr/sbin/crond -n

12月 20 18:58:44 node1 systemd[1]: Started Command Scheduler.
12月 20 18:58:45 node1 crond[1487]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 87% if used.)
12月 20 18:58:47 node1 crond[1487]: (CRON) INFO (running with inotify support)


    。检查资源使用情况,包括CPU、内存、IO

    -->systemd-cgtop

                                                                                     Tasks   %CPU   Memory  Input/s Output/s
.....................................
/                                                                                              312    1.3   636.5M        -        -
/system.slice/ModemManager.service                                                               1      -        -        -        -
/system.slice/NetworkManager.service                                                             2      -        -        -        -
/system.slice/abrt-oops.service                                                                  1      -        -        -        -
/system.slice/abrt-xorg.service                                                                  1      -        -        -        -
/system.slice/abrtd.service                                                                      1      -        -        -        -
/system.slice/accounts-daemon.service                                                            1      -        -        -        -
/system.slice/alsa-state.service                                                                 1      -        -        -        -
/system.slice/atd.service                                                                        1      -        -        -        -
/system.slice/auditd.service                                                                     3      -        -        -        -
/system.slice/avahi-daemon.service                                                               2      -        -        -        -
/system.slice/bluetooth.service                                                                  1      -        -        -        -
/system.slice/chronyd.service                                                                    1      -        -        -        -
/system.slice/colord.service                                                                     1      -        -        -        -
/system.slice/crond.service                                                                      1      -        -        -        -
/system.slice/dbus.service                                                                       1      -        -        -        -
/system.slice/firewalld.service                                                                  1      -        -        -        -
/system.slice/gdm.service                                                                        3      -        -        -        -
/system.slice/ksmtuned.service                                                                   2      -        -        -        -

    说明这是一个新的类似于top的程序管理工具,它会显示每个控制组群中服务的资源使用情况,而非每个程序,这使

我们能更轻松看出哪个服务使用了多少内存、CPU等。

    以树形递归形式显示选中的Linux控制组群结构层次:

    -->systemd-cgls
 
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 24
├─user.slice
│ ├─user-0.slice
│ │ └─session-12.scope
│ │   ├─ 4550 sshd: root@pts/0    
│ │   ├─ 4554 -bash
│ │   ├─10441 systemd-cgls
│ │   └─10442 systemd-cgls
│ └─user-42.slice
│   └─session-c1.scope
│     ├─2609 gdm-session-worker [pam/gdm-launch-environment]
│     ├─2612 /usr/bin/gnome-session --autostart /usr/share/gdm/greeter/autostart
│     ├─2615 /usr/bin/dbus-launch --exit-with-session /usr/bin/gnome-session --autostart /usr/share/gdm/greeter/autostart
│     ├─2624 /bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session
│     ├─2627 /usr/libexec/at-spi-bus-launcher
│     ├─2631 /bin/dbus-daemon --config-file=/etc/at-spi2/accessibility.conf --nofork --print-address 3
│     ├─2635 /usr/libexec/at-spi2-registryd --use-gnome-session
│     ├─2642 /usr/libexec/gnome-settings-daemon
│     ├─2708 gnome-shell --mode=gdm
│     ├─2718 /usr/bin/pulseaudio --start --log-target=syslog
│     ├─2762 /usr/libexec/dconf-service
│     ├─2775 /usr/bin/ibus-daemon --replace --xim --panel disable

......................................................................
  │ └─724 /usr/sbin/rsyslogd -n
  ├─postfix.service
  │ ├─2588 /usr/libexec/postfix/master -w
  │ ├─2590 qmgr -l -t unix -u
  │ └─9137 pickup -l -t unix -u
  ├─rngd.service
  │ └─723 /sbin/rngd -f
  ├─crond.service
  │ └─1487 /usr/sbin/crond -n
  ├─dbus.service
  │ └─755 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
  └─firewalld.service
    └─721 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid


    。显示服务之间的依赖关系

    -->systemctl list-dependencies

default.target
├─accounts-daemon.service
├─gdm.service
├─network.service
├─rhnsd.service
├─rtkit-daemon.service
├─systemd-readahead-collect.service
├─systemd-readahead-replay.service
├─systemd-update-utmp-runlevel.service
└─multi-user.target
  ├─abrt-ccpp.service
  ├─abrt-oops.service
  ├─abrt-vmcore.service
  ├─abrt-xorg.service
  ├─abrtd.service
  ├─atd.service
  ├─auditd.service
  ├─avahi-daemon.service
  ├─brandbot.path
  ├─chronyd.service
  ├─crond.service
  ├─cups.path


    另外,还可以使用systemd高效地分析和优化引导过程,包括如下几个常用命令:

    。显示内核和用户空间上一次引导花了多长时间

    -->systemd-analyze

Startup finished in 1.259s (kernel) + 13.993s (initrd) + 1min 26.481s (userspace) = 1min 41.735s

   
    。显示每个服务启动用来多长时间方面的详细信息:

    -->systemd-analyze blame

         27.695s firewalld.service
         23.261s tuned.service
         16.454s ModemManager.service
         15.636s plymouth-quit-wait.service
         15.528s accounts-daemon.service
         12.789s bluetooth.service
         12.530s avahi-daemon.service
         11.612s systemd-logind.service
         10.800s rtkit-daemon.service
          8.783s libvirtd.service
          8.038s postfix.service
          7.915s NetworkManager.service
          7.193s systemd-udev-settle.service
          5.461s systemd-fsck-root.service
          5.404s rsyslog.service
          5.066s chronyd.service
          4.730s sysstat.service
          4.566s rhel-loadmodules.service
          4.454s rhel-dmesg.service
          3.568s polkit.service
          3.536s lvm2-monitor.service
          3.416s kdump.service
          3.072s abrt-ccpp.service
lines 2-23


    。创建一个用图表展示启动过程的SVG文件:

    -->systemd-analyze plot > plog.svg

    -->cat plog.svg

..............................................................
 <text class="left" x="10176.162" y="3114.000">systemd-update-utmp-runlevel.service (23ms)</text>
  <rect class="activating" x="0.000" y="3140.000" width="30.000" height="19.000" />
  <text class="left" x="45.000" y="3154.000">Activating</text>
  <rect class="active" x="0.000" y="3160.000" width="30.000" height="19.000" />
  <text class="left" x="45.000" y="3174.000">Active</text>
  <rect class="deactivating" x="0.000" y="3180.000" width="30.000" height="19.000" />
  <text class="left" x="45.000" y="3194.000">Deactivating</text>
  <rect class="generators" x="0.000" y="3200.000" width="30.000" height="19.000" />
  <text class="left" x="45.000" y="3214.000">Generators</text>
  <rect class="unitsload" x="0.000" y="3220.000" width="30.000" height="19.000" />
  <text class="left" x="45.000" y="3234.000">Loading unit files</text>
</g>


    。杀死一个服务进程:

    -->systemctl kill httpd


    。输出运行失败的服务

    -->systemctl --failed 


UNIT          LOAD   ACTIVE SUB    DESCRIPTION
kdump.service loaded failed failed Crash recovery kernel arming
rhnsd.service loaded failed failed LSB: Starts the Spacewalk Daemon

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

2 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.


    。使用mask不再加载服务单元或者重新加载服务
 
    
  不再加载防火墙服务:

  -->systemctl mask firewalld.service 

ln -s '/dev/null' '/etc/systemd/system/firewalld.service'

    重新加载防火墙服务

   -->systemctl unmask firealld.service 


8.3.3 其它设置

   1.设置时区

   。显示时区列表:

  -->timedatectl list-timezones

Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
Africa/Bissau
Africa/Blantyre
Africa/Brazzaville
Africa/Bujumbura
Africa/Cairo
Africa/Casablanca
Africa/Ceuta
Africa/Conakry
Africa/Dakar
Africa/Dar_es_Salaam
Africa/Djibouti
Africa/Douala
Africa/El_Aaiun
Africa/Freetown
lines 1-22

   。设置当前时区:

   -->timedatectl set-timezone Asia/Shanghai

   。设置当前的年、月、日

   -->timedatectl set-time YYYY-MM-DD

   例如:

   -->timedatectl set-time 2015:12:21

   设置当前的时、分、秒

   -->timedatectl set-time HH:MM:SS

   例如:

   -->timedatectl set-time 11:22:33

   将硬件时钟配置为地方时:

   -->timedatectl set-local-rtc true

   重新调整为UTC:

   -->timedatectl set-local-rtc false 


   2.修改主机名称

   临时修改(重启后恢复原来的主机名称)

   -->hostname dlp.service.world

   永久修改:

   -->hostnamectl set-hostname dlp.server.world

   查看修改结果

   -->hostnamectl 

Static hostname: dlp.server.world
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 3f338abcf70e4660b5db9d480fcdf3cb
           Boot ID: c48169ec583942aa8e56cc29eaa76999
    Virtualization: vmware
  Operating System: Red Hat Enterprise Linux Server 7.1 (Maipo)
       CPE OS Name: cpe:/o:redhat:enterprise_linux:7.1:GA:server
            Kernel: Linux 3.10.0-229.el7.x86_64
      Architecture: x86_64


   3.本地化设置(locale)

    。显示当前的设置:

    -->localectl status

   System Locale: LANG=zh_CN.UTF-8
       VC Keymap: cn
      X11 Layout: cn



    。显示所有设置列表
 
    -->localectl list-locales

aa_DJ
aa_DJ.iso88591
aa_DJ.utf8
aa_ER
aa_ER.utf8
aa_ER.utf8@saaho
aa_ER@saaho
aa_ET
aa_ET.utf8
af_ZA
af_ZA.iso88591
af_ZA.utf8
am_ET
am_ET.utf8
an_ES
an_ES.iso885915
an_ES.utf8
ar_AE
ar_AE.iso88596
ar_AE.utf8
ar_BH
ar_BH.iso88596
lines 1-22


    系统默认locale记录在/etc/locale.conf文件中

    通过如下命令配置为中文:

    -->localectl set-locale LANG="zh_CN.utf8"

   4.设置键盘布局

   。显示所有的键盘布局列表

   -->localectl list-keymaps

ANSI-dvorak
amiga-de
amiga-us
applkey
at
at-mac
at-nodeadkeys
at-sundeadkeys
atari-de
atari-se
atari-uk-falcon
atari-us
az
azerty
ba
ba-alternatequotes
ba-unicode
ba-unicodeus
ba-us
backspace
bashkir
be
lines 1-22


    。设置自己要使用的键盘布局

    -->localectl set-keymap en_GB

    。设置X11的键盘布局

    -->localectl set-x11-keymap en_GB


8.3.4 图形化服务管理工具

   systemd有一个图形前端systemdadm,需要自己安装:

   -->rpm -ivh systemd-ui-2-2.fc20.x86_64.rpm


8.4 旧版本遗留的服务工具

8.4.1 chkconfig 

    用来激活和解除服务,“chkconfig-list”命令用来显示系统服务列表,以及这些服务在运行

级别0~6中已被启动(on)还是停止(off)。chkconfig还能用来设置某一服务在某指定运行级别内被

启动还是停止。

    chkconfig [--add] [--del] [--list] [系统服务]

    chkconfig [--level <等级代号>][系统服务] [on/off/reset]

    主要参数如下:

    --add:增加所指定的系统服务。

    --del:删除所指定的系统服务

    --level<等级代号>

    。查看服务列表的命令:

    -->chkconfig --list

注意:该输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。 
      如果您想列出 systemd 服务,请执行 'systemctl list-unit-files'。
      欲查看对特定 target 启用的服务请执行
      'systemctl list-dependencies [target]'。

netconsole     	0:关	1:关	2:关	3:关	4:关	5:关	6:关
network        	0:关	1:关	2:开	3:开	4:开	5:开	6:关
rhnsd          	0:关	1:关	2:开	3:开	4:开	5:开	6:关

    。列出systemd服务:

    -->systemctl list-unit-files

UNIT FILE                                   STATE   
proc-sys-fs-binfmt_misc.automount           static  
dev-hugepages.mount                         static  
dev-mqueue.mount                            static  
proc-fs-nfsd.mount                          static  
proc-sys-fs-binfmt_misc.mount               static  
sys-fs-fuse-connections.mount               static  
sys-kernel-config.mount                     static  
sys-kernel-debug.mount                      static  
tmp.mount                                   disabled
var-lib-nfs-rpc_pipefs.mount                static  
brandbot.path                               disabled
cups.path                                   enabled 
systemd-ask-password-console.path           static  
systemd-ask-password-plymouth.path          static  
systemd-ask-password-wall.path              static  
session-1.scope                             static  
session-3.scope                             static  
abrt-ccpp.service                           enabled 
abrt-oops.service                           enabled 
abrt-pstoreoops.service                     disabled
abrt-vmcore.service                         enabled 


    。对特定target启用的服务:

    -->systemctl list-dependencies iprinit

iprinit.service
├─system.slice
└─basic.target
  ├─alsa-restore.service
  ├─alsa-state.service
  ├─firewalld.service
  ├─microcode.service
  ├─rhel-autorelabel-mark.service
  ├─rhel-autorelabel.service
  ├─rhel-configure.service
  ├─rhel-dmesg.service
  ├─rhel-loadmodules.service
  ├─paths.target
  ├─slices.target
  │ ├─-.slice
  │ └─system.slice
  ├─sockets.target
  │ ├─avahi-daemon.socket
  │ ├─cups.socket
  │ ├─dbus.socket
  │ ├─dm-event.socket
  │ ├─iscsid.socket


    简单介绍一下这几个服务:

    iprdump: IBM RAID卡启动守护进程

    iprinit: IBM RAID卡初始化守护进程

    iprupdate: IBM RAID卡升级守护进程

    netconsole:初始化网络控制台日志

    network: 激活/关闭启动时的各个网络接口守护进程。

    pmcd:配置和控制pmcd

    pmie:配置和控制pmie

    pmlogger:配置和控制pmloger

    pmmgr:配置和控制pmmgr

    pmproxy:配置和控制pmproxy

    pmwebd:配置和控制pmwebd



    。关闭netconsole服务的命令

    -->chkconfig netconsole off

8.4.2 ntsysv

   ntsysv工具为启动或停止服务提供了简单的界面。用户可以使用ntsysv来启动或关闭由

xinetd管理的服务,还可以使用ntsysv来配置运行级别。

    例:ntsysv --level 345  命令配置运行级别3、4和5


8.4.3 xinetd

    1.什么是xinetd
 
    xinetd (Extended Internet Datmon)是新一代的网络守护进程服务程序,又名超级Internet服务器,

经常用来管理多种轻量级Internet服务。

    2.xinetd的特色

    (1)强大的存取控制功能

    (2)有效防止Dos攻击

    (3)强大的日志功能

    (4)转向功能

    (5)转向功能

    (6)支持IPv6

    (7)xinetd的缺点:对RPC的支持不稳定,但是可以启动protmap,使它与xinetd共存来解决这个问题。

    3.使用xinetd启动守护进程

    4.解读/etc/xinetd.conf 和 /etc/xinetd.d/*

   (1)/etc/xinetd.conf

    如果没有这个文件,则安装:

    -->yum install xinetd -y

    -->cat /etc/xinetd.conf

efaults
{
# The next two items are intended to be a quick access place to
# temporarily enable or disable services.
#
#	enabled		=
#	disabled	=

# Define general logging characteristics.
	log_type	= SYSLOG daemon info 
	log_on_failure	= HOST
	log_on_success	= PID HOST DURATION EXIT

# Define access restriction defaults
#
#	no_access	=
#	only_from	=
#	max_load	= 0
	cps		= 50 10
	instances	= 50
	per_source	= 10

# Address and networking defaults
#
#	bind		=
#	mdns		= yes
	v6only		= no

# setup environmental attributes
#
#	passenv		=
	groups		= yes
	umask		= 002

# Generally, banners are not used. This sets up their global defaults
#
#	banner		=
#	banner_fail	=
#	banner_success	=
}

includedir /etc/xinetd.d


    参数解释:

    。instances=50:表示最大连接进程数为50个

    。log_type=SYSLOG:表示使用syslog进行服务登记

    。log_on_success=PID HOST: 表示设置成功后记录客户机IP地址的进程ID

    。log_on_failure=HOST: 表示设置失败后记录客户机IP地址

    。cps=5010:表示每秒50个入站连接,如果超过限制,则等待10秒。主要用于对付拒绝服务攻击。

    。includedir /etc/xinetd.d: 告诉xinetd要包含的文件或目录是/etc/xinetd.d
  
        * v6only=no:表示不只使用IPv6

        * per_source=10:可以连接Linux的终端数是10

        * umask=002: 设置服务所继承的umask。参数值应该是一个八进制数字。

        * groups=yes: 设置进程GID


    (2)/etc/xinetd.d/*

     以/etc/xinetd.d/中的一个文件(time-stream)为例

    -->cat /etc/xinetd.d/time-stream 

# This is the configuration for the tcp/stream time service.

service time
{
# This is for quick on or off of the service
	disable		= yes

# The next attributes are mandatory for all services
	id		= time-stream
	type		= INTERNAL
	wait		= no
	socket_type	= stream

..............................................

    。disable=yes;表示禁用这个服务

    。socket_type=stream:表示服务的数据包类型为stream 

    。wait=no:表示不需要等待,即服务将以多线程的方式运行。

    。user=root: 表示执行此服务进程的用户是root

    。server=/usr/bin/rsync: 表示启动脚本的位置。

    。log_on_failure+=USERID;表示设置失败时,UID添加到系统登记表中。


    5.配置实例tftp

    -->yum install xinetd tftp-server -y

    -->vim /etc/xinetd.d/tftp 

        disable                 = no   #修改为no





8.4.4 TCP_Wrappers

    1.TCP_Wrappers简介

    TCP_Wrappers是一个应用层的访问控制程序。tcpd检查收到的网络连接请求并将其与配置文件做

比较来决定是否允许其通过。若连接被允许,将运行真实的服务程序。若不允许,将丢弃此请求连接的数据包。

    TCP_Wrappers的守护进程是tcpd,一把tcpd是默认安装的


    2.访问控制配置文件和访问控制规则

    TCP_Wrappers使用/etc/hosts.allow和/etc/hosts.deny两个配置文件实现访问控制。

    。/etc/hosts.allow 是一个许可表

    。/etc/hosts.deny 是一个拒绝表

    访问控制规则如下:

    (1)tcp查找 /etc/hosts.allow 和/etc/hosts.deny,若没有这两个配置文件,或两个配置文件内容为空,则

允许所有的访问。

    (2)tcpd若发现这两个文件,则首先读取/etc/hosts.allow,然后再读取/etc/hosts.deny,一旦tcpd在查询中

发现主机与服务相匹配就会终止。

     。若在/etc/hosts.allow 中发现主机与服务相匹配,则允许访问并终止规则查询。

     。若在/ec/hosts.deny 中发现主机与服务相匹配,则禁止访问并终止规则查询。
 
    (3)若在两个文件总均未查找到匹配的项目,则允许访问控制配置的基本语法。


    3./etc/hosts.allow和/etc/hosts.deny的基本语法
    
    (1)以“#”开头的行为注释行

    (2)可以在行中使用“\”作为续行符

    (3)其它的规则行均使用如下语法:


     daemon_list:client_list[:shell_command]

     。daemon_list:用逗号间隔的服务列表

       * ALL表示所有的服务

       * daemon@host限定某网络接口的服务,用于多宿主机。

     。client_list:用逗号间隔的主机表

       * ALL表示所有的主机

       * 使用IP地址,如12.23.34.45

       * 使用主机名,如http://www.proxyserve.net

       * 使用域名,如abc.com

       * 使用IP地址段,如12.23

       * 使用CIDR,如192.168.0.0/22

       * 使用client@host,如osmond@www.abc.com

     。shell_command:执行shell命令,为可选项

       在daemon_list和client_list中还可以使用EXCEPT操作符,语法为:list_1EXCEPTlist_2

     例:

     ALLEXCEPTin.ftpd 表示除了in.ftpd之外的所有服务。

     foobar.edu EXCEPT terminalserver.foobar.edu 表示foobar.edu 域中除了terminalserver.foobar.edu

之外的所有主机。

    4.访问控制配置文件的扩展语法

    /etc/hosts.allow和/etc/hosts.deny的扩展语法是:

    daemon_list : client_list : option: option...


    其中:daemon_list与client_list的语法和基本语法一致。

    常用扩展选项:

    。deny:拒绝被请求的服务,该选项必须出现在规则的结尾处。

    。spawnshell_command: 以子进程执行shell命令。

    。twistshell_command: 执行shell命令,而不是被请求的服务

    。setenvnamevalue: 设置执行被请求的服务时的环境变量。

    扩展语法支持twist选项:

    in.ftpd : ALL  : twist echo 421 FTP not allowed from %h :deny

    原本tcpd在接收到FTP服务请求时启动in.ftpd,但由于此处使用了twist选项,因此反而执行echo 命令来显示

拒绝信息。由于扩展语法支持deny选项,因此使用扩展语法时只需配置/etc/hosts.allow 一个文件即可......
博主

让学习成为习惯,坚持-共享-开源-自由! 成功者决不放弃,放弃者绝不成功!

相关推荐

嗨、骚年、快来消灭0回复。