System Resources Managed by init
使用init管理系统资源
init
需要结合/etc/inittab配置文件来完成
其中指定init进程会加载一个脚本--> /etc/rc.d/rc.sysinit (系统初始化)
例如:实现让用户可以通过串行口连接
co:23:respawn:/sbin/agetty -f /etc/issue.serial 19200 ttyS1
标识符:运行级别2和3:指定动作(重新发起连接):启动终端命令 读取欢迎语 连接速率 从哪个控制台启动 建议这种串行控制台不要启动过多
#man inittab
实现系统初始化管理:
系统初始化 inittab将系统启动级别告知rc.sysinit并启动之 rc.sysinit会进入到执行级别下 如果要启动某种级别 就执行此级别下所有以S开头的脚本 如果要退出这种级别 就执行以K开头的脚本
UNIX
->System v -->HPunix
->BSD -->sun
系统启动脚本 两种:
-->System V 风格 繁多,功能多,易用,用链接管理(Redhat)
-->BSD 风格 简洁 不易用 关闭服务kill
System 风格:
/etc/init.d --> /etc/rc.d/init.d/ 可以接受多个参数 启动数个进程
链接到/etc/rc.d/rcN (N为启动级别)
BSD 风格:
直接就是个脚本 并且只能用来启动服务 而且几乎不接受什么参数 需要停止服务时 只能kill
redhat使用chkconfig命令管理这些system风格的启动脚本 并自动为它们在相应级别加入链接
#chkconfig --list servicename
#chkconfig --level [0-6] servicename on|off 如果不加level 默认为3 5
#chkconfig --add mysqld 添加新脚本(必须是system v风格的)
#chkconfig --del mysqld 移除某个脚本
服务的启动|停止|状态
#service startup_script start|stop|status redhat风格管理方式
#/etc/init.d/startup_scripts start|stop|status 通用方式管理服务
chkconfig /etc/init.d/
/etc/sysconfig/下 有对应于每个服务的同名的配置文件 此配置文件可以在启动某个服务时 向其传递一些额外的参数 来决定其运行状态的 服务的额外配置文件 功能扩展 细化
例如: dhcpd文件 -->可以定义dhcp服务只监听某个网卡
firstboot -->RUN_FIRSTBOOT=NO 是否在开机时提示用户重新配置系统参数
desktop 配置桌面环境
vncservers
独立守护进程 (随时在内存中运行 等待访问) (响应速度快)
-->超级守护进程xinetd(属于独立守护进程)
-->非独立守护进程 (由超级守护进程管理,当需要被访问时,由超级守护进程唤醒,加载入内存,接受访问请求) (节省资源)
xinetd的配置文件 和配置文件格式:
/etc/xinetd.conf 超级守护进程自己的配置文件 定义了每个服务的默认参数
-->includedir /etc/xinetd.d 将这个目录下的文件包含进来
/etc/xinetd.d/定义了非独立守护进程的启动方式等信息 服务的详细参数 控制信息
xinetd.conf 和xinetd.d/目录下 配置文件的格式解释:
接受=(直接等于) +=(在默认选项中增加) -=(在默认选项中去除) 方式的赋值
默认选项都在xinetd.conf里
id
用来唯一的标识一个服务
type
服务类型 rpc|internal|TCPNUX|TCPNUXPLUS|UNLISTED(不包含以上几个的)
flags
标志 nodelay(无延迟,立即将用户请求转交给服务,不参与队列)|ipv4|
disable
接受yes|no yes表示禁用 no表示启用 disable优先级高于enabled
enabled
接受yes|no 与disable相反
instances
实例 一个启动了的进程占用了套接字并可以提供服务 叫做一个实例
例如一个系统中运行了两个SqlServer 相互独立 就叫做两个实例
在此决定了某个服务允许的最大访问量 即并发连接数 如果value为UNLIMITED
则为无限制
per_source
允许一个客户端能够同时发起多少个连接
v6only
是否只接受ipv6 一般为no
log_type
SYSLOG 产生的任何信息发送给syslog 由syslog记录日志
daemon,auth,authpriv等等
emerg,alert,crit,err,warning,notice,info,debug八个级别
FILE 指定相应文件
日志文件大小的 (软限制) (硬限制)
如 =FILE /var/log/telnet 生效前要保证文件存在
log_on_failure
当服务启动失败的时候记录哪些信息
HOST 远程主机地址
USERID
ATTEMPT 登录尝试所有的信息
log_on_success
登录成功时 记录哪些信息
PID server process id 进程ID
HOST 从哪里登录
USERID
EXIT 如何退出的
DURATION 整个服务期间持续记录 登录持续时间
TRAFFIC 记录流量
cps
限制入站链接的速率 接受两个参数 (限制每秒最大处理连接数) (如果超过此限制服务将暂停多少时间)
主要做ddos攻击限制 50 10
banner
欢迎信息 相当于/etc/issue的作用
接受一个文件路径作为值 当用户访问此服务时 显示 定义的文件中的内容
banner_success
banner_fail
socket_type
套接字类型 stream(tcp的套接字) |dgram (udp)|raw(绕过tcp直接到第三次)
wait
如果服务为单线程/多线程的 由xinetd管理还是由自己管理 yes服务为单线程
xinetd将启动服务并代替管理此进程
no多线程 xinetd继续保持为之处理每一个连接请求
user
指定用谁的身份运行此进程 linux上小于1023的端口只有root才能访问
log_on_failure
关于日志
only_from
基于主机的访问控制 仅允许
可接受类似 192.168.0.0/24 或者192.168.1.0或者192.168.0.1的地址方式
网络名(如NIS域) 或者hostname或者domain
no_access
基于主机的访问控制 禁止访问
接受值同上 如果两者同时定义 将结合使用 如果都没定义 则服务开放
如only_from=192.168.0.0/24
no_access=192.168.0.1 只接受noly_from的内容但除了192.168.0.1之外
per_source
接受一个int整数值 代表允许同一个地址同时使用服务的个数
access_times
允许连接服务的时间段 接受如12:00-18:00的值
bind
如果主机上有多块网卡 多个IP 则使用bind绑定网卡或者IP地址
interface
synonym for bind 与bind相同
#ldd 显示二进制文件运行时对库文件的依赖关系
#which xinetd
#ldd `which xinetd` 显示xinetd运行时依赖的库
tcp_wrapper (tcp包装器,在tcp层对网络服务的控制管理)(可以基于主机实现安全访问控制功能)
tcp_wrapper是一个提供过滤功能的库文件
2个配置文件: /etc/hosts.allow /etc/hosts.deny
两个文件的优先级取决于检查顺序 如果所有条目都没有匹配 默认允许
默认检查顺序: 先检查allow如果匹配则允许 就不再检查deny文件
如果allow没有定义 则检查deny文件如果匹配则deny 类似防火墙acl
配置文件中的条目设置格式:
daemon_list:client_list [:options]
daemon1,daemon2:client1,client2 同时定义多个进程
daemon_list@host:client 定义只控制哪个IP地址
如telnet 进程名为in.telnetd
只允许192.168.1.0网段访问 则
host.allow+>in.telnetd: 192.168.1.0/255.255.255.0
host.deny+>in.telnetd: ALL
可接受多种方式:如IP(192.168.0.1或者10.0.0.) 主机名域名(www.redhat.com,.example.com)
需要服务器的反向解析支持 不建议使用 bynetmask(192.168.0.0/255.255.255.0)不支持/24无类 域间路由这种写法 不带后缀
tcp_wrapper的宏定义:
LOCAL代表本地主机
ALL代表所有主机
UNKNOWN
KNOWN
PARANOID无法解析或者正反向解析 不匹配的
EXCEPT (EXCEPT可以被嵌套)
例如: host.allow+>sshd: 192.168.0. EXCEPT 192.168.0.253
host.deny+>sshd: ALL
[:options]
%a|c|d|h|n|p|s|u
%%
例如:
host.allow+>in.telnetd: 192.168.0.0/255.255.255.0 : spawn echo "`date` %u from %h attempt %d@%H" | mail -s warning root
host.allow+>in.telnetd: 192.168.0.0/255.255.255.0 : spawn echo "`date` %u from %h attempt %d@%H" >> /var/log/telnet2.log (telnet2.log这个文件需要首先创建的)
也可以将in.telnetd换成sshd 则可以实现对ssh操作的访问控制
查看某个服务是否支持tcp_wrappers控制:
#ldd `which xinetd` 如果某个服务链接到tcp_wrappers库文件 则表示它接受tcp_wrappers的管理
例如:
[root@station179 xinetd.d]# ldd `which xinetd`
linux-gate.so.1 => (0x00760000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00679000)
libwrap.so.0 => /lib/libwrap.so.0 (0x00abc000)
libnsl.so.1 => /lib/libnsl.so.1 (0x00110000)
libm.so.6 => /lib/libm.so.6 (0x0064a000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x00e9e000)
libc.so.6 => /lib/libc.so.6 (0x00202000)
libdl.so.2 => /lib/libdl.so.2 (0x00c65000)
libsepol.so.1 => /lib/libsepol.so.1 (0x00127000)
/lib/ld-linux.so.2 (0x001e6000)