版权声明: 本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。
原文出处: http://www.aiview.com/notes/linux_note_2.htm
作者: 张洋 Alex_doesAThotmail.com
最后更新: 2004-11-29
目录 |
Linux系统管理命令的一点拾零,这是第二部分,主要关注Linux系统安全方面。其余的笔记请到这里浏览。
正文
chmod +t dir_name
可用于给一个目录设置粘连位,设置了粘连位的目录在属性中的最后一位有一个字母t,使用ls -l查看。设置了粘连位的目录中,用户只能删除自己创建的文件。比如一般linux发布中,/tmp目录默认被设置粘连位。
ls -ld /tmp
drwxrwxrwt 27 root root 8192 Nov 29 23:12 /tmp
另外还有两个文件许可位,suid与sgid。设置了suid或者sgid许可位的文件在执行时,不依赖于当前执行的用户(或当前执行用户的组),而使用此文件所有者(或所有者的组)的身份来执行。
设置了suid或者sgid位的文件,相应许可位rwx中的x变为s。
使用如下命令设置设置suid位:
chmod u+s filename
ls -l filename
-rwsr-xr-x
使用如下命令设置设置sgid位:
chmod g+s filename
ls -l filename
-rwxr-sr-x
使用下面的命令可以列出系统中所有的suid或者sgid程序:
find / /( -perm -02000 -o -perm -04000 /) -ls
定期使用命令
grep -i 'authentication failure' /var/log/messages > failed_logins.txt
查看系统是否有未成功的登录企图是很有用的,不同的linux发布可能有不同的特征串,其中-i参数指定匹配中忽略大小写。
也可以把这个命令作为一个任务定期运行,但要注意文件的输出问题,以及定期做检查与清理工作。
使用chattr +a filename
可以设置一个文件为追加模式,只能加入内容,不允许删除,或者减少内容的操作,只有root能够设置这个属性。
注意,设置了+a 的文件即使root本身也不无法修改和删除,除非使用chattr -a filename去除属性设置,这个操作可以应用于系统的日志文件,这些文件正常情况下只是追加,即使root也不会有删除这些文件内容的需要,这会给已取得root权限的黑客造成一点小的障碍,延误他破坏的进程,虽然只是一小步。
设置了+s属性的文件,在删除时,会把磁盘块清零。
使用lsattr filename 查看一个文件使用chattr设置的属性。
LIDS,一个内核级的Linux入侵检测系统,可以检测到Nmap、SATAN等工具所作的半公开扫描、SYN秘密扫描、秘密FIN以及Xmas等。可讲检测到的扫描通过syslog后者email记录下来。
下载地址http://www.lids.org
安装lids之后需要重新编译内核,再次安装并重启动linux系统。
Linux系统的日志主要分为两种类型:
进程所属日志
syslog消息
前者是由用户进程或其他系统服务进程自行生成的日志,比如apache服务器的access_log与error_log日志文件。
后者是由系统syslog记录的日志,任何希望记录日志的系统进程或者用户进程都可以给调用syslog来记录日志,这是一个面对多数应用程序记录日志的通用解决方法。
一般这个消息会发送给/dev/log,然后由syslog记入日志文件。
syslogd是linux系统中默认的系统日志守护进程,可以通过/etc/syslog.conf进行配置消息的去向。如下行取自/etc/syslog.conf文件:
--------------------
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* /var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Save boot messages also to boot.log
local7.* /var/log/boot.log
--------------------
syslog中的功能划分如下:
auth 安全性/验证消息(负面)
authpriv 安全性/验证消息
cron cron 和at
daemon 其他系统守护进程(sshd,inetd,pppd等)
kern 内核消息
lpr 行打印子系统
mail 邮件子系统(sendmail,postfix,qmail等)
news Usenet新闻消息
syslog 内部syslog消息
user 一般用户级消息
uucp UUCP子系统
local0-local7 自定义的级别
syslog的日志级别:
emerg 系统以不可用
alert 必须马上采取行动
crit 危急
err 错误
warning 警告
notice 普通但重要的情形
info 通知消息
debug 调试消息
syslog.conf 的第一列用来指定日志功能和日志级别,中间用.隔开,可以使用*来匹配所有的日志功能和日志级别
第二列是消息的分发目标,可以有如下格式:
/path/to/filename 将消息追加到指定的文件尾,最常用
@loghost 将消息写到loghost主机上的syslog服务器
|/path/to/named_pipe 将消息写到指定的命名管道(便于外部程序过滤消息)
user1, user2 将消息写到指定的用户
* 将消息写到所有的用户
/de/console, /dev/tty1 等 将消息写到指定的终端
一个好的syslog.conf应该如下:
# Log ALL messages to /var/log/messages
# for easy scanning by log checkers
*.debug /var/log/messages
# write to terminals for really bad situations
kern,daemon.crit /dev/console
kern,daemon.crit root
*.emerg *
# Separate out other logs to be easier to read
# Debug level for more important facilities
kern.debug /var/log/kern.log
mail.debug /var/log/mail.log
daemon.debug /var/log/daemon.log
auth.debug /var/log/auth.log
syslog.debug /var/log/syslog.log
authpriv.debug /var/log/authpriv.log
fpt.debug /var/log/ftp.log
# Notice fine for others
user.notice /var/log/user.log
lpr.notice /var/log/lpr.log
news.notice /var/log/news.log
uucp.notice /var/log/uucp.log
cron.notice /var/log/cron.log
local0,local1,local2.notice /var/log/local.log
local3,local4,local5.notice /var/log/local.log
local6.notice,local7.notice /var/log/local.log
在修改了syslog.conf文件的同时,别忘了,应该把旧的日志文件归档到一个统一的目录,比如: old_log,这样可以使日志文件更清晰一些。但要注意,新的日志文件中,也使用了messages这个文件。
syslogd也可以在shell中被调用,任何验证的用户都可以通过如下调用,在日志中产生一行:
logger -p kern.alert -t 'su(pam_unix)' "authentication failure..."
这与一条失败验证产生的日志一模一样。而且黑客可能会大量的产生无用日志信息,用来塞满日志系统,使日志发生轮回,以清除旧的日志,或者使日志塞满,无法再记录新的日志。
因为,我们在保护日志的同时,也必须认识到,日志中的内容并不是完全可信的。
日志文件的许可设置原则:
只有root可以写入日志文件,并且只有logs组的用户才有读权限,如下
# addgroup logs
# cd /var/log
# chgrp -R logs .
# find . -type -d | xargs chmod 750
# find . -type -f | xargs chmod 640
# chmod 750 .
还需要保证/var/log 目录只有root才能写入,否则日志可以被别人删除:
ls -ld /var/log
drwxr-xr-x 17 root root 4096 Nov 29 01:52 /var/log
一种保护日志的方式,在网络中设定一台秘密的syslog主机,把这台主机的网卡设为混杂模式,用来监听子网内所有的syslog包,这样把所有需要传送日志的主机配置为向一台不存在的主机发送日志即可。
这样即使黑客攻陷了目标主机,也无法通过syslog.conf文件找到备份日志的主机,那只是一个不存在的主机。实际操作中还可以辅以交换机的配置,以确保syslog包可以被备份日志主机上的syslog进程接受到。
比如把syslog.conf中的传送日志主机设为 @192.168.0.13,但实际网络中不存在这个日志主机,实际可能是192.168.0.250或者其他主机正在接受syslog包。
子网掩码30意味着这个子网中只有2台主机。
touch命令可用来修改文件属性
touch -t 200411280000.00 filename
如下命令可以用于找出2004年11月28日以后所有修改过的文件:
touch -t 200411280000.00 /tmp/comparison
find / /( -newer /tmp/comparison -o -cnewer /tmp/comparison /) -ls
有关系统漏洞方面的最受推荐的一个邮件列表:
Bugtraq,在这里订阅 http://www.security-focus.com/archive
其他还有Vulnwatch和Linux Security等。
Vulnwatch 在这里订阅 http://www.vulnwatch.org/subscribe.html
Linux Security 在这里订阅 http://www.linuxsecurity.com/general/mailinglists.html
参考资源
-
Linux 系统管理学习笔记(一)
http://www.aiview.com/notes/linux_note.htm -
《Linux 黑客大曝光》第二版,by Brain Hatch, James Lee. 译者:王一川,清华大学出版社出版
-
有关系统漏洞方面的邮件列表资源:
-
Vulnwatch: http://www.vulnwatch.org/subscribe.html
-
Linux Security: http://www.linuxsecurity.com/general/mailinglists.html