分类: LINUX
2007-12-22 23:48:45
配RAC时,需要配两主机之间的互相信任,但配完后从RAC1执行ssh rac2 command成功,但在RAC2 ssh rac1 command老是还需要输入密码,说明未配置成功。只得进入最烦人的troubeshooting过程。
Try 1 : 从rac2 生成 authorized_keys 传到rac1,故障依旧
Try 2: 因为在root下做同样的配置能成功,怀疑是root用户下的配置干扰了oracle用户下的配置,所以将rac2 的root用户下的配置删除,重起再试,故障依旧
Try 3: 通过ftp来传authorized_keys文件到rac2,不成功
Try4: 修改/etc/ssh/ssh_config,故障依旧
Try5: 观察/var/log/message,由于有下面的输出,以为是由于oracle的主组属于oinstall有问题。将oracle用户加到root组下,重配再试,不成功
root@rac1 $tail -f messages
Nov 27 20:27:16 rac1 sshd(pam_unix)[5766]: session closed for user oracle
Nov 27 20:28:35 rac1 sshd(pam_unix)[5787]: session opened for user oracle by (uid=0)
Nov 27 20:28:35 rac1 sshd(pam_unix)[5787]: session closed for user oracle
Try6: 观察/var/log/secure, 由于有下面的输出”Authentication refused: bad ownership or modes for directory /home/oracle” , 察看/home/oracle的主目录的属性为777, 原来是我以前ftp数据时作的修改,这是ssh不允许的,所以才报错,将其改到700后完全正常。
root@rac1 $tail secure
Nov 27 12:27:19 rac1 sshd[5786]: Failed publickey for oracle from ::ffff:192.168.0.7 port 32862 ssh2
Nov 27 12:28:35 rac1 sshd[5786]: Accepted password for oracle from ::ffff:192.168.0.7 port 32862 ssh2
Nov 27 20:28:35 rac1 sshd[5785]: Accepted password for oracle from ::ffff:192.168.0.7 port 32862 ssh2
Nov 27 20:28:41 rac1 sshd[5806]: Authentication refused: bad ownership or modes for directory /home/oracle
Nov 27 12:28:41 rac1 sshd[5807]: Failed publickey for oracle from ::ffff:192.168.0.7 port 32863 ssh2
简要总结:
1)有日志的服务排错,一定要通过检查日志来分析问题,这个概念必须形成条件反射。
2)linux下的日志文件除了message外,/var/log/secure也很重要。找了几个讲/var/log/secure的帖子。
3)SSH服务的配置成功和相关的文件和文件夹(包括用户的主目录,authorized_keys文件有很大的关系,这点一定要注意。
---------------------------/var/log下日志文件说明------------------------------------
/var/log/secure:登录到系统存取资料的记录;FTP、SSH、TELNET...
/var/log/wtmp:记录登录者讯录,二进制文件,须用last来读取内容
/var/log/messages:杂货铺
/var/log/boot.log:记录开机启动讯息,dmesg | more
------------------------------------------------------------------------------------------
linux日志学习笔记 http://blog.chinaunix.net/u/4929/showart_61741.html
一、常识 /etc/syslog.conf 哪些服务产生的哪些等级讯息记录到哪里 二、接收远程日志 vi /etc/sysconfig/syslog /etc/init.d/syslog restart 对应client 三、logrotate * /etc/logrotate.conf logrotate.conf 才是主要配置文件,而/logrotate.d /这个目录内的所有文件都被读入 /etc/logrotate.conf来执行! logrotate [-vf] logfile 而 logrotate 的工作加入到 crontab /etc/cron.daily/logrotate;所以系统每天自动查看 四、实例: 步骤1: 也就是说: /etc/syslog.conf 与/etc/logrotate.d/* 对应文档搭配起来使用;先由syslogd 按照syslog.conf指定的方法处理消息, 五、常见指令: # dmesg | more 读/var/log/boot.log # last -n number -n :number # lastlog 认识与分析登录档 什么是登录档、干嘛要分析登录档
/var/log/secure:登录到系统存取资料的记录;FTP、SSH、TELNET...
/var/log/wtmp:记录登录者讯录,二进制文件,须用last来读取内容
/var/log/messages:杂货铺
/var/log/boot.log:记录开机启动讯息,dmesg | more
# ps aux | grep syslog
# chkconfig --list | grep syslog
# cat /var/log/secure
记录到相同地方的多个讯息源用分号间隔
vi /etc/syslog.conf
# grep 514 /etc/services
syslog 514/udp
# 将SYSLOGD_OPTIONS="-m 0"
# 改成
SYSLOGD_OPTIONS="-m 0 -r"
[root@linux ~]# netstat -tlunp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:514 0.0.0.0:* 24314/syslogd
# vi /etc/syslog.conf
*.* @192.168.1.100
* /etc/logrotate.d/
如果在 /etc/logrotate.d/ 目录文件中,没有相应的细节设定則以 /etc/logrotate.conf 设定为缺省值!
vi /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler
/var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
1、用空格作多个档案分隔
2、所有设定在{}中
3、# prerotate:在启动logrotate执行的指令
# postrotate:在做完 logrotate后需处理的指令
參數:
-v :显示过程
-f :强制执行
只是要注意一下:/var/log/messages 是否有这样的类似内容
Oct 24 15:15:35 localhost syslogd 1.4.1: restart.
要求: 登录档案每月替换一次
若> 10MB ;强制替换,不不考虑一个月的期限;
保存五备份文档;
备份文档不压缩。
~]# chattr +a /var/log/admin.log
[root@linux ~]# lsattr /var/log/admin.log
-----a------- /var/log/admin.log
只能新增不能删节除,除非chattr -a /var/log/admin.log
[root@linux ~]# mv /var/log/admin.log /var/log/admin.log.1
mv: cannot move '/var/log/admin.log' to '/var/log/admin.log.1':permission deny
步骤2:
vi /etc/logrotate.d/admin
# This configuration is from VBird 2005/10/24
/var/log/admin.log {
monthly
size=10M
rotate 5
nocompress
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/admin.log
endscript
sharedscripts
postrotate
/usr/bin/killall -HUP syslogd
/usr/bin/chattr +a /var/log/admin.log
endscript
}
步骤3:测试
# logrotate -v /etc/logrotate.conf
.....(前面省略).....
rotating pattern: /var/log/admin.log 10485760 bytes (5 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/admin.log
log does not need rotating
not running shared prerotate script, since no logs will be rotated
............
# logrotate -vf /etc/logrotate.d/admin
reading config file /etc/logrotate.d/admin
reading config info for /var/log/admin.log
然后送给 logrotat来按照/etc/logrotate.d/*文档要求来轮替日志。
dmesg | grep 'eth'
[root@linux ~]# last -f filename
-f :last 预设值为读 /var/log/wtmp 文档,而 -f 读取不同的文档
# last -n 5 -f /var/log/wtmp.1
dmtsai2 pts/2 Mon Oct 24 14:18 - 14:18 (00:00)
dmtsai2 work:0 work Mon Oct 24 14:18 gone - no logout
dmtsai2 work:0 work Mon Oct 24 14:18 - 14:18 (00:00)
dmtsai2 pts/2 Mon Oct 24 14:18 - 14:18 (00:00)
dmtsai2 work:0 work Mon Oct 24 14:18 - 14:18 (00:00)
只读取/var/log/lastlog 内容,只包括当前系统上面所有的帐号最近一次LOGIN的时间。
这部分是最容易被新手所忽略的,那就是详细而确实的纪录或者是备份系统的登录档。什么是登录档呢?简单的说,就是记录系统活动记录的几个档案,例如:何时、何地(来源 IP )、何人( login name )、做了什么动作,另外就是系统在什么时候做了什么样的行为时,发生了什么样的事件等等,要知道的是,我们的 Linux 主机在背景之下,有相当多的 daemons 在工作着,那么这些工作中的程序总是会有一些讯息显示,这些显示的讯息就是给记录在登录档当中啦,也就是说,记录这些系统的重要讯息,就是登录档所进行的纪录工作的内容了。而由于这些记录的工作内容对于系统的资讯太详细了,若被取得将可能影响到系统的安全性,因此,通常这些登录档只有 root 可以进行视察的功能!
那么为何要记录与解析登录档呢?这是由于记录档有几个重要的功能:
· 解决系统的错误:这个对于系统管理员来说是很重要的资讯,例如:开机的过程当中侦测到的硬体讯息资料会记录到记忆体当中,由于这些侦测的资讯可以提供我们了解硬体资讯,所以如果你的系统发生问题时,可以下达 dmesg 看看硬体的侦测有没有发生错误呢!另外,如果系统资源被耗尽、核心活动发生错误等等事件发生的时候,则系统登录档亦会将错误的讯息记录在登录档中(通常是 /var/log/messages ),这些都可以藉以取得错误发生时的资讯,并加以克服问题!!
· 解决网路服务的问题:在安装或设定新服务的套件时,最常使用到这个功能了!例如在安装启动 sendmail 时,如果 sendmail 无法提供服务的时候,那么无法提供服务的问题则会被纪录到登录档当中去,则只要分析登录档就可以了解问题点,并藉以解决问题啦!( 所以我们常说『天助自助者』是真的啦!察看(1)萤幕上面的错误讯息与(2)登录档的错误资讯,几乎可以解决大部分的 Linux 问题! )
· 记录登录资讯:这个东西相当的重要!例如:有天您的 apache 这个 WWW 服务挂了,你怎么知道何时挂掉的?而最后登入者是谁?!这都可以藉由分析 apache 的登录档来取得资讯;此外,万一有一天您的系统被入侵,并且被利用来攻击他人的主机,这个时候对方的主机查出是您的 Linux 在进行攻击的行为,这个时候你要如何告知对方您的主机是由于被入侵所导致的问题,并且协助对方继续往来源追查呢?!呵呵!此时登录档可是相当重要的呢!
因此,一个有经验的主机管理员,会随时随地查阅一下自己的登录档,以随时掌握系统的最新脉动!那么见的几个登录档有哪些呢?一般而言,有下面几个:
· /var/log/secure:记录登入系统存取资料的档案,例如 pop3, ssh, telnet, ftp 等都会记录在此档案中;
· /var/log/wtmp:记录登入者的讯息资料,由于本档案已经被编码过,所以必须使用 last 这个指令来取出档案的内容;
· /var/log/messages:这个档案相当的重要,几乎系统发生的错误讯息(或者是重要的资讯)都会记录在这个档案中;
· /var/log/boot.log:记录开机或者是一些服务启动的时候,所显示的启动或关闭讯息;
· /var/log/maillog 或 /var/log/mail/*:纪录邮件存取或往来( sendmail 与 pop3 )的使用者记录;
· /var/log/cron:这个是用来记录 crontab 这个例行性服务的内容的!
· /var/log/httpd, /var/log/news, /var/log/mysqld.log, /var/log/samba, /var/log/procmail.log: 分别是几个不同的网路服务的记录档啦!
好了,那么记录了这些登录档之后,我要做什么分析呀!?基本上,一个好的系统管理员大概都知道『一部主机负责的服务最好能少尽量少』,这是什么意思呢?也就是说,这部主机为邮件主机那么就专门负责邮件工作,不要还搞 WWW 服务!这样有几个好处,除了系统的安全性较佳之外(因为开的 port 变少了!),记录档的解析也会比较简单!因为我们的 /var/log/secure 记录的登入者资讯就会比较有一致性!那么我们就可以查询一下每日登入的使用者帐号啦与错误讯息啦等等的!(当然啰,如果你的频宽够、经验丰富的话,那么一部主机上面安装所有的网路服务也是可以的啦!)基本上,检查/var/log/messages、/var/log/secure这些个档案也就相当够了!因为系统发生的错误或者是警告讯息通常都会写入这个档案中。
但是,如果我手边有数十部主机怎么办?我要不要一部一部去察看 log file 呢?呵呵!那样察看会死人ㄋㄟ?因此,我们底下也使用一个简易的登录档来分析 Red Hat 或 Mandrake 这两种 Linux distribution 的登录档吧!
Linux 登录档的规划: syslogd, logrotate,
在系统的登录档系统当中,大多以一支常驻程式来进行写入这些讯息的这个工作,那就是 syslogd 这支程式啦!另外,由于登录档如果一直长大的话,那么这些登录档的写入动作将会很没有效率,这是因为档案太大时,ASCII 格式码的资料档案写入比较麻烦的缘故!那么怎么进行登录档资料的备份工作呢?呵呵!那就使用 logrotate 吧!将资料进行轮转( rotate )?什么是轮转?!(我ㄌㄟ台语不轮转呦!?)其实也可以称为轮替啦!基本上,就是将旧的 log 档案更改名称,然后建立一个空的 log 档案,如此一来,新的 log 档案将从零开始记录,然后只要将旧的 log 档案留下一阵子,嗯!那就可以达到将登录档『轮转』的目的啦!此外,如果旧的纪录(大概要保存几个月吧!)保存了一段时间没有问题,那么就可以让系统自动的将他砍掉,免得占掉很多宝贵的硬碟空间说!(举个例子来说,我的 WWW 网站一个月的登录档,所占掉的硬碟空间大小,大概就有 1GB 这么多....而且都是纯文字档....很可怕吧!)
所以说,基本上,针对 log 档案来设计的服务有这两支:
o syslogd:进行系统或者是网路服务的登录档记录工作;
o logrotate:将旧的资料更名,并且建立新的登录档,以保持登录档的『新鲜』,并视设定将最旧的登录档删除。
所以,接着下来我们来谈一谈怎么样规划这两支程式呢?!就由 syslogd 这支程式先谈起吧!毕竟得先有登录档,才可以进行 logrotate 呀!您说是吧!?
o syslogd:
我们在Linux里面预设就已经使用了syslogd这支程式来记录系统的登入资料,不相信的话,你可以使用ps来查询一下:
[root @test root]# ps -aux|grep syslog root 782 0.0 0.8 1340 508 ? S Oct30 0:00 syslogd -m 0 root 11044 0.0 1.1 2408 732 pts/1 S 00:03 0:00 grep syslog
o
看到syslog这个服务名称了吧?!呵呵!所以知道他已经在背景底下工作啰!syslog 这支程式可以提供『系统登入资讯记录』及『Kernel错误或警示资讯记录』等功能,此外,他还提供了『本地端与远端电脑的登录资讯记录』功能,所以,可以将远端的主机登入资讯同时记录在本地端呢!很不错的功能吧!!此外,目前正规使用的系统服务中,大都预设支援以 syslog 这一个服务来记录他的登录档案资料,例如apache, samba, sendmail 等等。而通常syslog提供的记录参数主要有:
§ 事件发生时间;
§ 主机名称;
§ 启动此事件的服务名称(例如 httpd, samba...)
§ 讯息资料内容
等等这些资讯,当然,这些资讯的详细度是可以修改的,此外,这些资讯可以作为系统除错之用呢!我们先来看一下/var/log/secure的内容显示些什么呢?
[root @test root]# vi /var/log/secure Nov 4 16:28:35 test xinetd[7831]: START: telnet pid=7841 from=192.168.1.11 Nov 4 16:28:35 test xinetd[7841]: FAIL: telnet address from=192.168.1.11 Nov 4 23:41:17 test sshd[10803]: Accepted password for test from 192.168.1.11 port 3117 ssh2 Nov 4 23:41:17 test sshd(pam_unix)[10805]: session opened for user test by (uid=500) Nov 4 23:41:29 test su(pam_unix)[10838]: authentication failure; logname=test uid=500 euid=0 tty= ruser=test rhost= user=root Nov 4 23:41:34 test su(pam_unix)[10839]: session opened for user root by test(uid=500)
在上面的表格中,可以看到每笔记录的主要内容是:
<日期与时间><主机名称><服务名称><显示讯息>
以第一笔资料来看,<日期是 Nov 4 的 16:28:35 时候>,在<主机 test 当中>,<那个 xinetd 服务的内容有资料啦>,<该程序的 PID 为 7831,显示的讯息,说的是telnet这个由xinetd启动的服务有人登入,登入者的IP是192.168.1.11>,这样够详细了吧!还有很多的资讯值得看的呢!尤其是/var/log/messages的内容。然后,不要忘记了,在最后一笔资料中,还记录了可以使用su的使用者的uid为500,帐号名称为test,那么如果这个资料被人家夺走了,呵呵!未来外面的cracker将可能试图以test这个帐号来猜测你的密码,并加以破解,嗯!真的很重要吧!所以这些资料很多都不能外流呢!
好了,再来看到我们要如何来设定 syslogd 呢?!刚刚说到 syslog 可以记录我们系统中的几乎所有的预设的系统工作,那么万一我的网路服务是自行设定的呢?!例如以 Tarball 安装好的服务套件。OK!我们可以藉由修改 syslog 的参数档来达到这个目的。那么预设的 syslog 参数档放在哪里呢?!
§ /etc/syslog.conf
其实预设的 syslogd 程式的参数档案就是 /etc/syslog.conf 这个档案内容啦!这个档案的内容可以规定『什么服务需要被记录、该服务被纪录的讯息等级如何?』。基本上,可以使用底下的句子语法来说明:
服务名称.讯息等级 存放或显示地点
§ 服务名称:例如 mail, http, news, cron, at 等等的服务名称;
§ 讯息等级:总共分成下列几种等级:
§ info : 提示一些讯息资料;
§ notice : 注意!需要比较留意的讯息;
§ waring