系统为了某些功能必须提供一些服务, 这个服务就叫做service
service的提供总需要进程的运行, 实现这个service的程序就叫做daemon(后台程序)
1. daemon的主要分类
-
stand alone (独立进程)
1.自行启动, 不必通过其他机制的管理
2.启动并加载到内存后就常驻
优: 响应时间快, 如WWW的daemon (httpd), FTP的daemon (vsftpd)
-
super daemon (总管进程)
通过一个统一的daemon来负责唤起服务
特点: 当没有请求时, 服务均未启动, 当有来自客户端的请求时, super daemon唤起对应的服务, 请求结束, 这个服务也会关闭并释放系统资源
优: (1) 安全管控 (2) 不占资源
-
multi-threaded (多线程)
全部客户的要求都拿来, 一次交办下去, 一个服务同时负责好几个进程
-
singel-threaded (单线程)
一个一个来, 晚到的客户可能要等一等
-
2. 服务与端口的对应
当客户端连接我们的主机时, 我们主机是如何分辨不同服务的请求呢?
答: 通过端口号
可以修改/etc/services来修改一个服务的端口号, 不过很可能造成一些协议的错误, 除非你要架设一个地下网站
3. daemon的启动脚本与启动方式
-
/etc/init.d/* : 启动脚本的放置处
-
/etc/sysconfig/* : 初始化环境的配置文件
-
/etc/xinetd.conf, /etc/xinetd.d/* : super daemon的配置文件
-
/etc/* : 各服务各自的配置文件
-
/var/lib/* : 服务产生的数据库
-
/var/run/* : 各服务程序的PID记录处
(每个distribution都会记录每一个daemon启动后取得的进程的PID并放置在/var/run/这个目录下)
3.1 stand alone的/etc/init.d/*启动
service [service name] {status|start|stop|restart|reload|...}
service --status-all #将所有stand alone的状态列出来
- 端口与服务相对应, 想关闭某个端口, 需要找到端口对应的服务进程
3.2 super daemon及其受管服务启动方式
super daemon也是一个stand alone, 但super daemon所管理的服务如何得知呢?
grep -i "disable" /etc/xinetd.d/*
先修改/etc/xinetd.d/下的配置文件, 在重启xinetd就可以启动super daemon管理的服务
4. super daemon的配置文件
默认的配置文件: xinetd.conf
若服务的设定值没有指定, 则以xinetd.conf中的默认值为主
assign_op为参数的设置方式:
- = : 后面设置的参数就是这样
- += : 在原来的设置中加入新的参数
- -= : 在原来的设置中舍弃新的参数
arrribute(功能) | 说明与范例 |
---|---|
服务的识别, 启动与程序 | |
disable (启动与否) | [yes|no] , 默认值为disable=yes |
id (服务识别) | [服务名称] |
server (程序文件名) | [program的完整文件名]<br />server=/usr/bin/rsync |
server_args (程序参数) | [程序的相关设置参数] |
attribute (功能) | 说明与范例 |
---|---|
连接方式与连接数据包协议 | |
socket_type (数据包类型) | [stream|dgram|raw]<br />stream(tcp), dgram(udp), raw(服务与ip直接交互) |
wair (连接机制) | [yes(single)|no(multi)], 默认wait=no |
instances (最大连接数) | [数字或UNLIMITED], 此服务可接受的最大连接数 |
per_source (单用户来源) | [数字或UNLIMITED] ,控制每一来源ip仅有一个最大的同时连接数 |
cps (新连接限制) | [两个数字], 第一个数字为一秒内能够接受的最多新连接请求, <br />第二个数字为若超过第一个数字则关闭该服务的秒数 |
attribute (功能) | 说明与范例 |
---|---|
高级设置选项: 环境, 网络端口与连接机制等 | |
env (额外变量设置) | [变量名称=变量内容] |
port (非正规端口号) | [一组数字 (小于65534)] |
redirect (服务转址) | [IP port] |
includedir (调用外部设置) | [目录名称] |
attribute (功能) | 说明与范例 |
---|---|
安全管控选项 | |
bind (服务接口锁定) | [IP] |
only_from (防火墙机制) | [0.0.0.0, 192.168.1.0/24, hostname, domainname] |
no_access (防火墙机制) | [0.0.0.0, 192.168.1.0/24, hostname, domainname] |
access_times (时间控制) | [00:00112:00, HH:MM-HH:MM] |
umask | [000, 777, 022], 设置用户新建目录或文件时的属性 |
5. 服务的防火墙管理: xinetd, TCP wrappers
5.1 /etc/hosts.{allow, deny}管理
任何以xinetd管理的服务都可以通过以上两个文件来设置防火墙
其实/etc/hosts.{allow, deny}都是/usr/sbin/tcpd (用来分析进入系统的TCP网络数据包的一个软件)的配置文件 , 通过分析TCP数据包并搭配这两个文件的规则比较, 就可以决定该连接是否能进入我们的主机
所以, 我们要通过TCP wrappers进行管控
#如何得知一个服务是否支持TCP wrappers呢?
ldd $(which command) | grep "libwrap.so"
#ldd (library dependency discovery): 查询某个程序的动态函数库支持
#配置文件语法:
service_name : [IP|domain|hostname] : action
第一, 二个字段的特殊参数:
ALL: 代表全部的program_name或IP都接受的意思
LOCAL: 代表本机
KONWN: 代表可解析的IP或domain或服务
UNKONWN: 代表未知的IP或domain或服务
#实例:
1. 只允许140.116.0.0/255.255.0.0与203.71.39.0/255.255.255.0这两个域,
及203.71.38.123这个主机可以进入我们的rsync服务器
2. 此外, 其他IP全部阻挡
vi /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
vi /etc/hosts.deny
rsync : ALL
6. TCP wrappers的特殊功能
#确定有没有安装TCP wrappers
rpm -q tcp_wrappers
-
spawn (action)
可利用后续的shell来进行额外工作, 且具有变量功能, 主要变量为%h (hostname), %a (address), %d (daemon)等
-
twist (action)
立即以后续的命令进行, 且执行完后终止该次连接的请求
详见<鸟哥的Linux私房菜>P565
7. 系统开启的服务
7.1 查看系统启动的服务
netstat -tulnp #查看系统目前启动的网络服务
netstat -lnp #查看所有有监听网络的服务 (包括socket状态)
service --status-all #查看所有服务状态
7.2 设置开机后立即启动服务的方法
在启动Linux系统时, 可以进入不同的模式, 这模式我们称之为执行等级(run level), 不同的执行等级有不同的功能与服务, run level 3 : 纯文本界面, run level 5 : 图形界面
chkconfig #管理系统服务默认开机与否
chkconfig --list [service_name]
chkconfig [--level [0123456]] [service_name] [on|off]
chkconfig [--add|--del] [service_name]
#--add: 增加一个服务名称给chkconfig来管理, 需要将该服务加入/etc/init.d/中
#实例: 在/etc/init.d/内新建一个myalex的文件, 该文件必须是这样的:
vi /etc/init.d/myalex
#!/bin/bash
# chkconfig: 35 80 70
# description: 范例
echo "Nothing"
# 比较重要的是第二行, 语法是: chkconfig: [runlevels] [启动顺序] [停止顺序]
# 启动顺序(start number)与结束顺序(stop number)则是在/etc/rc.d/rc[35].d内新建以
# S80myalex及K70myalex为文件名的设置方式
chkconfig --list myalex
chkconfig --add myalex ; chkconfig --list myalex
chkconfig --del myalex ; rm /etc/init.d/myalex
ntsysv #类图形界面管理模式, 红帽系统特有
ntsysv [--level [0123456]]
本文基于<鸟哥的Linux私房菜>, 归纳整理, 在此致谢鸟哥.
网友评论