A. 有用Postgresql的吗,哪个package好用一些
特性 MySQL PostgreSQL
实例 通过执行 MySQL 命令(mysqld)启动实例。一个实例可以管理一个或多个数据库。一台服务器可以运行多个 mysqld 实例。一个实例管理器可以监视 mysqld 的各个实例。
通过执行 Postmaster 进程(pg_ctl)启动实例。一个实例可以管理一个或多个数据库,这些数据库组成一个集群。集群是磁盘上的一个区域,这个区域在安装时初始化并由一个目录组成,所有数据都存储在这个目录中。使用 initdb 创建第一个数据库。一台机器上可以启动多个实例。
数据库 数据库是命名的对象集合,是与实例中的其他数据库分离的实体。一个 MySQL 实例中的所有数据库共享同一个系统编目。 数据库是命名的对象集合,每个数据库是与其他数据库分离的实体。每个数据库有自己的系统编目,但是所有数据库共享 pg_databases。
数据缓冲区 通过 innodb_buffer_pool_size 配置参数设置数据缓冲区。这个参数是内存缓冲区的字节数,InnoDB 使用这个缓冲区来缓存表的数据和索引。在专用的数据库服务器上,这个参数最高可以设置为机器物理内存量的 80%。 Shared_buffers 缓存。在默认情况下分配 64 个缓冲区。默认的块大小是 8K。可以通过设置 postgresql.conf 文件中的 shared_buffers 参数来更新缓冲区缓存。
数据库连接 客户机使用 CONNECT 或 USE 语句连接数据库,这时要指定数据库名,还可以指定用户 id 和密码。使用角色管理数据库中的用户和用户组。 客户机使用 connect 语句连接数据库,这时要指定数据库名,还可以指定用户 id 和密码。使用角色管理数据库中的用户和用户组。
身份验证 MySQL 在数据库级管理身份验证。 基本只支持密码认证。 PostgreSQL 支持丰富的认证方法:信任认证、口令认证、Kerberos 认证、基于 Ident 的认证、LDAP 认证、PAM 认证
加密 可以在表级指定密码来对数据进行加密。还可以使用 AES_ENCRYPT 和 AES_DECRYPT 函数对列数据进行加密和解密。可以通过 SSL 连接实现网络加密。 可以使用 pgcrypto 库中的函数对列进行加密/解密。可以通过 SSL 连接实现网络加密。
审计 可以对 querylog 执行 grep。 可以在表上使用 PL/pgSQL 触发器来进行审计。
查询解释 使用 EXPLAIN 命令查看查询的解释计划。 使用 EXPLAIN 命令查看查询的解释计划。
备份、恢复和日志 InnoDB 使用写前(write-ahead)日志记录。支持在线和离线完全备份以及崩溃和事务恢复。需要第三方软件才能支持热备份。 在数据目录的一个子目录中维护写前日志。支持在线和离线完全备份以及崩溃、时间点和事务恢复。 可以支持热备份。
JDBC 驱动程序 可以从 参考资料 下载 JDBC 驱动程序。 可以从 参考资料 下载 JDBC 驱动程序。
表类型 取决于存储引擎。例如,NDB 存储引擎支持分区表,内存引擎支持内存表。 支持临时表、常规表以及范围和列表类型的分区表。不支持哈希分区表。 由于PostgreSQL的表分区是通过表继承和规则系统完成了,所以可以实现更复杂的分区方式。
索引类型 取决于存储引擎。MyISAM:BTREE,InnoDB:BTREE。 支持 B-树、哈希、R-树和 Gist 索引。
约束 支持主键、外键、惟一和非空约束。对检查约束进行解析,但是不强制实施。 支持主键、外键、惟一、非空和检查约束。
存储过程和用户定义函数 支持 CREATE PROCEDURE 和 CREATE FUNCTION 语句。存储过程可以用 SQL 和 C++ 编写。用户定义函数可以用 SQL、C 和 C++ 编写。 没有单独的存储过程,都是通过函数实现的。用户定义函数可以用 PL/pgSQL(专用的过程语言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 编写。
触发器 支持行前触发器、行后触发器和语句触发器,触发器语句用过程语言复合语句编写。 支持行前触发器、行后触发器和语句触发器,触发器过程用 C 编写。
系统配置文件 my.conf Postgresql.conf
数据库配置 my.conf Postgresql.conf
客户机连接文件 my.conf pg_hba.conf
XML 支持 有限的 XML 支持。 有限的 XML 支持。
数据访问和管理服务器 OPTIMIZE TABLE —— 回收未使用的空间并消除数据文件的碎片
myisamchk -analyze —— 更新查询优化器所使用的统计数据(MyISAM 存储引擎)
mysql —— 命令行工具
MySQL Administrator —— 客户机 GUI 工具 Vacuum —— 回收未使用的空间
Analyze —— 更新查询优化器所使用的统计数据
psql —— 命令行工具
pgAdmin —— 客户机 GUI 工具
并发控制 支持表级和行级锁。InnoDB 存储引擎支持 READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ 和 SERIALIZABLE。使用 SET TRANSACTION ISOLATION LEVEL 语句在事务级设置隔离级别。 支持表级和行级锁。支持的 ANSI 隔离级别是 Read Committed(默认 —— 能看到查询启动时数据库的快照)和 Serialization(与 Repeatable Read 相似 —— 只能看到在事务启动之前提交的结果)。使用 SET TRANSACTION 语句在事务级设置隔离级别。使用 SET SESSION 在会话级进行设置。
MySQL相对于PostgreSQL的劣势:
MySQL
PostgreSQL
最重要的引擎InnoDB很早就由Oracle公司控制。目前整个MySQL数据库都由Oracle控制。
BSD协议,没有被大公司垄断。
对复杂查询的处理较弱,查询优化器不够成熟
很强大的查询优化器,支持很复杂的查询处理。
只有一种表连接类型:嵌套循环连接(nested-loop),不支持排序-合并连接(sort-merge join)与散列连接(hash join)。
都支持
性能优化工具与度量信息不足
提供了一些性能视图,可以方便的看到发生在一个表和索引上的select、delete、update、insert统计信息,也可以看到cache命中率。网上有一个开源的pgstatspack工具。
InnoDB的表和索引都是按相同的方式存储。也就是说表都是索引组织表。这一般要求主键不能太长而且插入时的主键最好是按顺序递增,否则对性能有很大影响。
不存在这个问题。
大部分查询只能使用表上的单一索引;在某些情况下,会存在使用多个索引的查询,但是查询优化器通常会低估其成本,它们常常比表扫描还要慢。
不存在这个问题
表增加列,基本上是重建表和索引,会花很长时间。
表增加列,只是在数据字典中增加表定义,不会重建表
存储过程与触发器的功能有限。可用来编写存储过程、触发器、计划事件以及存储函数的语言功能较弱
除支持pl/pgsql写存储过程,还支持perl、python、Tcl类型的存储过程:pl/perl,pl/python,pl/tcl。
也支持用C语言写存储过程。
不支持Sequence。
支持
不支持函数索引,只能在创建基于具体列的索引。
不支持物化视图。
支持函数索引,同时还支持部分数据索引,通过规则系统可以实现物化视图的功能。
执行计划并不是全局共享的, 仅仅在连接内部是共享的。
执行计划共享
MySQL支持的SQL语法(ANSI SQL标准)的很小一部分。不支持递归查询、通用表表达式(Oracle的with 语句)或者窗口函数(分析函数)。
都 支持
不支持用户自定义类型或域(domain)
支持。
对于时间、日期、间隔等时间类型没有秒以下级别的存储类型
可以精确到秒以下。
身份验证功能是完全内置的,不支持操作系统认证、PAM认证,不支持LDAP以及其它类似的外部身份验证功能。
支持OS认证、Kerberos 认证 、Ident 的认证、LDAP 认证、PAM 认证
不支持database link。有一种叫做Federated的存储引擎可以作为一个中转将查询语句传递到远程服务器的一个表上,不过,它功能很粗糙并且漏洞很多
有dblink,同时还有一个dbi-link的东西,可以连接到oracle和mysql上。
Mysql Cluster可能与你的想象有较大差异。开源的cluster软件较少。
复制(Replication)功能是异步的,并且有很大的局限性.例如,它是单线程的(single-threaded),因此一个处理能力更强的Slave的恢复速度也很难跟上处理能力相对较慢的Master.
有丰富的开源cluster软件支持。
explain看执行计划的结果简单。
explain返回丰富的信息。
类似于ALTER TABLE或CREATE TABLE一类的操作都是非事务性的.它们会提交未提交的事务,并且不能回滚也不能做灾难恢复
DDL也是有事务的。
PostgreSQL主要优势:
1. PostgreSQL完全免费,而且是BSD协议,如果你把PostgreSQL改一改,然后再拿去卖钱,也没有人管你,这一点很重要,这表明了PostgreSQL数据库不会被其它公司控制。oracle数据库不用说了,是商业数据库,不开放。而MySQL数据库虽然是开源的,但现在随着SUN被oracle公司收购,现在基本上被oracle公司控制,其实在SUN被收购之前,MySQL中最重要的InnoDB引擎也是被oracle公司控制的,而在MySQL中很多重要的数据都是放在InnoDB引擎中的,反正我们公司都是这样的。所以如果MySQL的市场范围与oracle数据库的市场范围冲突时,oracle公司必定会牺牲MySQL,这是毫无疑问的。
2. 与PostgreSQl配合的开源软件很多,有很多分布式集群软件,如pgpool、pgcluster、slony、plploxy等等,很容易做读写分离、负载均衡、数据水平拆分等方案,而这在MySQL下则比较困难。
3. PostgreSQL源代码写的很清晰,易读性比MySQL强太多了,怀疑MySQL的源代码被混淆过。所以很多公司都是基本PostgreSQL做二次开发的。
4. PostgreSQL在很多方面都比MySQL强,如复杂SQL的执行、存储过程、触发器、索引。同时PostgreSQL是多进程的,而MySQL是线程的,虽然并发不高时,MySQL处理速度快,但当并发高的时候,对于现在多核的单台机器上,MySQL的总体处理性能不如PostgreSQL,原因是MySQL的线程无法充分利用CPU的能力。
目前只想到这些,以后想到再添加,欢迎大家拍砖。
PostgreSQL与oracle或InnoDB的多版本实现的差别
PostgreSQL与oracle或InnoDB的多版本实现最大的区别在于最新版本和历史版本是否分离存储,PostgreSQL不分,而oracle和InnoDB分,而innodb也只是分离了数据,索引本身没有分开。
PostgreSQL的主要优势在于:
1. PostgreSQL没有回滚段,而oracle与innodb有回滚段,oracle与Innodb都有回滚段。对于oracle与Innodb来说,回滚段是非常重要的,回滚段损坏,会导致数据丢失,甚至数据库无法启动的严重问题。另由于PostgreSQL没有回滚段,旧数据都是记录在原先的文件中,所以当数据库异常crash后,恢复时,不会象oracle与Innodb数据库那样进行那么复杂的恢复,因为oracle与Innodb恢复时同步需要redo和undo。所以PostgreSQL数据库在出现异常crash后,数据库起不来的几率要比oracle和mysql小一些。
2. 由于旧的数据是直接记录在数据文件中,而不是回滚段中,所以不会象oracle那样经常报ora-01555错误。
3. 回滚可以很快完成,因为回滚并不删除数据,而oracle与Innodb,回滚时很复杂,在事务回滚时必须清理该事务所进行的修改,插入的记录要删除,更新的记录要更新回来(见row_undo函数),同时回滚的过程也会再次产生大量的redo日志。
4. WAL日志要比oracle和Innodb简单,对于oracle不仅需要记录数据文件的变化,还要记录回滚段的变化。
PostgreSQL的多版本的主要劣势在于:
1、最新版本和历史版本不分离存储,导致清理老旧版本需要作更多的扫描,代价比较大,但一般的数据库都有高峰期,如果我们合理安排VACUUM,这也不是很大的问题,而且在PostgreSQL9.0中VACUUM进一步被加强了。
2、由于索引中完全没有版本信息,不能实现Coverage index scan,即查询只扫描索引,直接从索引中返回所需的属性,还需要访问表。而oracle与Innodb则可以;
进程模式与线程模式的对比
PostgreSQL和oracle是进程模式,MySQL是线程模式。
进程模式对多CPU利用率比较高。
进程模式共享数据需要用到共享内存,而线程模式数据本身就是在进程空间内都是共享的,不同线程访问只需要控制好线程之间的同步。
线程模式对资源消耗比较少。
所以MySQL能支持远比oracle多的更多的连接。
对于PostgreSQL的来说,如果不使用连接池软件,也存在这个问题,但PostgreSQL中有优秀的连接池软件软件,如pgbouncer和pgpool,所以通过连接池也可以支持很多的连接。
堆表与索引组织表的的对比
Oracle支持堆表,也支持索引组织表
PostgreSQL只支持堆表,不支持索引组织表
Innodb只支持索引组织表
索引组织表的优势:
表内的数据就是按索引的方式组织,数据是有序的,如果数据都是按主键来访问,那么访问数据比较快。而堆表,按主键访问数据时,是需要先按主键索引找到数据的物理位置。
索引组织表的劣势:
索引组织表中上再加其它的索引时,其它的索引记录的数据位置不再是物理位置,而是主键值,所以对于索引组织表来说,主键的值不能太大,否则占用的空间比较大。
对于索引组织表来说,如果每次在中间插入数据,可能会导致索引分裂,索引分裂会大大降低插入的性能。所以对于使用innodb来说,我们一般最好让主键是一个无意义的序列,这样插入每次都发生在最后,以避免这个问题。
由于索引组织表是按一个索引树,一般它访问数据块必须按数据块之间的关系进行访问,而不是按物理块的访问数据的,所以当做全表扫描时要比堆表慢很多,这可能在OLTP中不明显,但在数据仓库的应用中可能是一个问题。
PostgreSQL9.0中的特色功能:
PostgreSQL中的Hot Standby功能
也就是standby在应用日志同步时,还可以提供只读服务,这对做读写分离很有用。这个功能是oracle11g才有的功能。
PostgreSQL异步提交(Asynchronous Commit)的功能:
这个功能oracle中也是到oracle11g R2才有的功能。因为在很多应用场景中,当宕机时是允许丢失少量数据的,这个功能在这样的场景中就特别合适。在PostgreSQL9.0中把synchronous_commit设置为false就打开了这个功能。需要注意的是,虽然设置为了异步提交,当主机宕机时,PostgreSQL只会丢失少量数据,异步提交并不会导致数据损坏而数据库起不来的情况。MySQL中没有听说过有这个功能。
PostgreSQL中索引的特色功能:
PostgreSQL中可以有部分索引,也就是只能表中的部分数据做索引,create index 可以带where 条件。同时PostgreSQL中的索引可以反向扫描,所以在PostgreSQL中可以不必建专门的降序索引了。
B. 常用端口
端口:0
服务:Reserved
说明:通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用通常的闭合端口连接它时将产生不同的结果。一种典型的扫描,使用IP地址为0.0.0.0,设置ACK位并在以太网层广播。
端口:1
服务:tcpmux
说明:这显示有人在寻找SGI Irix机器。Irix是实现tcpmux的主要提供者,默认情况下tcpmux在这种系统中被打开。Irix机器在发布是含有几个默认的无密码的帐户,如:IP、GUEST UUCP、NUUCP、DEMOS 、TUTOR、DIAG、OUTOFBOX等。许多管理员在安装后忘记删除这些帐户。因此HACKER在INTERNET上搜索tcpmux并利用这些帐户。
端口:7
服务:Echo
说明:能看到许多人搜索Fraggle放大器时,发送到X.X.X.0和X.X.X.255的信息。
端口:19
服务:Character Generator
说明:这是一种仅仅发送字符的服务。UDP版本将会在收到UDP包后回应含有垃圾字符的包。TCP连接时会发送含有垃圾字符的数据流直到连接关闭。HACKER利用IP欺骗可以发动DoS攻击。伪造两个chargen服务器之间的UDP包。同样Fraggle DoS攻击向目标地址的这个端口广播一个带有伪造受害者IP的数据包,受害者为了回应这些数据而过载。
端口:21
服务:FTP
说明:FTP服务器所开放的端口,用于上传、下载。最常见的攻击者用于寻找打开anonymous的FTP服务器的方法。这些服务器带有可读写的目录。木马Doly Trojan、Fore、Invisible FTP、WebEx、WinCrash和Blade Runner所开放的端口。
端口:22
服务:Ssh
说明:PcAnywhere建立的TCP和这一端口的连接可能是为了寻找ssh。这一服务有许多弱点,如果配置成特定的模式,许多使用RSAREF库的版本就会有不少的漏洞存在。
端口:23
服务:Telnet
说明:远程登录,入侵者在搜索远程登录UNIX的服务。大多数情况下扫描这一端口是为了找到机器运行的操作系统。还有使用其他技术,入侵者也会找到密码。木马Tiny Telnet Server就开放这个端口。
端口:25
服务:SMTP
说明:SMTP服务器所开放的端口,用于发送邮件。入侵者寻找SMTP服务器是为了传递他们的SPAM。入侵者的帐户被关闭,他们需要连接到高带宽的E-MAIL服务器上,将简单的信息传递到不同的地址。木马Antigen、Email Password Sender、Haebu Coceda、Shtrilitz Stealth、WinPC、WinSpy都开放这个端口。
端口:31
服务:MSG Authentication
说明:木马Master Paradise、Hackers Paradise开放此端口。
端口:42
服务:WINS Replication
说明:WINS复制
端口:53
服务:Domain Name Server(DNS)
说明:DNS服务器所开放的端口,入侵者可能是试图进行区域传递(TCP),欺骗DNS(UDP)或隐藏其他的通信。因此防火墙常常过滤或记录此端口。
端口:67
服务:Bootstrap Protocol Server
说明:通过DSL和Cable modem的防火墙常会看见大量发送到广播地址255.255.255.255的数据。这些机器在向DHCP服务器请求一个地址。HACKER常进入它们,分配一个地址把自己作为局部路由器而发起大量中间人(man-in-middle)攻击。客户端向68端口广播请求配置,服务器向67端口广播回应请求。这种回应使用广播是因为客户端还不知道可以发送的IP地址。
端口:69
服务:Trival File Transfer
说明:许多服务器与bootp一起提供这项服务,便于从系统下载启动代码。但是它们常常由于错误配置而使入侵者能从系统中窃取任何 文件。它们也可用于系统写入文件。
端口:79
服务:Finger Server
说明:入侵者用于获得用户信息,查询操作系统,探测已知的缓冲区溢出错误,回应从自己机器到其他机器Finger扫描。
端口:80
服务:HTTP
说明:用于网页浏览。木马Executor开放此端口。
端口:99
服务:Metagram Relay
说明:后门程序ncx99开放此端口。
端口:102
服务:Message transfer agent(MTA)-X.400 over TCP/IP
说明:消息传输代理。
端口:109
服务:Post Office Protocol -Version3
说明:POP3服务器开放此端口,用于接收邮件,客户端访问服务器端的邮件服务。POP3服务有许多公认的弱点。关于用户名和密码交 换缓冲区溢出的弱点至少有20个,这意味着入侵者可以在真正登陆前进入系统。成功登陆后还有其他缓冲区溢出错误。
端口:110
服务:SUN公司的RPC服务所有端口
说明:常见RPC服务有rpc.mountd、NFS、rpc.statd、rpc.csmd、rpc.ttybd、amd等
端口:113
服务:Authentication Service
说明:这是一个许多计算机上运行的协议,用于鉴别TCP连接的用户。使用标准的这种服务可以获得许多计算机的信息。但是它可作为许多服务的记录器,尤其是FTP、POP、IMAP、SMTP和IRC等服务。通常如果有许多客户通过防火墙访问这些服务,将会看到许多这个端口的连接请求。记住,如果阻断这个端口客户端会感觉到在防火墙另一边与E-MAIL服务器的缓慢连接。许多防火墙支持TCP连接的阻断过程中发回RST。这将会停止缓慢的连接。
端口:119
服务:Network News Transfer Protocol
说明:NEWS新闻组传输协议,承载USENET通信。这个端口的连接通常是人们在寻找USENET服务器。多数ISP限制,只有他们的客户才能访问他们的新闻组服务器。打开新闻组服务器将允许发/读任何人的帖子,访问被限制的新闻组服务器,匿名发帖或发送SPAM。
端口:135
服务:Location Service
说明:Microsoft在这个端口运行DCE RPC end-point mapper为它的DCOM服务。这与UNIX 111端口的功能很相似。使用DCOM和RPC的服务利用计算机上的end-point mapper注册它们的位置。远端客户连接到计算机时,它们查找end-point mapper找到服务的位置。HACKER扫描计算机的这个端口是为了找到这个计算机上运行Exchange Server吗?什么版本?还有些DOS攻击直接针对这个端口。
端口:137、138、139
服务:NETBIOS Name Service
说明:其中137、138是UDP端口,当通过网上邻居传输文件时用这个端口。而139端口:通过这个端口进入的连接试图获得NetBIOS/SMB服务。这个协议被用于windows文件和打印机共享和SAMBA。还有WINS Regisrtation也用它。
端口:143
服务:Interim Mail Access Protocol v2
说明:和POP3的安全问题一样,许多IMAP服务器存在有缓冲区溢出漏洞。记住:一种LINUX蠕虫(admv0rm)会通过这个端口繁殖,因此许多这个端口的扫描来自不知情的已经被感染的用户。当REDHAT在他们的LINUX发布版本中默认允许IMAP后,这些漏洞变的很流行。这一端口还被用于IMAP2,但并不流行。
端口:161
服务:SNMP
说明:SNMP允许远程管理设备。所有配置和运行信息的储存在数据库中,通过SNMP可获得这些信息。许多管理员的错误配置将被暴露在Internet。Cackers将试图使用默认的密码public、private访问系统。他们可能会试验所有可能的组合。SNMP包可能会被错误的指向用户的网络。
端口:177
服务:X Display Manager Control Protocol
说明:许多入侵者通过它访问X-windows操作台,它同时需要打开6000端口。
端口:389
服务:LDAP、ILS
说明:轻型目录访问协议和NetMeeting Internet Locator Server共用这一端口。
端口:443
服务:Https
说明:网页浏览端口,能提供加密和通过安全端口传输的另一种HTTP。
端口:456
服务:[NULL]
说明:木马HACKERS PARADISE开放此端口。
端口:513
服务:Login,remote login
说明:是从使用cable modem或DSL登陆到子网中的UNIX计算机发出的广播。这些人为入侵者进入他们的系统提供了信息。
端口:544
服务:[NULL]
说明:kerberos kshell
端口:548
服务:Macintosh,File Services(AFP/IP)
说明:Macintosh,文件服务。
端口:553
服务:CORBA IIOP (UDP)
说明:使用cable modem、DSL或VLAN将会看到这个端口的广播。CORBA是一种面向对象的RPC系统。入侵者可以利用这些信息进入系统。
端口:555
服务:DSF
说明:木马PhAse1.0、Stealth Spy、IniKiller开放此端口。
端口:568
服务:Membership DPA
说明:成员资格 DPA。
端口:569
服务:Membership MSN
说明:成员资格 MSN。
端口:635
服务:mountd
说明:Linux的mountd Bug。这是扫描的一个流行BUG。大多数对这个端口的扫描是基于UDP的,但是基于TCP的mountd有所增加(mountd同时运行于两个端口)。记住mountd可运行于任何端口(到底是哪个端口,需要在端口111做portmap查询),只是Linux默认端口是635,就像NFS通常运行于2049端口。
端口:636
服务:LDAP
说明:SSL(Secure Sockets layer)
端口:666
服务:Doom Id Software
说明:木马Attack FTP、Satanz Backdoor开放此端口
端口:993
服务:IMAP
说明:SSL(Secure Sockets layer)
端口:1001、1011
服务:[NULL]
说明:木马Silencer、WebEx开放1001端口。木马Doly Trojan开放1011端口。
端口:1024
服务:Reserved
说明:它是动态端口的开始,许多程序并不在乎用哪个端口连接网络,它们请求系统为它们分配下一个闲置端口。基于这一点分配从端口1024开始。这就是说第一个向系统发出请求的会分配到1024端口。你可以重启机器,打开Telnet,再打开一个窗口运行natstat -a 将会看到Telnet被分配1024端口。还有SQL session也用此端口和5000端口。
端口:1025、1033
服务:1025:network blackjack 1033:[NULL]
说明:木马netspy开放这2个端口。
端口:1080
服务:SOCKS
说明:这一协议以通道方式穿过防火墙,允许防火墙后面的人通过一个IP地址访问INTERNET。理论上它应该只允许内部的通信向外到达INTERNET。但是由于错误的配置,它会允许位于防火墙外部的攻击穿过防火墙。WinGate常会发生这种错误,在加入IRC聊天室时常会看到这种情况。
端口:1170
服务:[NULL]
说明:木马Streaming Audio Trojan、Psyber Stream Server、Voice开放此端口。
端口:1234、1243、6711、6776
服务:[NULL]
说明:木马SubSeven2.0、Ultors Trojan开放1234、6776端口。木马SubSeven1.0/1.9开放1243、6711、6776端口。
端口:1245
服务:[NULL]
说明:木马Vodoo开放此端口。
端口:1433
服务:SQL
说明:Microsoft的SQL服务开放的端口。
端口:1492
服务:stone-design-1
说明:木马FTP99CMP开放此端口。
端口:1500
服务:RPC client fixed port session queries
说明:RPC客户固定端口会话查询
端口:1503
服务:NetMeeting T.120
说明:NetMeeting T.120
端口:1524
服务:ingress
说明:许多攻击脚本将安装一个后门SHELL于这个端口,尤其是针对SUN系统中Sendmail和RPC服务漏洞的脚本。如果刚安装了防火墙就看到在这个端口上的连接企图,很可能是上述原因。可以试试Telnet到用户的计算机上的这个端口,看看它是否会给你一个SHELL。连接到600/pcserver也存在这个问题。
端口:1600
服务:issd
说明:木马Shivka-Burka开放此端口。
端口:1720
服务:NetMeeting
说明:NetMeeting H.233 call Setup。
端口:1731
服务:NetMeeting Audio Call Control
说明:NetMeeting音频调用控制。
端口:1807
服务:[NULL]
说明:木马SpySender开放此端口。
端口:1981
服务:[NULL]
说明:木马ShockRave开放此端口。
端口:1999
服务:cisco identification port
说明:木马BackDoor开放此端口。
端口:2000
服务:[NULL]
说明:木马GirlFriend 1.3、Millenium 1.0开放此端口。
端口:2001
服务:[NULL]
说明:木马Millenium 1.0、Trojan Cow开放此端口。
端口:2023
服务:xinuexpansion 4
说明:木马Pass Ripper开放此端口。
端口:2049
服务:NFS
说明:NFS程序常运行于这个端口。通常需要访问Portmapper查询这个服务运行于哪个端口。
端口:2115
服务:[NULL]
说明:木马Bugs开放此端口。
端口:2140、3150
服务:[NULL]
说明:木马Deep Throat 1.0/3.0开放此端口。
端口:2500
服务:RPC client using a fixed port session replication
说明:应用固定端口会话复制的RPC客户
端口:2583
服务:[NULL]
说明:木马Wincrash 2.0开放此端口。
端口:2801
服务:[NULL]
说明:木马Phineas Phucker开放此端口。
端口:3024、4092
服务:[NULL]
说明:木马WinCrash开放此端口。
端口:3128
服务:squid
说明:这是squid HTTP代理服务器的默认端口。攻击者扫描这个端口是为了搜寻一个代理服务器而匿名访问Internet。也会看到搜索其他代理服务器的端口8000、8001、8080、8888。扫描这个端口的另一个原因是用户正在进入聊天室。其他用户也会检验这个端口以确定用户的机器是否支持代理。
端口:3129
服务:[NULL]
说明:木马Master Paradise开放此端口。
端口:3150
服务:[NULL]
说明:木马The Invasor开放此端口。
端口:3210、4321
服务:[NULL]
说明:木马SchoolBus开放此端口
端口:3333
服务:dec-notes
说明:木马Prosiak开放此端口
端口:3389
服务:超级终端
说明:WINDOWS 2000终端开放此端口。
端口:3700
服务:[NULL]
说明:木马Portal of Doom开放此端口
端口:3996、4060
服务:[NULL]
说明:木马RemoteAnything开放此端口
端口:4000
服务:QQ客户端
说明:腾讯QQ客户端开放此端口。
端口:4092
服务:[NULL]
说明:木马WinCrash开放此端口。
端口:4590
服务:[NULL]
说明:木马ICQTrojan开放此端口。
端口:5000、5001、5321、50505
服务:[NULL]
说明:木马blazer5开放5000端口。木马Sockets de Troie开放5000、5001、5321、50505端口。
端口:5400、5401、5402
服务:[NULL]
说明:木马Blade Runner开放此端口。
端口:5550
服务:[NULL]
说明:木马xtcp开放此端口。
端口:5569
服务:[NULL]
说明:木马Robo-Hack开放此端口。
端口:5632
服务:pcAnywere
说明:有时会看到很多这个端口的扫描,这依赖于用户所在的位置。当用户打开pcAnywere时,它会自动扫描局域网C类网以寻找可能的代理(这里的代理是指agent而不是proxy)。入侵者也会寻找开放这种服务的计算机。,所以应该查看这种扫描的源地址。一些搜寻pcAnywere的扫描包常含端口22的UDP数据包。
端口:5742
服务:[NULL]
说明:木马WinCrash1.03开放此端口。
端口:6267
服务:[NULL]
说明:木马广外女生开放此端口。
端口:6400
服务:[NULL]
说明:木马The tHing开放此端口。
端口:6670、6671
服务:[NULL]
说明:木马Deep Throat开放6670端口。而Deep Throat 3.0开放6671端口。
端口:6883
服务:[NULL]
说明:木马DeltaSource开放此端口。
端口:6969
服务:[NULL]
说明:木马Gatecrasher、Priority开放此端口。
端口:6970
服务:RealAudio
说明:RealAudio客户将从服务器的6970-7170的UDP端口接收音频数据流。这是由TCP-7070端口外向控制连接设置的。
端口:7000
服务:[NULL]
说明:木马Remote Grab开放此端口。
端口:7300、7301、7306、7307、7308
服务:[NULL]
说明:木马NetMonitor开放此端口。另外NetSpy1.0也开放7306端口。
端口:7323
服务:[NULL]
说明:Sygate服务器端。
端口:7626
服务:[NULL]
说明:木马Giscier开放此端口。
端口:7789
服务:[NULL]
说明:木马ICKiller开放此端口。
端口:8000
服务:OICQ
说明:腾讯QQ服务器端开放此端口。
端口:8010
服务:Wingate
说明:Wingate代理开放此端口。
端口:8080
服务:代理端口
说明:WWW代理开放此端口。
端口:9400、9401、9402
服务:[NULL]
说明:木马Incommand 1.0开放此端口。
端口:9872、9873、9874、9875、10067、10167
服务:[NULL]
说明:木马Portal of Doom开放此端口。
端口:9989
服务:[NULL]
说明:木马iNi-Killer开放此端口。
端口:11000
服务:[NULL]
说明:木马SennaSpy开放此端口。
端口:11223
服务:[NULL]
说明:木马Progenic trojan开放此端口。
端口:12076、61466
服务:[NULL]
说明:木马Telecommando开放此端口。
端口:12223
服务:[NULL]
说明:木马Hack'99 KeyLogger开放此端口。
端口:12345、12346
服务:[NULL]
说明:木马NetBus1.60/1.70、GabanBus开放此端口。
端口:12361
服务:[NULL]
说明:木马Whack-a-mole开放此端口。
端口:13223
服务:PowWow
说明:PowWow是Tribal Voice的聊天程序。它允许用户在此端口打开私人聊天的连接。这一程序对于建立连接非常具有攻击性。它会驻扎在这个TCP端口等回应。造成类似心跳间隔的连接请求。如果一个拨号用户从另一个聊天者手中继承了IP地址就会发生好象有很多不同的人在测试这个端口的情况。这一协议使用OPNG作为其连接请求的前4个字节。
端口:16969
服务:[NULL]
说明:木马Priority开放此端口。
端口:17027
服务:Concent
说明:这是一个外向连接。这是由于公司内部有人安装了带有Concent"adbot"的共享软件。Concent"adbot"是为共享软件显示广告服务的。使用这种服务的一种流行的软件是Pkware。
端口:19191
服务:[NULL]
说明:木马蓝色火焰开放此端口。
端口:20000、20001
服务:[NULL]
说明:木马Millennium开放此端口。
端口:20034
服务:[NULL]
说明:木马NetBus Pro开放此端口。
端口:21554
服务:[NULL]
说明:木马GirlFriend开放此端口。
端口:22222
服务:[NULL]
说明:木马Prosiak开放此端口。
端口:23456
服务:[NULL]
说明:木马Evil FTP、Ugly FTP开放此端口。
端口:26274、47262
服务:[NULL]
说明:木马Delta开放此端口。
端口:27374
服务:[NULL]
说明:木马Subseven 2.1开放此端口。
端口:30100
服务:[NULL]
说明:木马NetSphere开放此端口。
端口:30303
服务:[NULL]
说明:木马Socket23开放此端口。
端口:30999
服务:[NULL]
说明:木马Kuang开放此端口。
端口:31337、31338
服务:[NULL]
说明:木马BO(Back Orifice)开放此端口。另外木马DeepBO也开放31338端口。
端口:31339
服务:[NULL]
说明:木马NetSpy DK开放此端口。
端口:31666
服务:[NULL]
说明:木马BOWhack开放此端口。
端口:33333
服务:[NULL]
说明:木马Prosiak开放此端口。
端口:34324
服务:[NULL]
说明:木马Tiny Telnet Server、BigGluck、TN开放此端口。
端口:40412
服务:[NULL]
说明:木马The Spy开放此端口。
端口:40421、40422、40423、40426、
服务:[NULL]
说明:木马Masters Paradise开放此端口。
端口:43210、54321
服务:[NULL]
说明:木马SchoolBus 1.0/2.0开放此端口。
端口:44445
服务:[NULL]
说明:木马Happypig开放此端口。
端口:50766
服务:[NULL]
说明:木马Fore开放此端口。
端口:53001
服务:[NULL]
说明:木马Remote Windows Shutdown开放此端口。
端口:65000
服务:[NULL]
说明:木马Devil 1.03开放此端口。
端口:88
说明:Kerberos krb5。另外TCP的88端口也是这个用途。
端口:137
说明:SQL Named Pipes encryption over other protocols name lookup(其他协议名称查找上的SQL命名管道加密技术)和SQL RPC encryption over other protocols name lookup(其他协议名称查找上的SQL RPC加密技术)和Wins NetBT name service(WINS NetBT名称服务)和Wins Proxy都用这个端口。
端口:161
说明:Simple Network Management Protocol(SMTP)(简单网络管理协议)。
端口:162
说明:SNMP Trap(SNMP陷阱)
端口:445
说明:Common Internet File System(CIFS)(公共Internet文件系统)
端口:464
说明:Kerberos kpasswd(v5)。另外TCP的464端口也是这个用途。
端口:500
说明:Internet Key Exchange(IKE)(Internet密钥交换)
端口:1645、1812
说明:Remot Authentication Dial-In User Service(RADIUS)authentication(Routing and Remote Access)(远程认证拨号用户服务)
端口:1646、1813
说明:RADIUS accounting(Routing and Remote Access)(RADIUS记帐(路由和远程访问))
端口:1701
说明:Layer Two Tunneling Protocol(L2TP)(第2层隧道协议)
端口:1801、3527
说明:Microsoft Message Queue Server(Microsoft消息队列服务器)。还有TCP的135、1801、2101、2103、2105也是同样的用途。
端口:2504
说明:Network Load Balancing(网络平衡负荷)
C. kerberos系统隐患有什么方法可修复
windows repair是一个全能型的系统修复软件工具,Win8、Win7、WinXP系统不管是32位还是64位都可以修复,可以把windows恢复到初始设置,可以修复诸如注册表权限问题、ie、自动更新、防火墙等等一系列故障 主要功能: 1、重置注册表权限 2、重置文件权限 3、注册系统文件 4、修复wmi.(一项核心的windows管理技术),可能也就是windows自带的“管理”功能 5、修复windows防火墙 6、修复ie浏览器 7、修复MDAC和MS jet(微软数据库访问组件和资料库引擎) 8、还原host文件 9、修复图标 10、修复winsock和刷新DNS缓存 11、删除临时文件 12、修复代理设置 13、不隐藏非系统文件 14、修复windows更新功能
D. 关于用户登录方式
一、了解Windows XP的
几种登录类型
1. 交互式登录
交互式登录是我们平常登录时最常见的类型,就是用户通过相应的用户账号(User Account)和密码在本机进行登录。有些网友认为“交互式登录”就是“本地登录”,其实这是错误的。“交互式登录”还包括“域账号登录”,而“本地登录”仅限于“本地账号登录”。
这里有必要提及的是,通过终端服务和远程桌面登录主机,可以看做“交互式登录”,其验证的原理是一样的。
在交互式登录时,系统会首先检验登录的用户账号类型,是本地用户账号(Local User Account),还是域用户账号(Domain User Account),再采用相应的验证机制。因为不同的用户账号类型,其处理方法也不同。
◇ 本地用户账号
采用本地用户账号登录,系统会通过存储在本机SAM数据库中的信息进行验证。所以也就是为什么Windows2000忘记Administrator密码时可以用删除SAM文件的方法来解决。不过对于Windows XP则不可以,可能是出于安全方面的考虑吧。用本地用户账号登录后,只能访问到具有访问权限的本地资源。(图1)
图1
◇域用户账号
采用域用户账号登录,系统则通过存储在域控制器的活动目录中的数据进行验证。如果该用户账号有效,则登录后可以访问到整个域中具有访问权限的资源。
小提示:如果计算机加入域以后,登录对话框就会显示“登录到:”项目,可以从中选择登录到域还是登录到本机。
2. 网络登录
如果计算机加入到工作组或域,当要访问其他计算机的资源时,就需要“网络登录”了。如图2,当要登录名称为Heelen的主机时,输入该主机的用户名称和密码后进行验证。这里需要提醒的是,输入的用户账号必须是对方主机上的,而非自己主机上的用户账号。因为进行网络登录时,用户账号的有效性是由受访主机控制的。
图2
3. 服务登录
服务登录是一种特殊的登录方式。平时,系统启动服务和程序时,都是先以某些用户账号进行登录后运行的,这些用户账号可以是域用户账号、本地用户账号或SYSTEM账号。采用不同的用户账号登录,其对系统的访问、控制权限也不同,而且,用本地用户账号登录,只能访问到具有访问权限的本地资源,不能访问到其他计算机上的资源,这点和“交互式登录”类似。
从图3的任务管理器中可以看到,系统的进程所使用的账号是不同的。当系统启动时,一些基与Win32的服务会被预先登录到系统上,从而实现对系统的访问和控制。运行Services.msc,可以设置这些服务。由于系统服务有着举足轻重的地位,一般都以SYSTEM账号登录,所以对系统有绝对的控制权限,因此很多病毒和木马也争着加入这个贵族体系中。除了SYSTEM,有些服务还以Local Service和Network Service这两个账号登录。而在系统初始化后,用户运行的一切程序都是以用户本身账号登录的。
图3
从上面讲到的原理不难看出,为什么很多电脑文章告诉一般用户,平时使用计算机时要以Users组的用户登录,因为即使运行了病毒、木马程序,由于受到登录用户账号相应的权限限制,最多也只能破坏属于用户本身的资源,而对维护系统安全和稳定性的重要信息无破坏性。
4. 批处理登录
批处理登录一般用户很少用到,通常被执行批处理操作的程序所使用。在执行批处理登录时,所用账号要具有批处理工作的权利,否则不能进行登录。
平常我们接触最多的是“交互式登录”,所以下面笔者将为大家详细讲解“交互式登录”的原理。
二、交互式登录,系统用了哪些组件
1. Winlogon.exe
Winlogon.exe是“交互式登录”时最重要的组件,它是一个安全进程,负责如下工作:
◇加载其他登录组件。
◇提供同安全相关的用户操作图形界面,以便用户能进行登录或注销等相关操作。
◇根据需要,同GINA发送必要信息。
2. GINA
GINA的全称为“Graphical Identification and Authentication”——图形化识别和验证。它是几个动态数据库文件,被Winlogon.exe所调用,为其提供能够对用户身份进行识别和验证的函数,并将用户的账号和密码反馈给Winlogon.exe。在登录过程中,“欢迎屏幕”和“登录对话框”就是GINA显示的。
一些主题设置软件,例如StyleXP,可以指定Winlogon.exe加载商家自己开发的GINA,从而提供不同的Windows XP的登录界面。由于这个可修改性,现在出现了盗取账号和密码的木马。
一种是针对“欢迎屏幕”登录方式的木马,它模拟了Windows XP的欢迎界面。当用户输入密码后,就被木马程序所获取,而用户却全然不知。所以建议大家不要以欢迎屏幕来登录,且要设置“安全登录”。
另一种是针对登录对话框的GINA木马,其原理是在登录时加载,以盗取用户的账号和密码,然后把这些信息保存到%systemroot%system32下的WinEggDrop.dat中。该木马会屏蔽系统以“欢迎屏幕”方式登录和“用户切换”功能,也会屏蔽“Ctrl-Alt-Delete”的安全登录提示。
用户也不用太担心被安装了GINA木马,笔者在这里提供解决方案给大家参考:
◇正所谓“解铃还需系铃人”,要查看自己电脑是否安装过GINA木马,可以下载一个GINA木马程序,然后运行InstGina -view,可以查看系统中GinaDLL键值是否被安装过DLL,主要用来查看系统是否被人安装了Gina木马作为登录所用。如果不幸被安装了GINA木马,可以运行InstGina -Remove来卸载它。
3. LSA服务
LSA的全称为“Local Security Authority”——本地安全授权,Windows系统中一个相当重要的服务,所有安全认证相关的处理都要通过这个服务。它从Winlogon.exe中获取用户的账号和密码,然后经过密钥机制处理,并和存储在账号数据库中的密钥进行对比,如果对比的结果匹配,LSA就认为用户的身份有效,允许用户登录计算机。如果对比的结果不匹配,LSA就认为用户的身份无效。这时用户就无法登录计算机。
怎么看这三个字母有些眼熟?对了,这个就是和前阵子闹得沸沸扬扬的“震荡波” 扯上关系的服务。“震荡波”蠕虫就是利用LSA远程缓冲区溢出漏洞而获得系统最高权限SYSTEM来攻击电脑的。解决的方法网上很多资料,这里就不多讲了。
4. SAM数据库
SAM的全称为“Security Account Manager”——安全账号管理器,是一个被保护的子系统,它通过存储在计算机注册表中的安全账号来管理用户和用户组的信息。我们可以把SAM看成一个账号数据库。对于没有加入到域的计算机来说,它存储在本地,而对于加入到域的计算机,它存储在域控制器上。
如果用户试图登录本机,那么系统会使用存储在本机上的SAM数据库中的账号信息同用户提供的信息进行比较;如果用户试图登录到域,那么系统会使用存储在域控制器中上的SAM数据库中的账号信息同用户提供的信息进行比较。
5. Net Logon服务
Net Logon服务主要和NTLM(NT LAN Manager,Windows NT 4.0 的默认验证协议)协同使用,用户验证Windows NT域控制器上的SAM数据库上的信息同用户提供的信息是否匹配。NTLM协议主要用于实现同Windows NT的兼容性而保留的。
6. KDC服务
KDC(Kerberos Key Distribution Center——Kerberos密钥发布中心)服务主要同Kerberos认证协议协同使用,用于在整个活动目录范围内对用户的登录进行验证。如果你确保整个域中没有Windows NT计算机,可以只使用Kerberos协议,以确保最大的安全性。该服务要在Active Directory服务启动后才能启用。
7. Active Directory服务
如果计算机加入到Windows 2000或Windows 2003域中,则需启动该服务以对Active Directory(活动目录)功能的支持。
三、登录前后,Winlogon到底干了什么
如果用户设置了“安全登录”,在Winlogon初始化时,会在系统中注册一个SAS (Secure Attention Sequence——安全警告序列)。SAS是一组组合键,默认情况下为Ctrl-Alt-Delete。它的作用是确保用户交互式登录时输入的信息被系统所接受,而不会被其他程序所获取。所以说,使用“安全登录”进行登录,可以确保用户的账号和密码不会被黑客盗取。要启用“安全登录”的功能,可以运行“Control userpasswords2”命令,打开“用户账户”对话框,选择“高级”。(如图4)选中“要求用户按Ctrl-Alt-Delete”选项后确定即可。以后,在每次登录对话框出现前都有一个提示,要求用户按Ctrl-Alt-Delete组合键,目的是为了在登录时出现Windows XP的GINA登录对话框,因为只有系统本身的GINA才能截获这个组合键信息。而如前面讲到的GINA木马,会屏蔽掉“安全登录”的提示,所以如果“安全登录”的提示无故被屏蔽也是发现木马的一个前兆。“安全登录”功能早在Windows 2000时就被应用于保护系统安全性。
图4
在Winlogon注册了SAS后,就调用GINA生成3个桌面系统,在用户需要的时候使用,它们分别为:
◇Winlogon桌面 用户在进入登录界面时,就进入了Winlogon桌面。而我们看到的登录对话框,只是GINA负责显示的。
如果用户取消以“欢迎屏幕”方式登录,在进入Windows XP中任何时候按下“Ctrl-Alt-Delete”,都会激活Winlogon桌面,并显示图5的“Windows安全”对话框(注意,Winlogon桌面并不等同对话框,对话框只是Winlogon调用其他程序来显示的)。
图5
◇用户桌面 用户桌面就是我们日常操作的桌面,它是系统最主要的桌面系统。用户需要提供正确的账号和密码,成功登录后才能显示“用户桌面”。而且,不同的用户,Winlogon会根据注册表中的信息和用户配置文件来初始化用户桌面。
◇屏幕保护桌面 屏幕保护桌面就是屏幕保护,包括“系统屏幕保护”和“用户屏幕保护”。在启用了“系统屏幕保护”的前提下,用户未进行登录并且长时间无操作,系统就会进入“系统屏幕保护”;而对于“用户屏幕保护”来说,用户要登录后才能访问,不同的用户可以设置不同的“用户屏幕保护”。
四、想登录,也要过GINA这一关
在“交互式登录”过程中,Winlogon调用了GINA组文件,把用户提供的账号和密码传达给GINA,由GINA负责对账号和密码的有效性进行验证,然后把验证结果反馈给Winlogon程序。在与Winlogon.exe对话时,GINA会首先确定Winlogon.exe的当前状态,再根据不同状态来执行不同的验证工作。通常Winlogon.exe有三种状态:
1. 已登录状态
顾名思义,用户在成功登录后,就进入了“已登录状态”。在此状态下,用户可以执行有控制权限的任何操作。
2. 已注销状态
用户在已登录状态下,选择“注销”命令后,就进入了“已注销状态”,并显示Winlogon桌面,而由GINA负责显示登录对话框或欢迎屏幕。
3. 已锁定状态
当用户按下“Win+L”键锁定计算机后,就进入了“已锁定状态”。在此状态下,GINA负责显示可供用户登录的对话框。此时用户有两种选择,一种是输入当前用户的密码返回“已登录状态”,另一种是输入管理员账号和密码,返回“已注销状态”,但原用户状态和未保存数据丢失。
五、登录到本机的过程
1. 用户首先按Ctrl+Alt+Del组合键。
2. Winlogon检测到用户按下SAS键,就调用GINA,由GINA显示登录对话框,以便用户输入账号和密码。
3. 用户输入账号和密码,确定后,GINA把信息发送给LSA进行验证。
4. 在用户登录到本机的情况下,LSA会调用Msv1_0.dll这个验证程序包,将用户信息处理后生成密钥,同SAM数据库中存储的密钥进行对比。
5. 如果对比后发现用户有效,SAM会将用户的SID(Security Identifier——安全标识),用户所属用户组的SID,和其他一些相关信息发送给LSA。
6. LSA将收到的SID信息创建安全访问令牌,然后将令牌的句柄和登录信息发送给Winlogon.exe。
7. Winlogon.exe对用户登录稍作处理后,完成整个登录过程。
六、登录到域的过程
登录到域的验证过程,对于不同的验证协议也有不同的验证方法。如果域控制器是Windows NT 4.0,那么使用的是NTLM验证协议,其验证过程和前面的“登录到本机的过程”差不多,区别就在于验证账号的工作不是在本地SAM数据库中进行,而是在域控制器中进行;而对于Windows 2000和Windows 2003域控制器来说,使用的一般为更安全可靠的Kerberos V5协议。通过这种协议登录到域,要向域控制器证明自己的域账号有效,用户需先申请允许请求该域的TGS(Ticket-Granting Service——票据授予服务)。获准之后,用户就会为所要登录的计算机申请一个会话票据,最后还需申请允许进入那台计算机的本地系统服务。
其过程如下:
1. 用户首先按Ctrl+Alt+Del组合键。
2. Winlogon检测到用户按下SAS键,就调用GINA,由GINA显示登录对话框,以便用户输入账号和密码。
3. 用户选择所要登录的域和填写账号与密码,确定后,GINA将用户输入的信息发送给LSA进行验证。
4. 在用户登录到本机的情况下,LSA将请求发送给Kerberos验证程序包。通过散列算法,根据用户信息生成一个密钥,并将密钥存储在证书缓存区中。
5. Kerberos验证程序向KDC(Key Distribution Center——密钥分配中心)发送一个包含用户身份信息和验证预处理数据的验证服务请求,其中包含用户证书和散列算法加密时间的标记。
6. KDC接收到数据后,利用自己的密钥对请求中的时间标记进行解密,通过解密的时间标记是否正确,就可以判断用户是否有效。
7. 如果用户有效,KDC将向用户发送一个TGT(Ticket-Granting Ticket——票据授予票据)。该TGT(AS_REP)将用户的密钥进行解密,其中包含会话密钥、该会话密钥指向的用户名称、该票据的最大生命期以及其他一些可能需要的数据和设置等。用户所申请的票据在KDC的密钥中被加密,并附着在AS_REP中。在TGT的授权数据部分包含用户账号的SID以及该用户所属的全局组和通用组的SID。注意,返回到LSA的SID包含用户的访问令牌。票据的最大生命期是由域策略决定的。如果票据在活动的会话中超过期限,用户就必须申请新的票据。
8. 当用户试图访问资源时,客户系统使用TGT从域控制器上的Kerberos TGS请求服务票据(TGS_REQ)。然后TGS将服务票据(TGS_REP)发送给客户。该服务票据是使用服务器的密钥进行加密的。同时,SID被Kerberos服务从TGT复制到所有的Kerberos服务包含的子序列服务票据中。
9. 客户将票据直接提交到需要访问的网络服务上,通过服务票据就能证明用户的标识和针对该服务的权限,以及服务对应用户的标识。
七、我要偷懒——设置自动登录
为了安全起见,平时我们进入Windows XP时,都要输入账号和密码。而一般我们都是使用一个固定的账号登录的。面对每次烦琐的输入密码,有的朋友干脆设置为空密码或者类似“123”等弱口令,而这些账号也多数为管理员账号。殊不知黑客用一般的扫描工具,很容易就能扫描到一段IP段中所有弱口令的计算机。
所以,还是建议大家要把密码尽量设置得复杂些。如果怕麻烦,可以设置自动登录,不过自动登录也是很不安全的。因为自动登录意味着能直接接触计算机的人都能进入系统;另一方面,账号和密码是明文保存在注册表中的,所以任何人,只要具有访问注册表的权限,都可以通过网络查看。因此如果要设置登录,最好不要设置为管理员账号,可以设置为USERS组的用户账号。设置自动登录的方法是:运行“Control userpasswords2”,在“用户账户”窗口中取消“要使用本机,用户必须输入用户名和密码”选项,确定后会出现一个对话框,输入要自动登录的账号和密码即可。注意,这里不对密码进行验证,用户要确保密码和账号的正确性。
E. 如何设置企业安全管理制度体系的层级架构
一、设置企业安全管理制度体系的层级架构的背景
随着信息技术的发展和快速通信的需求,现代企业的运营越来越依赖于企业IT基础架构的建设水平,特别是一些分支机构分布全国或者跨国范围的大型企业。与此同时,如何保证这些企业的IT基础架构的安全性和稳定性成为一项迫切的需求,特别是在美国的萨班斯法案生效后,给企业在如何保证数据的准确性和安全性方面提出了更高的要求。
二、实现体系所需的网络安全知识
1、网络安全基础
随着工nternet的发展,信息安全也迎来了第二次变革,分布式系统、终端用户与计算机之间以及计算机与计算机之间传送数据的网络和通信设施的广泛应用,使得在信息传输时,需要有网络安全措施来保护数据传输。这就是“网络安全”的产生。
网络安全包含两个方面的内容:
a)所有与网络相关,特别是互联网相关的安全问题,包括各种系统的安全漏洞、协议的弱点和各式各样的攻击行为;
b)解决这些问题的技术或手段,包括密码技术、防火墙、虚拟专用网技术、入侵检测技术等应用技术,也包括相关的协议规范和管理策略。
2)网络与信息安全的目标
人们对信息的使用主要是通过计算机网络来实现的,在计算机和网络上信息的处理是数据的形式进行,在这种情况下,信息就是数据,因而从这个角度来说,网络与信息安全可以分为数据安全和系统安全。即信息安全可以从两个层次来看:
从消息的层次来看,包括信息的:
a)完整性(Integrity):即保证消息的来源、去向、内容真实无误;
b)保密性(Coflfidefltiality):即保证消息不会被非法泄露扩散;
e)不可否认性(Non一repudiation)一也称为不可抵赖性:即保证消息的发送和接受者无法否认自己所做过的操作行为。
4)网络安全技术体系
一般的,可以从两个方面来设计网络安全的体系结构:
a)网络安全技术服务的不同对象
b)网络安全技术提供安全功能的特点
网络安全的服务对象有系统(包括一般主机和服务器)、局域网和网络的通信。根据服务对象的不同,分别有不同特性的网络安全技术。例如对于保护系统安全的技术有:数据备份、数据恢复和反病毒等技术;对于局域网安全的技术有:
防火墙、网络监控等技术;对于通信安全的技术则有:PKI、VPN等技术提供服务。
从网络安全技术自身特点来分析,网络安全技术可以分为:基础的网络支撑技术、主流的网络安全技术、专业的网络安全技术和具体的网络安全应用系统等。
密码技术和访问控制技术属于基础的网络安全支撑技术,提供所有其它网络安全技术所需要的基本安全服务;防火墙、VPN和PKI技术则属于目前流行的主流网络安全技术,己有较多的成熟产品面向用户。网络标准和法规则可以看成属于管理层面的网络安全技术。
从网络层次来看,包括:
a)可用性:即保证网络和信息系统随时可用,运行过程中不出现故障,若遇意外打击能够尽量减少并尽早恢复正常;
b)可控性(Controllability):是对网络信息的传播及内容具有控制能力的特性。
3)网络的安全威胁
网络的安全威胁来自于以下几个方面:
a)网络协议的弱点
TCP/IP协议是如今最流行的网络协议,它的设计本身并没有较多地考虑安全方面的需求,因而TCP/IP协议存在一些弱点,这些弱点带来许多直接的安全威胁。
b)网络操作系统的漏洞
操作系统是网络协议和服务得以实现的最终载体之一,它不仅负责网络硬件设备的接口封装,同时还提供网络通信所需要的各种协议和服务的程序实现。一般情况,操作系统规模都很大,其中的网络协议实现尤其复杂,这点己经决定了操作系统必然存在各种实现过程所带来的缺陷和漏洞。网络操作系统的漏洞成为网络所面临的重要的安全威胁之一。
c)应用系统设计的漏洞
与操作系统情况类似,应用程序的设计过程中也会带来很多由于人的局限性所导致的缺陷或漏洞。软件和硬件设计都存在这种问题,而其中软件的问题为我们所直接面对。
由于硬件设计方面的缺陷,特别是芯片的技术缺陷,使得硬件的后门与漏洞是我们网络所面临的最为深刻的威胁之一。
d)恶意攻击
恶意攻击是人们最易理解,而又最难防范的网络安全威胁。恶意的黑客攻击、网络病毒等都属于这类。
e)来自合法用户的攻击
来自合法用户的攻击是最容易被管理者忽视的安全威胁之一,事实上,80%的网络安全事件与内部人员的参与相关。网络管理的漏洞往往是导致这种威胁的直接原因。
2、PKI技术原理
pKI(PublieKeyInfrastrueture),即公开密钥体系。它是利用公钥理论和技术建立的提供信息安全服务的基础设施,是国际公认的现代网络安全认证机制。它利用现代密码学中的公钥密码技术在开放的网络环境中提供数据加密以及数字签名服务的统一的技术框架。
公钥是目前应用最广泛的一种加密体制,在此体系中,加密密钥与解密密钥各不相同,发送信息的人利用接收者的公钥发送加密信息,接收者再利用自己专有的私钥进行解密。这种方式既保证了信息的机密性,又能保证信息具有不可抵赖性。
PKI是一种遵循标准并利用公钥技术,为开放性网络应用的开展提供一套安全基础平台的技术与规范,它能够透明地提供基于公开密钥的加密和数字签名等安全服务。利用PKI可以方便地建立和维护一个可信的网络计算环境,从而使得人们在这个无法直接相互面对的环境中能够确认彼此的身份和所交换的信息。为实现以上目的,典型实用的PK工系统应由以下部分组成:PKI客户端、注册机构(RA)、认证机构(以)和证书库。
1)PKI客户端
PK工客户端的主要功能是使各种网络应用能够以透明、安全、一致、可信的方式与PKI交互,从而使用户能够方便地使用加密、数字签名等安全服务。
2)注册机构(RA)
RA则是用户与认证中心的接口,其主要功能是核实证书申请者的身份,它所获证书的申请者身份的准确性是以颁发证书的基础。
3)认证机构(以)
作为PKI核心的认证中心是证书颁发机构,由以签发的证书是网上用户的电子身份标识。
4)证书库
证书库用来存放经以签发的证书和证书注销列表(CRL),为用户和网络应用提供证书及验证证书状态。
3、kerberos技术原理
KerberoS身份认证协议提供了一种客户和服务器之间,或者是服务器彼此之间,在打开网络连接之前进行相互身份认证的机制。该协议假设客户和服务器之间最初的事务处理是发生在一个开放的网络当中,在这个网络中,绝大多数的计算机不是完全可靠的,而且包在线路上的传输可以被监听,并且可以被任意修改。换句话说,这种假设的环境和今天的Internet非常相似,一个攻击者可以轻松地假装成一个客户或者服务器,可以轻易地窃听或者篡改合法的客户同服务器之间的通信。
1)基本概念
KerberoS协议完全依赖于一个涉及共享秘密的身份认证技术。基本的概念是:如果一个秘密只有两个人知道,那么两个人中的任何一个都可以通过证实另一个人也知道该秘密,从而确认他的身份。
我们可以假设这么一个例子,爱丽丝经常发消息给鲍勃,而且鲍勃需要先确认消息的确来自爱丽丝,然后才能对消息的内容进行处理。他们决定通过选择一个口令来解决他们的这个问题,而且他们约定不把这个秘密告诉别的任何人。如果爱丽丝的消息能够以某种方式证明发送者确实知道这个口令,那么鲍勃就能够确认发送消息的一定是爱丽丝。
爱丽丝和鲍勃需要解决的问题就剩下一个,那就是爱丽丝如何才`能显示她知道这个口令呢?她可以简单地将这个口令包含在她消息中的某处,也许在最后的签名部分一八ice,Our$ecret。这种方法简单而且高效,而且如果爱丽丝和鲍勃能够确认没有别的人也在读他们的信的话,这种方法是完全有效的。然而不幸的是,这种条件无法达到。他们的消息是在一个卡萝尔这样的人也在使用的网络上传输,卡萝尔有一个网络分析器,而且她有这样一个爱好,她喜欢扫描网络通信量,并且希望能有一天认出一个口令。因此,爱丽丝光靠说出口令已经不可能证明他知道这个秘密了。为了保证口令的保密性,她必须在不暴露口令的情况下显示她知道口令。
KerberoS协议使用秘密密钥加密来解决这个问题。通信的双方不是共享口令,而是共享一个加密密钥,而且双方使用有关这个密钥的知识来确认对方的身份。要让这个技术起作用,这个共享的密钥必须是对称的—单独一个密钥必须既可以加密也可以解密。一方通过加密一段信息来显示对该密钥的了解,而另一方通过解密这段信息来显示对该密钥的了解。
2)密钥分配
KerberoS协议的名称就暗示了它解决密钥分配问题的方法。KerberoS(或者CerberuS)是古典希腊神话当中的一个动物,它是一种凶猛的,有三个头的狗,守卫在冥府的入口。像守卫的Kerberos一样,KerberoS协议有三个头:一个客户,一个服务器,一个可信赖的第三方作在他们之间进行调解。协议当中的这个可信任的中介被称作密钥分配中心(KDC)。
KDC是运行在一个真正安全的服务器上的一个服务。它维护着一个存储所有处于它领域范围内的安全委托人的账户信息的数据库。除了关于每个安全委托人的其他信息以外,KDC还存储了一个只有安全委托人和KDC知道的加密密钥。这个密钥是用来在安全委托人和KDC之间交换信息的,被称作长期密钥。在该协议的绝大部分实现当中,这个密钥从一个用户的登录口令派生出来的。
3)会话票证(sessionTieket)
如图2一1所示,作为对客户请求同服务器通话的回答,K民将会话密钥的两个拷贝都发送给客户。会话密钥的客户拷贝是用KDC同客户共享的密钥加密的。会话密钥的服务器拷贝同关于客户的信息一起包含在一个叫做会话票证的数据结构当中。然后整个结构用KDC同服务器共享的密钥进行加密。在客户联系服务器之前,保管好这个安全地保存会话密钥服务器拷贝的票证就成为客户的责任。
2、技术选型和论证
目前在世界上有很多家大型企业都有自己的基于LDAP协议的统一身份认证管理产品。有微软公司的AetiveDireetory,Novell公司的NDS,IBM公司的TivoliDireetoryServer,SUN公司的iPlanetDireetoryServer,Apple公司的opendirectory。其中在国内使用较多的产品为微软公司的ActiveDireetory,Novell公司的NDS,IBM公司的TivoliDireetoryServer。
各家公司设计的身份认证管理产品都符合LDAP的统一标准,主要的差异在于对于信息的存储机制、信息的更新机制、部署结构等具体的实施措施上。其中从大类上可以分为两类:一类是以ActiveDirectory为代表的多主复制结构,另一类为以NDS为代表的单主复制结构。由于IBM公司的DireCtoryServer更多的被用在应用Directory场合,很少使用于企业IT管理内,所以主要的产品对t匕将在ACtiveDireetory与NDS之间进行。
3、设备选型
在确定技术路线和产品后,从节省费用考虑,确定选择IBM的主流底端PC服务器作为系统承载平台。最终选择IBMX336型服务器,主要配置为ZCPU/ZGRAM/73*ZHI)。
4、总结
设计企业安全管理系统的层级结构面临着诸多考验,必须结合实际管理模式出发才能够完成。本回答中的架构依照中国网通集团作为参考,具体到公司内需要区别对待。
F. 运行在Linux常用的configure脚本时,使用哪个参数可以停用soname功能
下面对每一个选项进行简略的介绍:
--cache-file=FILE
'configure'会在你的系统上测试存在的特性(或者bug!)。为了加速随后进行的配置,测试的结果会存储在一个cache
file里。当configure一个每个子树里都有'configure'脚本的复杂的源码树时,一个很好的cache file的存在会有很大帮助。
--help
输出帮助信息。即使是有经验的用户也偶尔需要使用使用'--help'选项,因为一个复杂的项目会包含附加的选项。例如,GCC包里的'configure'脚本就包含了允许你控制是否生成和在GCC中使用GNU汇编器的选项。
--no-create
'configure'中的一个主要函数会制作输出文件。此选项阻止'configure'生成这个文件。你可以认为这是一种演习(dry run),尽管缓存(cache)仍然被改写了。
--quiet
--silent
当'configure'进行他的测试时,会输出简要的信息来告诉用户正在作什么。这样作是因为'configure'可能会比较慢,没有
这种输出的话用户将会被扔在一旁疑惑正在发生什么,使用这两个选项中的任何一个都会把你扔到一旁。(译注:这两句话比较有意思,原文是这样的:If
there was no such output, the user would be left wondering what is
happening. By using this option, you too can be left wondering!)
--version
打印用来产生'configure'脚本的Autoconf的版本号。
--prefix=PEWFIX
'--prefix'是最常用的选项。制作出的'Makefile'会查看随此选项传递的参数,当一个包在安装时可以彻底的重新安置他的结
构独立部分。举一个例子,当安装一个包,例如说Emacs,下面的命令将会使Emacs Lisp file被安装到"/opt/gnu/share":
$ ./configure --prefix=/opt/gnu
--exec-prefix=EPREFIX
与'--prefix'选项类似,但是他是用来设置结构倚赖的文件的安装位置,编译好的'emacs'二进制文件就是这样一个问件。如果没有设置这个选项的话,默认使用的选项值将被设为和'--prefix'选项值一样。
--bindir=DIR
指定二进制文件的安装位置,这里的二进制文件定义为可以被用户直接执行的程序。
--sbindir=DIR
指定超级二进制文件的安装位置。这是一些通常只能由超级用户执行的程序。
--libexecdir=DIR
指定可执行支持文件的安装位置。与二进制文件相反,这些文件从来不直接由用户执行,但是可以被上面提到的二进制文件所执行。
--datadir=DIR
指定通用数据文件的安装位置。
--sysconfdir=DIR
指定在单个机器上使用的只读数据的安装位置。
--sharedstatedir=DIR
指定可以在多个机器上共享的可写数据的安装位置。
--localstatedir=DIR
指定只能单机使用的可写数据的安装位置。
--libdir=DIR
指定库文件的安装位置。
--includedir=DIR
指定C头文件的安装位置。其他语言如C++的头文件也可以使用此选项。
--oldincludedir=DIR
指定为除GCC外编译器安装的C头文件的安装位置。
--infodir=DIR
指定Info格式文档的安装位置.Info是被GNU工程所使用的文档格式。
--mandir=DIR
指定手册页的安装位置。
--srcdir=DIR
这个选项对安装没有作用,他会告诉'configure'源码的位置。一般来说不用指定此选项,因为'configure'脚本一般和源码文件在同一个目录下。
--program-prefix=PREFIX
指定将被加到所安装程序的名字上的前缀。例如,使用'--program-prefix=g'来configure一个名为'tar'的程序将会使
安装的程序被命名为'gtar'。当和其他的安装选项一起使用时,这个选项只有当他被`Makefile.in'文件使用时才会工作。
--program-suffix=SUFFIX
指定将被加到所安装程序的名字上的后缀。
--program-transform-name=PROGRAM
这里的PROGRAM是一个sed脚本。当一个程序被安装时,他的名字将经过`sed -e PROGRAM'来产生安装的名字。
--build=BUILD
指定软件包安装的系统平台。如果没有指定,默认值将是'--host'选项的值。
--host=HOST
指定软件运行的系统平台。如果没有指定。将会运行`config.guess'来检测。
--target=GARGET
指定软件面向(target to)的系统平台。这主要在程序语言工具如编译器和汇编器上下文中起作用。如果没有指定,默认将使用'--host'选项的值。
--disable-FEATURE
一些软件包可以选择这个选项来提供为大型选项的编译时配置,例如使用Kerberos认证系统或者一个实验性的编译器最优配置。如果默认是提供这些特性,可以使用'--disable-FEATURE'来禁用它,这里'FEATURE'是特性的名字,例如:
$ ./configure --disable-gui
-enable-FEATURE[=ARG]
相反的,一些软件包可能提供了一些默认被禁止的特性,可以使用'--enable-FEATURE'来起用它。这里'FEATURE'是特性的名字。一个特性可能会接受一个可选的参数。例如:
$ ./configure --enable-buffers=128
`--enable-FEATURE=no'与上面提到的'--disable-FEATURE'是同义的。
--with-PACKAGE[=ARG]
在自由软件社区里,有使用已有软件包和库的优秀传统。当用'configure'来配置一个源码树时,可以提供其他已经安装的软件包的信息。例如,
倚赖于Tcl和Tk的BLT器件工具包。要配置BLT,可能需要给'configure'提供一些关于我们把Tcl和Tk装的何处的信息:
$ ./configure --with-tcl=/usr/local --with-tk=/usr/local
'--with-PACKAGE=no'与下面将提到的'--without-PACKAGE'是同义的。
--without-PACKAGE
有时候你可能不想让你的软件包与系统已有的软件包交互。例如,你可能不想让你的新编译器使用GNU ld。通过使用这个选项可以做到这一点:
$ ./configure --without-gnu-ld
--x-includes=DIR
这个选项是'--with-PACKAGE'选项的一个特例。在Autoconf最初被开发出来时,流行使用'configure'来作为
Imake的一个变通方法来制作运行于X的软件。'--x-includes'选项提供了向'configure'脚本指明包含X11头文件的目录的方
法。
--x-libraries=DIR
类似的,'--x-libraries'选项提供了向'configure'脚本指明包含X11库的目录的方法。
G. 应使用哪个命令行工具来查看缓存的 kerberos 服务票据
1、QQ是不能直接看到对方的IP地址的。当和对方通话或发送文件图片时,可以通过第三方的软件查看到对方的IP。例于360安全卫士的高级工具中的网络连接查看器就可以查看对方的IP。如果知道了对方机的IP地址,要想知道对方机的MAC地址,又相距较远,不方便在其本机上操作IPCONFIG/all查得,可能命令 arp -a IP地址 (执行该命令前应使用Ping命令测试一下连通性,因为ARP命令查询通过存于缓存中,通过广播获取的IP对MAC地址的对话关系表,如果事先没有Ping一下,则可能缓存表中没有记载,从而不能查得,不信你试试!!)值得注意的是ARP协议不能穿越路由器或VLAN(路由器是分割广播的!!!),因此,ARP命令是不能用于广域网的。2、在局域网管理中经常遇到已知某个MAC地址,要查询其IP地址的情况,总结一下有如下几种方法:
方法一:用ARP -A 查询
这种方法只能查到与本机通讯过(20分钟内)的主机MAC地址和IP地址。可在远程主机所属网段中的任一台主机上运行此命令,这样可查出IP欺骗类病毒的主机。
方法二:用专用软件查,如nbtscan
命令方式是:nbtscan -r 网络号/掩码位,这种方法可查询某网段的所有IP与MAC对应关系,但装有防火墙的主机则禁止查询。
方法三: 如果所连交换机有网管功能,可用ARP SHOW 命令显示交换机的arp缓存信息,这种方式基本可查询所有的IP 与MAC地址,但只有网管才有这个权限。
方法四:用sniffer类的嗅探软件抓包分析,packet中一般都含用IP地址与MAC地址。
方法五:用solarwinds类软件中的MAC ADDRESS DISCOVERY查询,但这个工具好象不能跨网段查询。
3、用ipconfig /all 查自己的MAC地址
查同网段其他机器的nbtstat -A ip 或者ping过的IP地址其主机nic的mac地址都会保存到arp缓存里面用arp
-a就可以查看里面的内容。
(1)根据IP地址查对方的机器名和MAC地址:
C:\>nbtstat
-A 202.110.96.75
NetBIOS Remote Machine Name
Table Name Type
Status---------------------------------------------------------------------
JANKER
UNIQUE Registered
WORKGRP GROUP
Registered
MAC Address = 00-B0-D0-7A-9C-12
说明:则对方的机器名为JANKER,组为WORKGRP,其中为NetBios名字的最后一个字符。
(2)列出本地所有NetBios名:
C:\>nbtstat
-n
NetBIOS Local Name Table Name
Type
Status--------------------------------------------
JANKER
UNIQUE Registered
JANKER UNIQUE
Registered
JANKER UNIQUE
Registered;
机器名为JANKERPUBLIC GROUP
Registered;组名为PUBLICINet~Services GROUP
Registered;说明机器安装有Internet Information
Service服务..__MSBROWSE__.. GROUP Registered;说明机器安装有MsBrowser
Service服务
H. framework是什么
Microsoft .NET Framework安全概述
本文概述了微软.NET Framework安全结构,包括基于证据的安全,基于角色的安全,认证和授权的概念,以及隔离存储,密码加密和扩展性。本文还概述了.NET Framework安全策略带给开发人员,管理员和最终用户的主要好处。本文假定读者已经基本熟悉了.NET Framework通用语言运行时和管理代码的概念。
引言
目前的安全问题
在今天的软件环境中,应用程序的来源很多,它们执行很多任务。对应用程序代码的信任是一个主要需求,因为我们谁也不想软件或信息遭到破坏。给予许可的安全策略不会允许对敏感信息的不适当的访问,或将本地机器暴露给恶意的程序或甚至是有平常错误的代码。
过去,安全结构提供了基于用户帐号的隔离和访问控制--在这些限制内给予代码完全访问权,并假定由特定用户可运行的代码具有相同的信任度。不幸的是,如果所有程序都代表某用户运行,根据用户对代码的隔离对于保护一个程序不被其它用户使用是不够的。另一种情况,不能被完全信任的代码经常被转移到"沙箱"模型中执行,在此代码运行于隔离环境,而不会访问大部分的服务。
对今天应用程序的成功的安全解决方案必须能强化两个安全模型间的平衡。它必须提供对资源的访问,以便以完成有用的工作,它需要对应用程序的安全性作细致的控制以确保代码被识别,检测,并给予合适的安全级别。.NET Framework就提供了一个这样的安全模型。
Microsoft .NET Framework安全解决方案
.NET Framework安全解决方案基于管理代码的概念,以及由通用语言运行时(CLR)加强的安全规则。大部分管理代码需要进行验证以确保类型安全及预先定义好的其它属性的行为的安全。例如,在验证的代码中,声明为接收4字节值的访问将拒绝提供8字节参数的调用,因为不是类型安全的。验证过程还确保了执行流只传送到已知的位置,如方法入口点--这个过程去除了跳转到任意位置执行的能力。
验证将阻止不是类型安全的代码执行,在它们引起破坏前捕获很多常见的编程错误。通常的弱点--如缓存溢出,对任意内存或没有初始化的内存的读取,对控件的随意传送--都不再可能出现。这将使最终用户受益,因为在他们执行代码前对其进行检查。这也有益于开发人员,他们会发现很多常见错误(过去一直在困绕前开发)现在可以查明,并能阻止它们引起破坏。
CLR也能使非管理代码运行,但非管理代码不能从这些安全措施中受益。特殊的许可与对非管理代码的调用能力相关,一个强大的安全策略能确保这些许可被恰当地给予。经过很长时间后,非管理代码到管理代码的移植将减少对非管理代码的调用频率。
微软.NET Framework安全机制的构件
基于证据的安全
.NET Framework引入了"基于证据的安全"的概念。在本质上,它是对安全策略暴露出来问题的解答:
· 组合从哪个站点获得?
组合是.NET Framework应用程序的构件。它们组成了部署,版本控制,重用,激活作用域,安全认证的基本单元。应用程序的组合是从网站上下载到客户端的。
· 组合是从哪个URL获得的?
安全策略需要明确的地址,而组合是从这个地址下载的。
· 组合是从哪个区获得的?
区是基于代码的位置,对安全标准,如 Internet, intranet和本机等等,的描述。
· 组合的强名(strong name)是什么?
强名是由组合的创建者提供了密码强化后的标识符。尽管它没有提供对创建者的任何证明,但它唯一标识了组合,确保了组合没有被破坏过。
根据对这些问题的回答,及其它证据,安全策略可以对赋予组合垢合适许可进行计算。从多种来源可以得到证据,包括CLR,浏览器,微软ASP.NET,及外壳--这依赖于代码的来源。
策略驱动的信任模型使用代码证据
当组合被调入内存进,CLR策略系统通过收集组合的证据并在策略环境中对证据进行计算,从而决定赋予组合什么样的许可权。CLR策略系统然后根据评估过的证据和组合作出的许可请求给予组合一组许可。只有在组合被给予了一组最少的许可后,或组合根本不需要许可权,组合的创建者才能知道组合正确运行。通过一个或多个对特定许可的请求,这样的附加需求可以被传送室策略系统。
根据许可请求的类型,策略系统可以进一步限制给予组合的许可(删除不必要的许可)或甚至拒绝将组合装入内存(如果运行组合所需的最小许可没有被策略给予)。在不存在任何许可请求的情况下,组合永远不会被给予多于策略系统将会给予的许可权限,请求只是进一步限制得到的许可。
安全策略包含了许多代码组,这些组包含了根据证据应给予的许可权。代码组描述的许可可提供给从特定的安全区域获得的组合,或提供给由特定发行商签名过的组合,等等。尽管随CLR发行了一组默认的代码组(及相关许可),但管理员可以对这些CLR安全的进行定置,以适合他们的特殊需求。记住,通过定义与证据相关的代码组,任何东西都可以作为证据提交,只要安全策略可以使用它。
创建许可的的过程涉及到对证据的评估,以确定代码组适用于哪个等级:企业,机器,和用户。策略按上面顺序对这三个等级进行评估,然后创建交插了三个等级的许可设置。管理员可以将任何一个策略等级标记为终结(final),这样做应付阻止在其它等级上对策略做进一步评估。例如,管理员可以在机器级别上对组合终止策略,这样就会阻止用户级策略对该组合的应用。
一旦策略完成,许可的最初设置也就创建了。组合通过从三个方面做出特定的请求可以优化这些许可:
· 第一方面是指定为了使组合运行它必须拥有的最小许可设置。如果这些许可没有给予,那么组合将不同调入到内存,并抛出例外。
· 第二,可以指定一组可选的许可。尽管组合希望存在这些许可,但如果无法获得这些许可,它仍可以调入到内存。
· 最后,行为特别好的组合实际上会拒绝它们所不需的有风险的许可。这三个优化选项是调入时作为声明语句实现的。
在运行时,许可是根据代码的执行计算的。右侧的图总结了这个过程的发生顺序。组合A3将它的证据和来自主机的证据提供给策略评估器。策略评估器在创建许可时也要考虑从组合得到的许可请求,"G3"。组合A3由组合A2调用,而A2又是由组合A1调用的。当组合A3执行一个引发安全检查的操作时,A2和A1获得的许可同样也要进行检查,以确保它们拥有A3所请求的许可权限。在这个过程中,此过程称为堆栈遍历(walking),堆栈中每个组合的许可权限都要进行检查以确定所给予的权限设置是否包含安全检查所需要的许可。如果堆栈中的每个组合被给予了安全检查所需要的许可,调用将成功。如何任何组合没有给予所需要的许可,堆栈遍历过程失败,安全例外将被抛出。
图 1.主机和组合为策略评估器提供证据,评估器使用安全策略和许可请求确定组合的许可权限。应用程序中不同运行组件的许可权限然后用于作出授权决定。
代码访问安全堆栈遍历可以保护代码不受攻击。在精通的攻击中,恶意代码欺骗受信任代码执行它独自不能运行的操作--有效地利用代码的许可权限实现恶意的目的。对这类攻击,开发人员很难进行防备--但堆栈遍历确保了如果涉及到了低级信任等级的代码,有效许可将被减少到信任等级最低的代码具有的许可。
结果,代码将从源处获得不同的信任等级,并在适合于特定的代码执行环境的限制下运行。
.NET Framework调用的"自由"安全性
一些活动,如读写文件,显示对话框,读写环境变量,可以通过包含在框架安全构架中的.NET Framework方法实现。这就使.NET Framework能根据安全策略允许或不允许一个操作,而不需要程序员做额外的工作。尽管暴露了保护资源的管理类的创建者在他们的库中做了明确的安全需求,使用.NET Framework类库访问受保护资源的开发人员可以自由地利用代码访问安全系统;他们不必作出明确的安全调用。
管理员可以通过决定给予哪些许可来优化安全策略,然后,依靠.NET Framework处理所有的安全操作。代码访问安全能阻止大部分的恶意攻击,对代码的验证减少了缓存溢出和其它会导致安全攻击的不期望的行为。因此,应用程序和组件生来就受到了保护,它们免于大多数安全问题的冲击,而这些安全问题一直困绕着本地代码的实现。
基于角色的安全
有时根据已认证的身份或根据与代码执行上下文相关的角色作出认证决定是合适的。例如,金融和企业软件可以通过评估角色信息的企业逻辑加强策略。根据作出请求的用户角色可以对金融交易的数据进行限制。出纳被允许可以处理一定金额的请求,而多于该金额的所有工作需要监督人的角色来处理。
身份可以映射到登录系统的用户,或由应用程序定义。相应的原则封装了身份和其它相关的角色信息(例如,但并不限于此,用户的"组"由操作系统定义)。
认证和授权
认证是一个过程,它接收来自用户的证书,并对证书的授权进行确认。如果证书是有效的,那么用户就可以说他拥有已认证的身份。而授权的过程是:确定认证用户是否能够访问给定的资源。认证可通过系统或企业逻辑来完成,通过某个API它是或获得的。认证API是完全可扩展的,因此开发人员根据需要使用自己的企业逻辑。开发人员可以对他们的认证需求进行编码,也可以修改底层的认证方法而无需对他们的代码作太大变化。除了微软Windows?操作系统身份认证外,还有的认证方法包括基本HTTP,摘要和 Kerberos,以及微软Passport和基于窗体的认证。这些认证方法已经完全集成到ASP.NET中了。
在ASP.NET窗体认证中,用户提供证书,并提交窗体。如果应用程序簦别请求,系统发送一个cookie ,该cookie以某种形式包含包含了证书或包含重新获得身份的关键字。接下来发送的请求在头中包含了cookie,ASP.NET处理程序通过应用程序所期望的任何有效方法对这些请求认证和授权。如果请求没有经过认证,HTTP客户端将用于把请求发送到认证窗体,在那里用户可能提供信任证书。窗体认证有时用于个性化--为已知用户的内容进行定置。在一些情况下,身份是问题所在而不是认证,因此用户的个性化信息可以简单地通过访问用户或获得。
授权的目的是确定作出请求的身份是否被给予了对给定资源的访问权。ASP.NET提供了两种类型的授权服务:文件授权和URL授权。文件授权根据正在作用的方法和作出请求的身份决定用户使用于哪个访问控制列表。URL授权是URI名称空间和不同用户或角色间的逻辑映射。
隔离存储
.NET Framework提供了一个特殊的功能,隔离存储,用于存储数据,甚至是当不允许对文件进行访问时--例如,当从Internet下载了一个管理控件,并运行它,为它提供了有限的许可权但没有权力读写文件。
隔离存储是一组新的用于.NET支持的用于本地存储的类型和方法。在本质上,每个组合可以访问磁盘上一断被隔离的存储空间。它不允许访问其它数据,隔离存储只对为它创建的组合有效。
隔离存储也可被应用程序用于保存活动记录,保存设置,或者将状态数据保存到磁盘上以备将来之用。因为隔离存储的位置是预先决定好的,所以隔离存储为指定唯一存储空间提供了一种方便的方式,而不需要决定文件路径。
从本地企业局域网获得的代码具有相似的限制,但更少,它可以访问大限额的隔离存储。最后,从受限站点区域(不信任站点)来的代码没有对隔离存储的访问权。
加密
.NET Framework提供了一组加密对象,它们支持加密算法、数字签名、散列、生成随机数,是通过众所周知的运算法则实现的,如RSA, DSA, Rijndael/AES, Triple DES, DES, 和 RC2, 以及MD5, SHA1, SHA-256, SHA-384 和 SHA-512散列算法。同时还支持在IETF和W3C开发的XML数字签名规范。.NET Framework使用加密对象支持内部服务。这些对象还作为管理代码提供给需要加密支持的开发人员。
如何指定安全性?
如果要对组合运行时的行为进行修改,根据程序员的需要,可以作出声明式安全或强迫式安全的修改。
声明式安全
声明式安全使程序员可以直接在组合代码的元数据中为组合指定安全需求。许可请求和所有其它形式的声明式安全是在代码中是作为定置属性指定的。类,属性和方法的注释用于优化许可。例如,声明式安全可用于类的调用者在调用方法前检查调用者是否被已知地行商签名过,或有一个特定的强名。
由于声明属性是组合元数据的一部分,所以组合的安全需求易于辨别。可以使用工具对组合进行扫描,以发现哪些方法需要某些许可,哪些方法断言了某些许可。
当被请求的活动和许可在编译时是知道时,声明式检查可作为选择的解决方案之一。例如,如果方法总是检查对C:\temp的写访问许可,那么许可检查就会从声明中得到好处。另一方面,如果被请求的具有访问权的位置发生了变化,那么强迫式安全也许是一个比较好的解决方案。
强迫式安全
强迫式安全直接在代码中实现。程序员通过程序采取安全活动,并且根据安全堆栈的状态决定是给予还是拒绝许可。例如,当一个方法请求访问一个特定的文件时,如果调用者(或方法的任何一个调用者)没有被给予必需的许可权限,那么请求失败。因为强迫式安全是通过程序实现的,所以满足了动态需求。如果你需要对一个特定文件的访问许可,但该许可还要根据其它信息发生变化,那么,强迫式安全就是可选的解决方案。
总结
.NET Framework安全迎合了这种事实:软件向多样化的移动组件发发展,并根据这种事实提供保护。在一个细化的、可扩展的策略和许可系统下,用户能够运行功能强大的代码,而同时减少相关的风险。在没有运行时对用户作出信任决定时,管理员可以在各个级别创建强壮的安全策略。策略是完全可定置的。开发人员能够集中解决应用程序逻辑,而不用关心核心的安全问题(它由CLR透明地处理)。然而,开发人员可以在任何时候扩展安全模型。
I. Windows安全认证是如何进行的[Kerberos篇]
如果时间允许,我很乐意写一系列的文章与广大网友分享、交流。对于很多读者来说,今天讨论的可能是一个既熟悉、又陌生的话题——Windows认证。目录
一、Kerberos认证简介
四、凭票入场一、Kerberos认证简介Windows认证协议有两种NTLM(NT LAN Manager)和Kerberos,前者主要应用于用于Windows NT 和 Windows 2000 Server(or Later) 工作组环境,而后者则主要应用于Windows 2000 Server(or Later) 域(Domain)环境。Kerberos较之NTLM更高效、更安全,同时认证过程也相对复杂。Kerberos这个名字来源于希腊神话,是冥界守护神兽的名字。Kerberos是一个三头怪兽,之所以用它来命名一种完全认证协议,是因为整个认证过程涉及到三方:客户端、服务端和KDC(Key Distribution Center)。在Windows域环境中,KDC的角色由DC(Domain Controller)来担当。某个用户采用某个域帐号登录到某台主机,并远程访问处于相同域中另一台主机时,如何对访问者和被访问者进行身份验证(这是一种双向的验证)?这就是Kerberos需要解决的场景。接下来我尽量以比较直白的语言来介绍我所知道的Kerberos认证的整个流程。Kerberos实际上是一种基于票据(Ticket)的认证方式。客户端要访问服务器的资源,需要首先购买服务端认可的票据。也就是说,客户端在访问服务器之前需要预先买好票,等待服务验票之后才能入场。在这之前,客户端需要先买票,但是这张票不能直接购买,需要一张认购权证。客户端在买票之前需要预先获得一张认购权证。这张认购权证和进入服务器的入场券均有KDC发售。右图(点击看大图)一张图基本揭示了Kerberos整个认证的过程。二、如何获得“认购权证”?首先,我们来看看客户端如何获得“认购权证”。这里的认购权证有个专有的名称——TGT(Ticket Granting Ticket),而TGT的是KDC一个重要的服务——认证服务(KAS:Kerberos Authentication Service)。当某个用户通过输入域帐号和密码试图登录某台主机的时候,本机的Kerberos服务会向KDC的认证服务发送一个认证请求。该请求主要包括两部分内容,明文形式的用户名和经过加密的用于证明访问者身份的Authenticator(我实在找不到一个比较贴切的中文翻译没,Authenticator在这里可以理解为仅限于验证双反预先知晓的内容,相当于联络暗号)。当KDC接收到请求之后,通过AD获取该用户的信息。通过获取的密码信息生成一个秘钥对Authenticator进行解密。如果解密后的内容和已知的内容一致,则证明请求着提供的密码正确,即确定了登录者的真实身份。KAS成功认证对方的身份之后,会先生成一个用于确保该用户和KDC之间通信安全的会话秘钥——Logon Session Key,并采用该用户密码派生的秘钥进行加密。KAS接着为该用户创建“认购权证”——TGT。TGT主要包含两方面的内容:用户相关信息和Logon Session Key,而整个TGT则通过KDC自己的密钥进行加密。最终,被不同密钥加密的Logon Session Key和TGT返回给客户端。(以上的内容对应流程图中的步骤1、2)三、如何通过“认购权证”购买“入场券”?经过上面的步骤,客户端获取了购买进入同域中其他主机入场券的“认购凭证”——TGT,以及Logon Session Key,它会在本地缓存此TGT和Logon Session Key。如果现在它需要访问某台服务器的资源,它就需要凭借这张TGT向KDC购买相应的入场券。这里的入场券也有一个专有的名称——服务票据(ST:Service Ticket)。具体来说,ST是通过KDC的另一个服务TGS(Ticket Granting Service)出售的。客户端先向TGS发送一个ST购买请求,该请求主要包含如下的内容:客户端用户名;通过Logon Session Key加密的Authenticator;TGT和访问的服务器(其实是服务)名。TGS接收到请求之后,现通过自己的密钥解密TGT并获取Logon Session Key,然后通过Logon Session Key解密Authenticator,进而验证了对方的真实身份。TGS存在的一个根本的目有两点:其一是避免让用户的密码客户端和KDC之间频繁传输而被窃取。其二是因为密码属于Long Term Key(我们一般不会频繁的更新自己的密码),让它作为加密密钥的安全系数肯定小于一个频繁变换得密钥(Short Term Key)。而这个Short Term Key就是Logon Session Key,它确保了客户端和KDC之间的通信安全。TGS完成对客户端的认证之后,会生成一个用于确保客户端-服务器之间通信安全的会话秘钥——Service Session Key,该会话秘钥通过Logon Session Key进行加密。然后出售给客户端需要的入场券——ST。ST主要包含两方面的内容:客户端用户信息和Service Session Key,整个ST通过服务器密码派生的秘钥进行加密。最终两个被加密的Service Session Key和ST回复给客户端。(以上的内容对应流程图中的步骤3、4)四、凭票入场客户端接收到TGS回复后,通过缓存的Logon Session Key解密获取Service Session Key。同时它也得到了进入服务器的入场券——ST。那么它在进行服务访问的时候就可以借助这张ST凭票入场了。该Serivce Session Key和ST会被客户端缓存。但是,服务端在接收到ST之后,如何确保它是通过TGS购买,而不是自己伪造的呢?这很好办,不要忘了ST是通过自己密码派生的秘钥进行加密的。具体的操作过程是这样的,除了ST之外,服务请求还附加一份通过Service Session Key加密的Authenticator。服务器在接收到请求之后,先通过自己密码派生的秘钥解密ST,并从中提取Service Session Key。然后通过提取出来的Service Session Key解密Authenticator,进而验证了客户端的真实身份。实际上,到目前为止,服务端已经完成了对客户端的验证,但是,整个认证过程还没有结束。谈到认证,很多人都认为只是服务器对客户端的认证,实际上在大部分场合,我们需要的是双向验证(Mutual Authentication)——访问者和被访问者互相验证对方的身份。现在服务器已经可以确保客户端是它所声称的那么用户,客户端还没有确认它所访问的不是一个钓鱼服务呢。为了解决客户端对服务器的验证,服务要需要将解密后的Authenticator再次用Service Session Key进行加密,并发挥给客户端。客户端再用缓存的Service Session Key进行解密,如果和之前的内容完全一样,则可以证明自己正在访问的服务器和自己拥有相同的Service Session Key,而这个会话秘钥不为外人知晓(以上的内容对应流程图中的步骤5、6)以上的内容仅仅讲述的是基于Kerberos的Windows认证的大体流程,并不涉及到一些细节的东西,比如如何确保时间的同步,如何抵御Replay Attack等。此外,由于本文对Windows底层的知识有限,不能确保所有的内容都是完全正确,如有错误,还往不吝指正。Windows安全认证是如何进行的?[NTLM篇]
J. 如何实现用户认证授权系统
1、首先打开I电脑桌面,单击此电脑右键选择属性按钮。