posts - 17,  comments - 7,  trackbacks - 0
rm: cannot remove `/usr/sbin/sshd': Operation not permitted问题

今天同事给我移交了一台服务器redhat9
我开始升级openssh-4.3p1.tar.gz,最后一步出现


QUOTE:
/usr/bin/install -c -m 0755 -s ssh-keygen /usr/bin/ssh-keygen
/usr/bin/install -c -m 0755 -s ssh-keyscan /usr/bin/ssh-keyscan
/usr/bin/install -c -m 0755 -s sshd /usr/sbin/sshd
/usr/bin/install: cannot remove `/usr/sbin/sshd': Operation not permitted
make: *** [install-files] Error 1
也无法手动删除/usr/sbin/sshd这个文件,真是很奇怪
[root@test spider]# rm -rf /usr/sbin/sshd
rm: cannot remove `/usr/sbin/sshd': Operation not permitted

看一下文件属性
[root@test spider]# ll /usr/sbin/sshd
-rwxr-xr-x   1 root   root   281824 Feb 5 18:53 /usr/sbin/sshd

[root@test spider]# lsattr /usr/sbin/sshd
suS--adAc---- /usr/sbin/sshd
正常应该是
[root@test openssh-4.2p1]# lsattr /usr/sbin/sshd
------------- /usr/sbin/sshd

去掉文件的所有附加属性
[root@test spider]# chattr -suSadAc /usr/sbin/sshd

然后升级openssh-4.3p1.tar.gz,一切正常

附文一篇

http://oldsite.linuxaid.com.cn/solution/showsol.jsp?i=415#con

使用chattr提高ext2文件系统的安全性

简介
1.什么是ext2的属性(attribute)
2.使用什么命令设置和显示ext2文件系统的属性
3.ext2属性和文件权限的区别
4.我们应该使用chattr做什么?
4.1.安装、升级软件
4.2.管理用户和用户组
5.不能使用chattr命令的目录
总结

简介
众所周知,Linux内核中有大量安全特征。其中有很多的特征有着广泛的应用,但是绝大多数的系统管理员(包括一些资深系统管理员)都忽略了EXT2文件系统的属性(attribute)。Linux的这种安全特征甚至远没有Lids和Tripwire等外部安全工具受关注。本文将详细介绍EXT2文件系统的属性已经如何使用这个特征保护系统的安全。

1.什么是ext2的属性(attribute)
从Linux的1.1系列内核开始,ext2文件系统就开始支持一些针对文件和目录的额外标记或者叫作属性(attribute)。在2.2和2.4系列的内核中,ext2文件系统支持以下属性的设置和查询:

A
Atime。告诉系统不要修改对这个文件的最后访问时间。

S
Sync。一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。

a
Append Only。系统只允许在这个文件之后追加数据,不允许任何进程覆盖或者截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。

i
Immutable。系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。

d
No dump。在进行文件系统备份时,dump程序将忽略这个文件。

c
Compress。系统以透明的方式压缩这个文件。从这个文件读取时,返回的是解压之后的数据;而向这个文件中写入数据时,数据首先被压缩之后,才写入磁盘。

s
Secure Delete。让系统在删除这个文件时,使用0填充文件所在的区域。

u
Undelete。当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件。

但是,虽然文件系统能够接受并保留指示每个属性的标志,但是这些属性不一定有效,这依赖于内核和各种应用程序的版本。下表显示每个版本支持的属性标志:

* 允许设置这个标志并使设置生效
i 允许设置这个标志但忽略其值
- 完全忽略这个标志

  1.0 1.2 2.0 2.2 2.4
A - - * * *
S * * * * *
a - * * * *
i - * * * *
d - * * * *
c i i i i i
s * * i i i
u i i i i i

虽然早期的内核版本支持安全删除特征,但是从1.3系列的内核开始,开发者抛弃的对这个特征的实现,因为它似乎只能够提高一点点的安全性,而糟糕的是它会给不熟悉安全删除继承问题的用户造成安全的假象。

在对具有A属性的文件进行操作时,A属性可以提高一定的性能。而S属性能够最大限度的保障文件的完整性。

本文将主要讨论a属性和i属性,因为这两个属性对于提高文件系统的安全性和保障文件系统的完整性有很大的好处。同样,一些开放源码的BSD系统(如:FreeBSD和OpenBSD),在其UFS或者FFS实现中也支持类似的特征。

2.使用什么命令设置和显示ext2文件系统的属性
在任何情况下,标准的ls命令都不会一个文件或者目录的扩展属性。ext2文件系统工具包中有两个工具--chattr和lsattr,专门用来设置和查询文件属性。因为ext2是标准的Linux文件系统,因此几乎所有的发布都有e2fsprogs工具包。如果由于某些原因,系统中没有这个工具,你可以从以下地址下载这个工具包的源代码编译并安装:

http://sourceforge.net/projects/e2fsprogs

lsattr命令只支持很少的选项,其选项如下:

-a
列出目录中的所有文件,包括以.开头的文件。

-d
以和文件相同的方式列出目录,并显示其包含的内容。

-R
以递归的方式列出目录的属性及其内容。

-v
列出文件版本(用于网络文件系统NFS)。

chattr命令可以通过以下三种方式执行:

chattr +Si test.txt

给test.txt文件添加同步和不可变属性。

chattr -ai test.txt

把文件的只扩展(append-only)属性和不可变属性去掉。

chattr =aiA test.txt

使test.txt文件只有a、i和A属性。

最后,每个命令都支持-R选项,用于递归地对目录和其子目录进行操作。

3.ext2属性和文件权限的区别

几乎所有的系统管理员都理解UNIX风格文件系统的权限和所有者以及ls命令的显示,例如:
[root@typhoid nixe0n]# ls -al test*
-rw-rw-r-- 1 nixe0n users 0 Nov 17 17:02 test.conf
-rw-rw-r-- 1 nixe0n users 0 Nov 17 17:02 test.log
-rw-rw-r-- 1 nixe0n users 0 Nov 16 19:41 test.txt

从ls的输出结果看,这些文件属于用户nixe0n,而nixe0n所在的用户组是users。用户nixe0n本人和users用户组的成员尉有具有对文件的修改权限,而其他的用户只有读取文件的权限。下面是lsattr命令的输出:

[root@typhoid nixe0n]# lsattr -a test*
---i-------- test.conf
----a------- test.log
------------ test.txt

输出结果显示,test.log只能被添加,而test.conf文件不准修改。在UNIX系统中,如果一个用户以root的权限登录,文件系统的权限控制将无法对root用户和以root权限运行的进程进行任何的限制。这样对于UNIX类的操作系统,如果攻击者通过远程或者本地攻击获得root权限将可能对系统造成严重的破坏。而ext2文件系统可以作为最后一道防线,最大限度地减小系统被破坏的程度,并保存攻击者的行踪。ext2属性是由 sys_open()和sys_truncate()等系统调用检查和赋予的,不受用户识别号和其他因素的影响,在任何情况下,对具有不可修改 (immutable)属性的文件的进行任何修改都会失败,不管是否是root用户进行的修改。

但是,还有一个问题是root权限的用户可以通过删除i属性实现对文件的修改。这种防护只不过给获得root权限的攻击者加了一点小麻烦罢了,系统的安全性并没有根本性的提高。

在2.1 之前的内核版本中,存在一个安全层(securelevel)的特征。使用安全层可以解决上述问题,因为如果系统的安全层大于0,内核将不允许对任何文件的i属性进行修改。这些版本的内核由sysctl命令的"kernel.securelevel"变量进行控制。如果在启动时,这个变量的值被设置为1或者更大的值,内核将不允许对具有i属性和a属性文件进行修改,除非国旗动到单用户状态。

但是,由于引入了更为灵活的内核能力特征 (kernel capabilities),以后的内核不再支持安全层。使用内核能力,也可以实现类似的限制。工具lcap用来查询和调整内核能力约束集(kernel capabilities bounding set)。在启动脚本中加入以下命令,就可以实现对具有i属性和a属性文件的保护:

lcap CAP_LINUX_IMMUTABLE
lcap CAP_SYS_RAWIO

第一个命令删除任何用户(包括超级用户)对i标志的修改能力。第二个命令删除任何用户(主要针对超级用户)对块设备的原始访问(raw access)能力,防止一些技术高超的攻击者直接修改文件系统索引节点的immutable域。BTW,在系统启动时,CAP_SYS_RAWIO能力应该直接删除,这个能力是一个非常大的潜在威胁。高明的攻击者获得了超级用户权限之后,通过/dev/kmem设备可以直接修改内核内存。通过这种方式,可以破坏系统的内核能力约束集(kernel capabilities bounding)。如果没有任何参数,会列出内核支持的能力和目前生效的内核能力。

一旦一个内核能力被删除,就只有在系统重新启动,进入到单用户模式才能删除能力限制。

感兴趣的读者,可以从下面的连接中获得更为详细的能力方面的知识:

LCAP - Linux内核能力约束集编辑器(Linux Kernel Capabilities Bounding Set Editor)
http://pw1.netcom.com/~spoon/lcap/

4.我们应该使用chattr做什么?
主机直接暴露在Internet或者位于其它危险的环境,有很多shell帐户或者提供HTTP和FTP等网络服务,一般应该在安装配置完成后使用如下命令:

chattr -R +i /bin /boot /etc /lib /sbin
chattr -R +i /usr/bin /usr/include /usr/lib /usr/sbin
chattr +a /var/log/messages /var/log/secure (...)

如果很少对帐户进行添加、变更或者删除,把/home本身设置为immutable属性也不会造成什么问题。在很多情况下,整个/usr目录树也应该具有不可改变属性。实际上,除了对/usr目录使用chattr -R +ii /usr/命令外,还可以在/etc/fstab文件中使用ro选项,使/usr目录所在的分区以只读的方式加载。另外,把系统日志文件设置为只能添加属性(append-only),将使入侵者无法擦除自己的踪迹。

当然,如果使用这种安全措施,需要系统管理员修改管理方式。

4.1.安装、升级软件

由于软件管理程序需要加入和删除某些文件和目录,因此在进行软件安装和升级之前需要删除某些目录和文件的immutable和append-only属性。对于Linux系统,我们一般使用rpm管理软件包,你可以使用以下命令查看要安装或者升级的软件包都有哪些文件:

rpm -qipl foopackage.rpm

然后曲调有关目录和文件的immutable和append-only属性。大多数软件包需要rpm命令对以下目录的一个或者多个进行写操作:

/bin
/sbin
/usr/bin
/usr/sbin
/usr/man
/lib
/etc

注意,如果你需要升级/usr/sbin/someprogram,你应该去掉someprogram文件以及目录/usr/sbin的immutable属性。

4.2.管理用户和用户组
如果要进行用户和用户组,以下的目录和文件需要能够被读写:
/etc
/etc/.pwd.lock
/etc/passwd
/etc/passwd-
/etc/shadow
/etc/shadow-
/etc/group
/etc/group-
/etc/gshadow
/etc/gshadow-

passwd(1)、 chsh(1)、chfn(1)、vipw(8)、vigr(8)和useradd(8)等命令需要在/etc目录下建立临时的拷贝,修改这个拷贝,然后删除原始文件,最后把新拷贝。

5.不能使用chattr命令的目录

虽然属性能够提高系统的安全性,但是它并不适合所有的目录。如果在系统中滥用chattr,可能造成很多问题,甚至使系统无法工作。

/
很显然,根分区不能有immutable属性。如果根分区具有immutable属性,系统将根本无法工作。

/dev
在启动时,syslog需要删除并重新建立/dev/log套接字设备。如果对/dev/目录设置了immutable和append-only属性,就可能出现问题,除非在启动syslogd时使用-p选项指定其它的套接字,例如:/var/run/syslog.sock。即使这样也还存在一些问题, syslog客户程序需要/dev/log套接字设备,因此需要建立一个自相真正套接字的符号连接。总而言之,为了减少麻烦,这个目录还是不要设置 immutable和append-only属性。

/tmp
有很多应用程序和系统程序需要在这个目录下建立临时文件,因此这个目录也不能设置immutable和append-only属性。

/var
这个目录不能设置immutable属性。对append-only属性的使用要根据实际情况。例如,为var/log目录下的日志文件设置了append -only属性,会使日志轮换(logrotate)无法进行,但不会造成太大问题,你需要权衡是否使用日志轮换的利弊,以绝对是否对日志文件设置 append-only属性。再比如,sendmail程序会定时地截断或者覆盖/var/log/sendmail.st文件,因此也不能设置 append-only属性。


总结
虽然ext2文件系统的属性已经出现了很长时间,但是对它的应用和系统的介绍却不是很多。很里地使用文件系统的属性,对提高系统的安全性有很大好处。

posted @ 2007-08-14 23:56 Maple-x 阅读(6724) | 评论 (0)编辑 收藏

posted @ 2007-07-23 09:29 Maple-x 阅读(398) | 评论 (0)编辑 收藏

mysql的出错代码表,根据mysql的头文件mysql/include/mysqld_error.h整理而成。错误之处,请大家指正。
1005:创建表失败
1006:创建数据库失败
1007:数据库已存在,创建数据库失败
1008:数据库不存在,删除数据库失败
1009:不能删除数据库文件导致删除数据库失败
1010:不能删除数据目录导致删除数据库失败
1011:删除数据库文件失败
1012:不能读取系统表中的记录
1020:记录已被其他用户修改
1021:硬盘剩余空间不足,请加大硬盘可用空间
1022:关键字重复,更改记录失败
1023:关闭时发生错误

1024:读文件错误
1025:更改名字时发生错误
1026:写文件错误
1032:记录不存在
1036:数据表是只读的,不能对它进行修改
1037:系统内存不足,请重启数据库或重启服务器
1038:用于排序的内存不足,请增大排序缓冲区
1040:已到达数据库的最大连接数,请加大数据库可用连接数
1041:系统内存不足
1042:无效的主机名
1043:无效连接
1044:当前用户没有访问数据库的权限
1045:不能连接数据库,用户名或密码错误
1048:字段不能为空
1049:数据库不存在
1050:数据表已存在
1051:数据表不存在
1054:字段不存在
1065:无效的SQL语句,SQL语句为空
1081:不能建立Socket连接
1114:数据表已满,不能容纳任何记录
1116:打开的数据表太多
1129:数据库出现异常,请重启数据库
1130:连接数据库失败,没有连接数据库的权限
1133:数据库用户不存在
1141:当前用户无权访问数据库
1142:当前用户无权访问数据表
1143:当前用户无权访问数据表中的字段
1146:数据表不存在
1147:未定义用户对数据表的访问权限
1149:SQL语句语法错误
1158:网络错误,出现读错误,请检查网络连接状况
1159:网络错误,读超时,请检查网络连接状况
1160:网络错误,出现写错误,请检查网络连接状况
1161:网络错误,写超时,请检查网络连接状况
1062:字段值重复,入库失败
1169:字段值重复,更新记录失败
1177:打开数据表失败
1180:提交事务失败
1181:回滚事务失败
1203:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库
1205:加锁超时
1211:当前用户没有创建用户的权限
1216:外键约束检查失败,更新子表记录失败
1217:外键约束检查失败,删除或修改主表记录失败
1226:当前用户使用的资源已超过所允许的资源,请重启数据库或重启服务器
1227:权限不足,您无权进行此操作
1235:MySQL版本过低,不具有本功能

posted @ 2007-06-21 17:22 Maple-x 阅读(948) | 评论 (1)编辑 收藏

在功能和负载达到一定的峰值的时候,就需要对用户做一次行为检测来帮助程序的优化,功能的调整以及优化~

posted @ 2007-06-21 11:45 Maple-x 阅读(276) | 评论 (0)编辑 收藏

在C语言中
$i++会产生一个临时的变量
++$i则不会
从而两个存在效率问题
for($i = 0; $i < 10; $i++)

for($i = 0; $i < 10; ++$i)
表达的意思一样,效率却不一样
不知道PHP中有没有存在这样的效率问题?

posted @ 2007-06-18 14:06 Maple-x 阅读(341) | 评论 (0)编辑 收藏
自 GD 库 1.6 版起所有的 GIF 支持都移除了,又在 GD 库 2.0.28 版起又加了回来。如果使用二者之间版本的 GD 库时本函数不可用
posted @ 2007-06-11 17:42 Maple-x 阅读(656) | 评论 (0)编辑 收藏
Active Whois 查询网站的Whois信息
https://addons.mozilla.org/firefox/2100/

HostIP.info
https://addons.mozilla.org/firefox/663/


SHOWIP 显示网站IP
https://addons.mozilla.org/firefox/590/

FileEncrypter HASH转换
https://addons.mozilla.org/firefox/3208

nftools HASH转换
http://www.net-force.nl/files/download/nftools/nftools.xpi


FireFTP FTP客户端
https://addons.mozilla.org/firefox/684/


Greasemonkey 在网页内实时插入脚本
https://addons.mozilla.org/firefox/748/

hackbar SQl注入辅助
https://addons.mozilla.org/firefox/3899/


Add n Edit Cookies  编辑COOKIES
https://addons.mozilla.org/firefox/573/

Poster 自定义构造POST的提交 包括文件上传
https://addons.mozilla.org/fr/firefox/addon/2691

RefControl 编辑REF来源等
https://addons.mozilla.org/firefox/953/

LiveHTTPHeaders 方便记录给次的GET和POST提交 并可以relpaly修改HTTP请求包
https://addons.mozilla.org/firefox/3829/

Tamper Data 监视所有的GET和POST提交
https://addons.mozilla.org/firefox/966/

User Agent Switcher 可以伪造User Agent
https://addons.mozilla.org/firefox/59/

View Dependencies 展示页面所有相关的文件
https://addons.mozilla.org/firefox/2214/

Web Developer 控制打开关闭HTML元素
https://addons.mozilla.org/firefox/60/

Jsview 查看整个页面的JS
https://addons.mozilla.org/firefox/2076/

FormFox 自动识别提交表单指向的URL
https://addons.mozilla.org/fr/firefox/addon/1579

FireBug 自动查找页面语法错误
https://addons.mozilla.org/firefox/1843/ 

PS:保存一x

posted @ 2007-06-08 15:32 Maple-x 阅读(859) | 评论 (0)编辑 收藏
mod_dosevasive是一个Apache上的可选模块,它能应对一些基于HTTP的拒绝服务攻击,就是常说的Dos或者DDos攻击,这种攻击是 让很多大小网站都头疼的攻击方式,mod_dosevasive从Apache1.3开始出现,虽然不能完全彻底的防止大规模的DDos攻击,但是对于普 通的攻击来说,还是非常不错的选择。

PS:记录一下,有空测试一下看看效果
posted @ 2007-06-08 11:34 Maple-x 阅读(298) | 评论 (0)编辑 收藏
 1<?php
 2
 3class Oracle {
 4    
 5    function connect($username, $password, $dbname, $charset='ZHS16GBK',$pconnect='1') {
 6        if($pconnect) {
 7            $conn = oci_pconnect($username, $password, $dbname, $charset);
 8        }else {
 9            $conn = oci_connect($username, $password, $dbname, $charset);
10        }
11
12        if(!$conn) {
13            echo "连接Oracle出错";
14            exit();
15        } else {
16            return $conn;
17        }
18    }
19
20    function query($conn,$sql) {
21        $query = oci_parse($conn,$sql);
22        oci_execute($query);
23        return $query;
24    }
25
26    function fetch_array($query,$type=OCI_ASSOC) {
27        return @oci_fetch_array($query,$type);
28        
29    }
30    
31    function db_count($query){ 
32          oci_fetch($query);
33          $count = oci_result($query,1);
34          return $count;
35    }
36
37    function close($conn) {
38        $re = oci_close($conn);
39        return $re;
40    }
41
42    function result($query){
43        oci_fetch($query);
44        return oci_result($query,1);
45    }
46
47}
48
49?>
posted @ 2007-06-07 12:53 Maple-x 阅读(1236) | 评论 (0)编辑 收藏
这个很早就知道,今天才感觉理解了。
定长表中所以字段都要是定长的才是定长表,以前只是对字段的理解
对数据结构设计的时候,主要的大表,最好设计成定长表。效率会提高很多

posted @ 2007-06-06 13:51 Maple-x 阅读(289) | 评论 (0)编辑 收藏
仅列出标题
共2页: 1 2 
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

留言簿(1)

随笔档案(17)

文章分类

搜索

  •  

最新评论

阅读排行榜

评论排行榜