分类 IT技术 下的文章

以前用过一个模块来调用认证域帐号的,后来发现引用代码太多,因为只是为了做帐号密码认证,不做其他任何查询什么的,所以干脆拔代码自己精简下,下面的代码只是利用了输入正确的帐号密码创建ldap连接来判断密码是否正确。

<?php
    if (isset($_POST['UserName']))
        {
        $_SESSION['txtNo']=$_POST['UserName'] ;
        $ldapConnect=ldap_connect('192.168.1.200' , '389' );  
        //建立到ldap服务器的连接192.168.1.200是ldap服务器ip,389是ldap服务器端口(默认389)  
            $bind= @ldap_bind($ldapConnect , $_POST['UserName'] . '@yourname.local',$_POST['PassWord'] );  
         //验证帐号密码,ldap_bind第一个为绑定的连接,第二个为用户名(注意是否有后缀),第三个为密码。  
            if($bind && $_POST['password'] != "")  
            {//验证成功,跳转到ok.php
                $_SESSION['login']="ok";
        echo '<meta http-equiv="refresh" content="0;url=ok.php">';
            }  
            else  
            {//验证失败,弹出提示,并跳转回login.php
                echo "<script>alert('用户名或密码错误')</script>";
                echo '<meta http-equiv="refresh" content="0;url=login.php">';
         }  
            ldap_close($ldapConnect);   
        //关闭ldap连接  
        }
    else {
        echo "<script>alert('用户名或密码错误')</script>";
        echo '<meta http-equiv="refresh" content="0;url=login.php">';
    }
?>

默认情况下,Solaris10已经把VNC安装好了
只需要简单开启服务并配置就可以使用
检查VNC服务状态

root# svcs -a | grep -i vnc
online 18:02:34 svc:/application/x11/xvnc-inetd:default

现在我们要开启这个服务

root# svcadm enable svc:/application/x11/xvnc-inetd:default

接着配置服务选项

root# echo "vnc-server\t5900/tcp\t\t\t# Xvnc" >>/etc/services

接着编辑/etc/X11/gdm/custom.conf文件

root# vi /etc/X11/gdm/custom.conf

如果没有则会创建该空文件,添加以下内容

[xdmcp]
Enable=true
[security]
DisallowTCP=false
AllowRoot=true
AllowRemoteRoot=true

然后禁用启用服务,接着检查服务状态

root# svcadm disable svc:/application/x11/xvnc-inetd:default 
root# svcadm enable svc:/application/x11/xvnc-inetd:default
root# svcs svc:/application/x11/xvnc-inetd:default
online 18:15:00 svc:/application/x11/xvnc-inetd:default

如果是online则说明配置正确,最后可以使用你习惯的vnc客户端直接连接这个Solaris服务器了

自从了解到Windows2012支持块去重和存储池以后,文件共享服务器装2012R2成了首选
有台N36L跑Windows2012R2,3Tx4做的存储池,里面虚拟磁盘做的mirror方式,所以允许损坏单侧的一半硬盘
刚好发现在拷贝数据的时候忽然变慢,用HDTune查看了一下,发现有坏道,于是换了块硬盘
由于之前在虚拟机下测试过,也在Win8.1下实际应用过更换硬盘,所以就想当然的关机,换硬盘,开机
在进入系统之后,手工添加新增的硬盘到存储池后,发现并没有自动恢复存储池
于是乎搜索了一番(如果是Win8.1它在添加完磁盘后会自动开始重组的)
经过若干个小时的数据备份(因为怕误操作导致数据丢失)
以下就是命令行的恢复方法
输入如下命令列出所有物理磁盘

Get-PhysicalDisk |? { $_.ObjectId.Contains( $PhysicalDiskGUID ) }
 FriendlyName CanPool OperationalStatus HealthStatus Usage
 ------------ ------- ----------------- ------------ -----
 PhysicalDisk3 False OK Healthy Auto-Select
 PhysicalDisk1 False OK Healthy Auto-Select
 PhysicalDisk0 False OK Healthy Auto-Select
 PhysicalDisk4 False OK Healthy Auto-Select
 PhysicalDisk2 False OK Healthy Auto-Select
 PhysicalDisk-1 False Lost Communication Warning Retired

PhysicalDisk-1就是系统记录的更换下去的旧硬盘,显示状态为Lost Communication,我们需要输入以下命令让它“退休”

Set-PhysicalDisk -FriendlyName "PhysicalDisk-1" -Usage Retired

接着输入命令重组和坏硬盘相关的虚拟磁盘,我的虚拟磁盘命为vd1,你需要替换为你自己的虚拟磁盘名

Repair-VirtualDisk -FriendlyName vd1

之后得到如下恢复进度

Repair-VirtualDisk -FriendlyName vd1
已完成 1/2
[oooooooooooooooooooooooooooooooooooooooooooooooooooooo
剩余 00:00:02。
Repairing virtual disk
Running
[ooooooo

如果不小心这个窗口关闭了,则输入如下命令是查看存储池任务进度

Get-StorageJob

得到如下进度

Get-StorageJob

 Name ElapsedTime JobState PercentComplete IsBackgroundTask
 ---- ----------- -------- --------------- ----------------
 Repair 02:51:18 Running 66 False
 Regeneration 00:00:00 Running 66 True

最后输入以下命令彻底删除损坏的硬盘

Remove-PhysicalDisk -FriendlyName "PhysicalDisk-1"

在后续的使用过程中,发现修复完的虚拟磁盘在重新启动计算机之后没有自动挂载,另外如果是从其他计算机导入过来的存储池也不会自动挂载,需要自动挂载需要输入以下命令
查看虚拟磁盘状态

Get-VirtualDisk

 FriendlyName ResiliencySettingNa OperationalStatus HealthStatus IsManualAttach Size
me
 ------------ ------------------- ----------------- ------------ -------------- ----
 vd1 Mirror OK Healthy True 5.0 TB

可以看到,此时vd1这块虚拟磁盘的IsManualAttach参数为True,将虚拟磁盘vd1变更为自动挂载,输入以下命令
注:必须以管理员身份运行PowerShell

Set-VirtualDisk -FriendlyName vd1 -IsManualAttach $False

如果有多个虚拟磁盘想同时开启自动挂载,则可以输入以下命令

Get-VirtualDisk | Where-Object {$_.IsManualAttach –eq $True} | Set-VirtualDisk –IsManualAttach $False

GLPI是非常优秀开源IT管理系统,包括资产统计、helpdesk等等功能,配合OCSNG还可以实现自动采集客户端软硬件信息。
虽然这套软件也有Windows版的,但Linux下的更加稳定,推荐在Linux上安装,本人之前写过一篇安装文章,那个时候为了收集中日文的计算机信息,还需要第三方的程序和修改glpi代码才能实现,现在这两个软件官方原生已经支持UTF8,不需要我们折腾了,不过安装过程依然不那么简单,呵呵
好了,先安装基本的Linux系统,本例使用的是CentOS6.0,GLPI版本0.84.5,OCSNG版本是2.1.1。

这里说一下默认光盘安装的CentOS6,有几个需要注意的地方,第一建议关闭防火墙和selinux,第二,配制好网卡,默认情况下,网卡开机是不启用的,需要修改配置文件

vi /etc/sysconfig/network-scripts/ifcfg-eth0
把
ONBOOT=no
改为
ONBOOT=yes

然后开始安装基础软件httpd,php,mysql,还需要下载一些软件

 glpi-0.84.6.tar.gz
 json-1.2.1.tar
 OCSNG_UNIX_SERVER-2.1.1.tar.gz
 OCSNG-Windows-Agent-2.1.1.zip
 OCSNG-Windows-Packager-2.1RC1.zip

安装OCSNG服务端

tar zxvf OCSNG_UNIX_SERVER-2.1.1.tar.gz
 cd OCSNG_UNIX_SERVER-2.1.1
 ./setup.sh

接下来一路回车,你会依次看到如下的选择提示

Do you wish to continue ([y]/n)?
 Which host is running database server [localhost] ?
 On which port is running database server [3306] ?
 Where is Apache daemon binary [/usr/sbin/httpd] ?
 Where is Apache main configuration file [/etc/httpd/conf/httpd.conf] ?
 Which user account is running Apache web server [apache] ?
 Which user group is running Apache web server [apache] ?
 Where is Apache Include configuration directory [/etc/httpd/conf.d/] ?
 Where is PERL Intrepreter binary [/usr/bin/perl] ?
 Do you wish to setup Communication server on this computer ([y]/n)?
 Where to put Communication server log directory [/var/log/ocsinventory-server] ?
 Communication server need a directory for plugins configuration files.
 Where to put Communication server plugins configuration files [/etc/ocsinventory-server/plugins] ?
 Communication server need a directory for plugins Perl modules files.
 Where to put Communication server plugins Perl modules files [/etc/ocsinventory-server/perl] ?

然后我这里会出现如下错误提示,根据提示安装对应的软件

+----------------------------------------------------------+
 | Checking for required Perl Modules... |
 +----------------------------------------------------------+

 Checking for DBI PERL module...
 Found that PERL module DBI is available.
 Checking for Apache::DBI PERL module...
 *** ERROR: PERL module Apache::DBI is not installed !
 Checking for DBD::mysql PERL module...
 Found that PERL module DBD::mysql is available.
 Checking for Compress::Zlib PERL module...
 Found that PERL module Compress::Zlib is available.
 Checking for XML::Simple PERL module...
 *** ERROR: PERL module XML::Simple is not installed !
 Checking for Net::IP PERL module...
 *** ERROR: PERL module Net::IP is not installed !
 *** ERROR: There is one or more required PERL modules missing on your computer !
 Please, install missing PERL modules first.

 OCS setup.sh can install perl module from packages for you
 The script will use the native package from your operating system like apt or rpm
 Do you wish to continue (y/[n])?

下载perl-Apache-DBI-1.09-1.el6.noarch.rpm,并安装
我这里提示

rpm -i perl-Apache-DBI-1.09-1.el6.noarch.rpm
 warning: perl-Apache-DBI-1.09-1.el6.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
 error: Failed dependencies:
perl(Digest::SHA1) is needed by perl-Apache-DBI-1.09-1.el6.noarch

还需要安装依赖perl-Digest-SHA1

yum install perl-Digest-SHA1
rpm -i perl-Apache-DBI-1.09-1.el6.noarch.rpm

继续安装依赖包

yum install perl-XML-Simple perl-Net-IP

重新运行OCSNG安装程序
之后有提示还缺一些SOAP相关的包,直接忽略就行了,不需要这个功能

配置数据库安全
mysql_secure_installation
设置root密码,关闭root远程访问,移出不必要的数据库
/etc/my.cnf中找到[client]和[mysqld],然后在它们下面均加上default-character-set=utf8就可以了。别忘了重启下mysql服务
创建ocsng和glpi的数据库和用户

 mysql -u root -p
 create database glpi;
 create database ocsweb;
 grant all privileges on glpi.* to glpi@localhost identified by 'password';
 grant all privileges on ocsweb.* to ocs@localhost identified by 'password';
 set global max_allowed_packet = 2*1024*1024*10
 exit

配置ocsng的web界面(以下地址请将192.168.1.11替换为你自己的服务器IP)
进入http://192.168.1.11/ocsreports
输入上面设置的password密码,提交即可
再删掉安装文件 /usr/share/ocsinventory-reports/ocsreports/install.php
用admin/admin登陆进ocsng的web界面后更改下默认密码即可

下面安装glpi,由于glpi需要json,新版本的php如果要编译json必须修改代码

tar xvf json-1.2.1.tar
 cd json-1.2.1
 vi JSON_parser.c
添加#define ZVAL_DELREF Z_DELREF_P 
 phpize
 ./configure
 make 
 make install 
 echo "; Enable json extension module" > /etc/php.d/json.ini 
 echo "extension=json.so" >> /etc/php.d/json.ini 
 /etc/init.d/httpd restart
 tar zxvf glpi-0.84.6.tar.gz
 mv glpi /var/www/html/
 chown apache.apache /var/www/html/glpi/ -R

输入http://192.168.5.11/glpi 直接跳转到安装界面
选择语言,提交,一路下一步即可
删除/var/www/html/glpi/install/install.php
修改密码后完成glpi的安装

配置glpi的插件ocsng
之前的老版本,glpi中直接集成了ocsng的连接组件,新版本中变为了插件方式,到glpi网站下载插件glpi-ocsinventoryng-1.0.2.tar.gz

tar zxvf glpi-ocsinventoryng-1.0.2.tar.gz
mv ocsinventoryng /var/www/html/glpi/plugins/

去插件中启用就可以了

配置域整合

 名称
yourdc.local
 Server
 192.168.1.200
 Basedn
 DC=yourdc,DC=LOCAL
 rootdn (非匿名)
ldapconnect@yourdc.local
 Login Field
 samaccountname
连接过滤器
(&(objectClass=user)(objectCategory=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
然后配置导入信息即可

这里发现一个bug,以前在0.7x版本上是没问题的,现在升级到0.8x以后ldap连接测试可以通过,但是无法导入用户,打开调试模式得到如下错误

PHP Warning: ldap_search(): Search: Operations error in /var/www/html/glpi/inc/authldap.class.php at line 1400

经过研究代码和数据库发现,rootdn_passwd这个密码并没有真正写入数据库,而直接在数据库中修改此项也没生效,只好改ldap连接代码了,本人非php专家,所以改成可以满足自己应用就好了,修复bug没那个精力。。。

vi /var/www/html/glpi/inc/authldap.class.php

找到

static function connectToServer($host, $port, $login="", $password="", $use_tls=false,
$deref_options) {

这个函数,在下面添加即可

$password="yourdnpasswd";

最后重新进入导入用户界面就可以看到亲切的域帐号了。。。

以前写过,这次做个记录

需求是这样的,首先网站文件和数据库需要每天自动备份,然后备份目录超过一定时间的删除,比如保留最近14天地备份

刚好vps是redhat,里面默认居然没有装crond的服务,输入以下命令安装

yum install cronie

创建备份脚本

vi /root/bakweb.sh

编辑并输入以下内容

#!/bin/bash

 find /home/bak/ -name '*' -type f -mtime +14 -exec rm {} \;
 tar zcvf /home/bak/www.penglei.name_$(date +%F).tar.gz /var/www/html
 mysqldump -u root --password=PASSWORD DBNAME > /home/bak/sql.penglei.name_$(date +%F).sql

 exit 0

输入:wq保存退出。
该脚本的意思是首先选择/home/bak作为网站备份目录。
第一步,先删除/home/bak下超过14天的文件;
第二步,按www.penglei.name_+日期为文件名备份网站目录/var/www/html;
第三步,按sql.penglei.name_+日期为文件名导出数据库,PASSWORD和DBNAME替换为你自己的root密码和数据库名。
最后创建crond脚本,每天早上5点自动运行该脚本即可
创建crond文件

vi /etc/cron.d/bakweb

编辑并输入以下内容

0 5 * * * root /root/bakweb.sh