xdays

OpenLDAP构建统一认证之项目实战

背景

问题

登录服务器的账号分散在所有的机器上,这样就带来两个问题:

  1. 维护成本高,需要专门在playbook里定义用户权限
  2. 没有明确的权限划分
  3. 不便于和其他系统(如Google Apps)对接

需求

  1. 数据集中管理
  2. 根据用户组控制用户的登陆权限
  3. 控制用户的sudo权限,只有operation有sudo的权限
  4. 自动创建家目录
  5. Web管理界面

原则

  • 尽可能少的涉及组件,减少维护成本
  • 尽可能的不入侵系统配置,便于恢复

配置

服务端

OpenLDAP安装配置

关于OpenLDAP的安装可以参考OpenLDAP构建统一认证之安装配置

LAM安装配置

关于LAM安装配置可以参考OpenLDAP构建统一认证之管理工具

管理账号

dn: olcDatabase={2}bdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com

dn: olcDatabase={2 ...

Keepalived安装配置

简介

Keepalived是Linux的高可用软件,其主要是高可用协议的VRRP的开元实现,此外它还提供了方便管理LVS的接口。

安装

wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz && tar xzf keepalived-1.2.7.tar.gz && cd keepalived-1.2.7 && ./configure --prefix=/usr/local/keepalived-1.2.7 && make &&     make install && cd /usr/local && ln -s keepalived-1.2.7 keepalived

配置

mv keepalived.conf ...

God进程管理

功能

优点

  • 配置即ruby代码,灵活
  • 可管理后台进程
  • 可动态加载配置
  • 可根据进程消耗资源重启进程
  • 丰富的通知功能,如邮件,campfire等
  • 支持poll和event两种检测模式

缺点

  • 配置复杂,需要ruby背景
  • 文档太少

配置

poll模式:

RAILS_ROOT = "/Users/tom/dev/gravatar2"

%w{8200 8201 8202}.each do |port| God.watch do |w| w.name = "gravatar2-mongrel-#{port}" w.start = "mongrel_rails start -c #{RAILS_ROOT} -p #{port} \ -P #{RAILS_ROOT}/log/mongrel.#{port ...

Supervisor进程管理

功能

优点

  • 配置简单
  • 管理精准
  • 进程组管理
  • RPC扩展
  • API支持
  • FastCGI进程管理
  • 事件支持(如定时任务)

缺点

  • 被管理进程必须前台运行
  • 退出后会使被监管的进程也退出

配置

[unix_http_server]
file=/var/run/supervisor.sock
chmod=0700

[supervisord]
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
childlogdir=/var/log/supervisor

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run ...

Monit进程管理

功能

优点

  • 性能高,占用内存少
  • 邮件通知
  • HTTP界面
  • 检测系统性能参数
  • 检测文件属性
  • 检测服务状态
  • 检测文件系统
  • 检测远程主机

缺点

  • 没有API
  • 准确性
  • 配置复杂

配置

set daemon 60 # check services at 1-minute intervals 
set logfile /var/log/monit.log 
set pidfile /var/run/monit.pid 
set idfile /var/.monit.id 
set statefile /var/.monit.state 
set mailserver smtp.xdays ...

OpenLDAP构建统一认证之管理工具

自带工具

注意: 如果服务器的ssl证书是自签名的,那么在客户端的ldap.conf文件加入一行TLS_REQCERT never,否则认证会不通过。

安装

ubuntu执行:

apt-get install -y ldap-utils

centos执行:

yum install -y openldap-clients

使用

ldapsearch

ldapsearch,搜索目录树,示例如下:

ldapsearch -v -x -H ldaps://example.com -D "cn=admin,dc=example,dc=com" -W -W -b "dc=xdays,dc=info" -LL

简单解释下选项的作用:

  • -H 指定服务器url
  • -x ...

OpenLDAP构建统一认证之安装配置

安装OpenLDAP

ubuntu

确保本机有符合FQDN的主机名,因为安装程序会根据主机名提取域来作为baseDN

apt-get install slapd

安装过程中会提示设置管理员密码

centos

yum install slapd

配置OpenLDAP

slapd.conf和cn=config

配置slapd服务有两种方式:

  • slapd.conf是传统方式,修改配置文件然后重启服务,centos默认采用这种方式。
  • cn=config是新的配置方式,称之为on-line configuration,ubuntu默认采用这种方式。

配置TLS

自签名证书

mkdir /etc/ldap/certs
openssl genrsa -out ldap.key 1024
openssl req -new -key ldap.key -out ldap.csr
openssl x509 -req ...

OpenLDAP构建统一认证之基础概念

目录服务与关系数据库

目录数据库系统和关系数据库系统都是用来保存数据的,但是他们有两个主要的不同点:

  • 数据结构,目录服务只有树形结构,不像关系数据库有复杂的数据结构。
  • 查询速度与写入速度,目录服务适合查询,不适合写入。

基本概念

在浏览LDAP相关文档时经常会遇见一些概念,下面是常见概念的简单解释:

  • DIT,目录信息树,近似相当于一个表
  • Entry,条目,也叫记录项
  • DN,是无歧义标识一个条目的名字,如"cn=alair,dc=account,dc=xdays,dc=info",相当于主键
  • 属性,一个条目可以有多个属性,常见的属性有CN,O,OU,DC等
  • ObjectClass,对象类,决定了一个条目能具备哪些属性,以及属性对应值的类型
  • Schema,Schema是对象类的集合
  • baseDN,基本DN,baseDN执行绑定查询时的根目录
  • RootDN,根目录,也就是绑定了OpenLDAProotDSE这个类的条目。
  • O,组织 ...

Bind搭建DNS服务系统

简介

Bind是目前应用最广泛的DNS服务器软件,其主要包括服务器实现,解析器库实现和测试三个部分。

说明

本文仅讨论如何把Bind配置成一台DNS域名服务器,关于DNS协议的说明,请参考DNS协议详解

安装

centos

yum install bind bind-libs bind-utils bind-chroot

其中bind-chroot用于让bind运行于chroot模式下。

ubuntu

apt-get install bind9 dnsutils

配置

概述

bind的配置文件为named.conf,没有chroot时位于/etc/named.conf,chroot时位于/var/named/chroot/etc/named.conf下。配置文件由配置语句和注释组成。关于配置的详细说明可参考BIND 9 Administrator Reference Manual

配置语句列表

  • acl 定义一个IP列表名,用于接入控制
  • controls ...

Hadoop集群搭建

简介

目前我对hadoop的认识主要是如下两点:

  • 类似raid模式的存储系统,基于软件的容灾;
  • 分布式计算,这个是其牛逼之处。

安装配置

新建用户并配置免密码登录

所有设备上都需要hadoop帐号。

useradd hadoop
passwd hadoop

配置ssh无密码登陆

以hadoop用户执行如下命令:

su - hadoop
cd
mkdir .ssh
ssh-keygen –t rsa
cd ~/.ssh
cp id_rsa.pub authorized_keys 
scp authorized_keys ccos-m1:/home/hadoop/.ssh
scp authorized_keys ccos-m2:/home/hadoop/.ssh

安装JDK

JDK在每台设备上都要安装。

安装rpm包:

rpm -ivh jdk-6u23-linux-amd64.rpm

编辑/etc ...

rsync文件同步服务

简介

rsync是一个文件同步工具,简单来说,它的功能就是在两个位置(可能是本地的两个目录或者本地目录和远程目录)之间拷贝文件;但是相比cp或者scp等命令,rsync优势在于其强大的增量拷贝(高效)和过滤条件(灵活)上。

功能特点

  • 支持特殊文件,文件常见属性的拷贝
  • 可以借助常见的ssh,rsh等来传输
  • 强大的过滤机制
  • 通过著名的delta-transfer算法来实现高效传输
  • 基于服务的匿名和认证传输

客户端使用

运行模式

本地模式
rsync [OPTION...] SRC... [DEST]

如果源和目标都是本地路径则和cp类似。

shell模式
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST:DEST 

通过shell连接时在主机名和路径之间用一个":",用户名可选。

daemon模式
Pull: rsync [OPTION...] [USER ...

NFS文件共享服务器

基础概念

运行流程

NFS主要用于Linux系统间的文件共享,其方便之处在于client只要权限足够可以直接通过挂载的方式使用server端的目录,通过网络读写数据。NFS是通过几个独立的daemons来实现的,例如其中rpc.nfsd用于验证身份,rpc.mountd负责管理文件系统,rpc.lockd用于锁定文件防止写冲突,rpc.statd用于检查一致性。他们启动后选取小于1024的随机端口来监听,这就造成客户端无法了解服务端监听哪些端口的问题?所以NFS的运行依赖于portmap,portmap启动后会监听111端口,NFS各个服务器启动后需要向portmap注册自己的监听端口,这样当客户端要请求响应服务时先向portmap请求响应服务的端口,然后再去请求响应的服务

权限问题

分以下几种情况讨论:

  • 当client与server有完全相同的帐号和组(包括UID),client在server端拥有相应帐号的权限
  • 当client与server的用户UID相同时,client可以拥有以服务器端相同UID的权限,这可能会造成问题
  • 当server上并不存在client的UID,server端会把client的用户看作是一个匿名帐号,如Centos用nfsnobody
  • 当client以root用户访问server,默认server会把root用户改成匿名用户的权限

这样看来一个client用户要对NFS文件系统有些的权限要满足以下三个条件:

  • 通过NFS本身的验证
  • 在NFS配置中对文件系统有些的权限
  • 实际文件系统对响应的用户有些的权限

安装

一般系统默认都会安装,用如下命令查询下是否安装

rpm -q nfs-utils portmap

如果没有安装,yum安装

yum install -y ...

VPN-基于pptp配置及问题

先说下应用场景:学校里是用硬件集中认证的的方式来控制学生公寓上网的,如果不通过认证仅能通过IP访问校园网的资源。原先的应对方案是在机房(无需通过认证即可访问外网)用squid假设proxy服务器,既然是代理限制也很明显,有些不支持代理的应用就不能用了,比如一些游戏和网络电视等。自接触VPN以来感受其强大特性,宿舍通过拨VPN到机房网络,既然已经属于机房的网络了访问外网也就不是问题了。

实施步骤:

1)目前优先选取的是pptp VPN,因为它配置简单,况且仅需要几个连接,对性能也没什么要求。

2)配置步骤见另一篇文章VPN-基于pptp的简单配置

拓扑图如下:

pptpd-vpn-top

出现的问题:

按照上述步骤配置完成,客户端可以拨到VPN Server获取地址,但仅可以访问部分网站,校园网内的网站可以,百度谷歌可以,新浪人人等不可以。

自己的尝试:因为之前用的是proxy,这次就想到把proxy和VPN结合起来,不让VPN Server去执行nat而仅仅是做为代理用,下面是测试结果

  • 不拨VPN直接用proxy可以正常访问外网
  • 拨VPN不用proxy可以访问部分网站
  • 拨VPN,然后去掉Server的nat功能,用proxy,仅能访问部分网站,貌似proxy在VPN没有起作用

这个问题比较困扰我,前后总共也得折腾了三四天了,关于pptp协议原理的介绍也都很含糊,只好作罢,留待以后继续研究了。

非常经典的iptables配置脚本

花了一下午和一晚上通过http://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html这篇文档深入学习了iptables这一有力的包过滤系统,文档最后作者提供了一个脚本来配置iptables,我觉得这个脚本的结构设计的相当棒,这里转载过来并附上自己的理解共以后参考。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35 ...

VPN-基于pptp的简单配置

上学期用squid实现了宿舍不用客户端代理上网,但是如果不是全局代理好多软件不支持代理就有很多限制。这学期对vpn有了一点了解,发现这才是解决客户端的终极方法。它类似宽带拨号上网,没有任何限制,并且用户管理方便。但是在一个下午的激情努力下,我终于被教程中的概念搞晕了。因为要抓紧学习NP的内容,确实没有很大精力搞这个,所以请周丰杰帮忙,这里表示感谢。这里先把配置记录下,至于这其中的原理和详细过程,我想留待以后研究吧。

pptp的运行原理

实验拓扑图

pptpd-vpn-top

安装软件包

需要安装的软件包有ppp,iptables和pptpd,我用的centos5.5默认包含了ppp和iptables,在有些没有加载ppp模块的系统用modprobe挂上ppp_mppe模块;另外pptpd没有包含在源中,要用wget http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.i386.rpm下载后安装。

配置pptpd服务

配置如下:

--------------pptp.conf--------------//pptpd的主配置文件
option /etc/ppp/options.pptpd包含pptp选项
logwtmp
localip ...

cups打印服务器

机房里有一台老师淘汰下来的打印机,虽然旧了些但是打印质量没什么问题。近日有一想法,建立共享打印机,也就是机房内所有主机(windows和linux)都能通过这台打印机打印。现有的条件是一台奔四主机做服务器(debian5.0系统),一台USB接口打印机,windows客户机。

什么是CUPS?

通用UNIX打印系统,它能支持IPP,LPD和SMB协议,同时提供友好的管理界面,在windows下添加网络打印机也十分方便;同时,CUPS还提供了验证管理功能,控制共享打印机的使用范围(来源IP和验证等)

安装CUPS?

debian系统得益于apt,安装十分简单,命令如下:

#apt-get instll cups  安装过程可能提示设置samba域名默认即可,以及是否需要通过dhcp提供wins信息这里选否。

配置CUPS?

配置文件格式非常类似于apache的配置文件风格。

监听端口默认是只监听localhost,而我的debian没有图形界面,虽然可以用links但是还是不如图形界面友好。这里可以将将监听该做如下行:

Listen *.631

下面是针对特定目录的设置,主要就是权限方面的设置,在各个段内添加如下行以允许本地主机通过web管理:

Allow your.ip.address.here

这样基本的CUPS就完成了。

windows如何添加网络共享打印机?

网上邻居- ...

网络监控cacti初探

什么是cacti?

cacti是一个套基于lamp的网络流量监控软件,也可以监控服务器状态等方面。它是由php编写的完全基于web管理,而且可以安装插件来扩展其功能和监控对象的范围,有做好的模板可供使用简化了配置。

cacti有哪些组成部分?

cacti-componets

由上图可以看出,cacti是调用mysql,rrdtool,net-snmp来实现监控的,net-snmp定时轮询设备采集信息,将采集的信息写入rrd文件中,而mysql负责记录这些数据的对应关系以及其他相关的配置信息。当用户请求查看相应设备流量时,cacti查询mysql然后调用rrdtool来完成绘图。

如何安装配置?

关于安装可以参考官方手册,具体见参考链接。对于配置,大体上是先建立设备,然后添加相应的模板,然后创建相应的图形,最后再编辑一下自己的监控列表树。

下面附张效果图:

cacti-monitor

参考链接:

官方手册从安装到配置http://docs.cacti.net/manual:087

中文文档http://www.docin.com/p-12395104.html

详细的中文文档http://www.docin.com/p-47052887.html

lnmp 基础配置

注:本文知识搭建了基本环境,仅供测试用,具体详细的安装配置见参考链接。

简介

lnmp是linux+nginx+mysql+{php | python}的缩写,是堪比lamp的另一种web服务器平台。nginx相比apache的优点有:小巧,速度快,占用内存小。据介绍nginx和apache的工作方式的类比如下:你要去大学宿舍找个同学,nginx阿姨那里有个名单她只告诉你你同学在那个房间,而apache阿姨要带着你去找你那个同学,效率高低显而易见。

安装

一开始我已经强调这只是一个搭建一个测试环境,所以我用debian系统的apt系统自动安装所需要的程序。安装过程很简单,但是让nginx和php5-cgi协同起来工作花了我两天时间。

安装命令:
apt-get install nginx php5-cgi mysql-server

下图所示整个环境的运作:

nginx-fastcgi

后端的PHP程序根据用户请求来读写mysql数据库,配置的过程一个主要任务是连接nginx和php5-cgi。这里我碰到了两个问题如下:

  • nginx和fastcgi无法连接?在nginx的默认站点配置文件中要指定一个fastcgi变量SCRIPT_FILENAME,这个变量的值是“网站的根目录\$fastcgi_script_name”这样才能传递正确的需要解析的php脚本给fastcgi,进而让PHP解析。
  • 总是无法自动执行目录下的index.php文件,这个问题需要在location块里的index指令后添加index.php,这样才能识别默认的index.php文件。

配置 ...

centos5.5-server 安装配置笔记

上学起用机房的机器搭了一台服务器,底层系统是rhel5.4,提供各种服务,其中包括ssh,nat,lamp,ftp,proxy等。由于是边学习边试验有很多不恰当的地方,系统也装了很多用不到的软件。一方面打算把系统管理的更有条理,另一方面更重要的是好好复习一下以前学的知识,这次打算用centos5.5最小化安装,然后配置各种服务,也记录一下这个过程希望于人于己都能有所帮助。

机器配置:

机房配置:
处理器:Intel Pentium 4, 2377 MHz (18 x 132)
内存:512M(SDRAM)
显卡:GeForce4 MX 440 with AGP8X(64M)
硬盘:2块40G
网卡:2块RealTek8139
主板:Epox EP-4PEA800(I)
BIOS:Phoenix-Award BIOS v6 ...

iptables 防火墙及nat

什么是iptables?

iptables是用来配置linux内核自带的包过滤系统的命令行工具,它主要是面向系统管理员。

什么是规则,链,表?

规则(rule):包过滤条件及处理方式,这是过滤系统的基本单位。比如规则可以指定源地址,目的地址,源端口,目的端口等,如果匹配规则就按照相关处理方式处理数据包。

链(chain):链是数据包的传播路径,是规则的集合,包括一条或者多条规则。数据包到达某条链时,iptables依次按规则处理数据包。

表(table):提供特定功能的一组链,常见的主要有filter表(INPUT,FORWARD,OUTPUT链),nat表 (PREROUTING,POSTROUTING,OUTPUT链),mangle表 (PREROUTING,POSTROUTING,INPUT,FORWARD,OUTPUT链)。

数据包有怎样的传输过程(链之间的关系)?

iptables

(图片转自鸟哥私房菜)

iptables的语法?

iptables [-t 表(默认filter)] [命令选项]   {链} [ 匹配选项 ...