SElinux
一.简介
SELinux全称是Security Enhanced Linux,由美国国家安全部(National Security Agency)领导开发的GPL项目,它拥有一个灵活而强制性的访问控制结构,旨在提高Linux系统的安全性,提供强健的安全保证,可防御未知攻击,相当于B1级的军事安全性能。比MS NT的C2等高得多。
SELinux起源于自1980开始的微内核和操作系统安全的研究,这两条研究线路最后形成了一个叫做的分布式信任计算机(Distribute Trusted Mach (DTMach))的项目,它融合了早期研究项目的成果(LOCK【锁】,它包含一组安全内核类型强制;Trusted Mach【信任计算机】,它将多层安全控制合并到计算机微内核中)。美国国家安全局的研究组织参加了DTMach项目,付出了巨大努力,并且继续参与了大量的后续安全微内核项目。最终,这些工作和努力导致了一个新的项目产生,那就是Flask,它支持更丰富的动态类型的强制机制。
由于不同平台对这这项技术没有广泛使用,NAS认为需要在大量的社团中展示这个技术,以说明它的持久生命力,并收集广泛的使用支持意见。在1999年夏天,NSA开始在Linux内核中实现Flask安全架构,在2000年十二月,NSA发布了这项研究的第一个公共版本,叫做安全增强的Linux。因为是在主流的操作系统中实现的,所以SELinux开始受到Linux社区的注意,SELinux最迟是在2.2.x内核中以一套内核补丁的形式发布的。
随着2001年Linux内核高级会议在加拿大渥太华顺利召开,Linux安全模型(LSM[7])项目开始为Linux内核创建灵活的框架,允许不同的安全扩展添加到Linux中。NSA和SELinux社区是SELinux的主要贡献者,SELinux帮助LSM实现了大量的需求,为了与LSM一起工作,NSA开始修改SELinux使用LSM框架。2002年八月LSM核心特性被集成到Linux内核主线,同时被合并到Linux 2.6内核。2003年八月,NSA在开源社区的帮助下,完成了SELinux到LSM框架的迁移,至此,SELinux进入Linux 2.6内核主线,SELinux已经成为一种全功能的LSM模块,包括在核心Linux代码集中。
数个Linux发行版开始在2.6内核中不同程度使用SELinux特性,但最主要是靠Red Hat发起的Fedora Core项目才使SELinux具备企业级应用能力,NSA和Red Hat开始联合集成SELinux,将其作为Fedora Core Linux发行版的一部分。在Red Hat参与之前,SELinux总是作为一个附加的软件包,需要专家级任务才能进行集成。Red Hat开始采取行动让SELinux成为主流发行版的一部分,完成了用户空间工具和服务的修改,默认开启增强的安全保护。从Fedora Core 2开始,SELinux和它的支持基础架构以及工具得到改进。在2005年早些时候,Red Hat发布了它的Enterprise Linux 4(REL 4),在这个版本中,SELinux默认就是完全开启的,SELinux和强制访问控制已经进入了主流操作系统和市场。
SELinux仍然是一个相对较新和复杂的技术,重要的研究和开发在继续不断地改进它的功能。
应用SELinux后,可以减轻恶意攻击或恶意软件带来的灾难,并提供对机密性和完整性有很高要求的信息很高的安全保障。普通Linux安全和传统Unix系统一样,基于自主存取控制方法,即DAC,只要符合规定的权限,如规定的所有者和文件属性等,就可存取资源。在传统的安全机制下,一些通过setuid/setgid的程序就产生了严重安全隐患,甚至一些错误的配置就可引发巨大的漏洞,被轻易攻击。
而SELinux则基于强制存取控制方法,即MAC,透过强制性的安全策略,应用程序或用户必须同时符合DAC及对应SELinux的MAC才能进行正常操作,否则都将遭到拒绝或失败,而这些问题将不会影响其他正常运作的程序和应用,并保持它们的安全系统结构。
二.Selinux管理配置
1.
Selinux控制规则及相关概念
1.1.DAC(自主存取控制)依据程序运行时的身份决定权限,是大部分操作系统的权限存取控制方式。也就是依据文件的own,group,other/r,w,x权限进行限制。Root有最高权限无法限制。r,w,x权限划分太粗糙。无法针对不同的进程实现限制。
1.2.MAC(强制存取控制)依据条件决定是否有存取权限。可以规范个别细致的项目进行存取控制,提供完整的彻底化规范限制。可以对文件,目录,网络,套接字等进行规范,所有动作必须先得到DAC授权,然后得到MAC授权才可以存取。
1.3.TE(类型强制)所有操作系统访问控制都是以关联的客体和主体的某种类型的访问控制属性为基础的。在SELinux中,访问控制属性叫做安全上下文。所有客体(文件、进程间通讯通道、套接字、网络主机等)和主体(进程)都有与其关联的安全上下文,一个安全上下文由三部分组成:用户、角色和类型标识符。Selinux对一些命令做了修改.ls –Z ps –Zaux id –Z
例如:[root@localhost ~]# id -Z
root:system_r:unconfined_t:SystemLow-SystemHigh
注:这里的第四部分SystemLow-SystemHigh为安全上下文的扩展属性在后面会有介绍。
在SELinux中,访问控制属性总是安全上下文三人组形式,所有客体和主体都有一个关联的安全上下文, 因为SELinux的主要访问控制特性是类型强制,安全上下文中的类型标识符决定了访问权。如上例中unconfined_t决定访问权限。
1.3.1.安全上下文:安全上下文是一个简单的、一致的访问控制属性,在SELinux中,类型标识符是安全上下文的主要组成部分,由于历史原因,一个进程的类型通常被称为一个域(domain),"域"和"域类型"意思都是一个.
1.3.2.类型:安全上下文中的用户和角色标识符除了对强制有一点约束之外对类型强制访问控制策略没什么影响,对于进程,用户和角色标识符显得更有意义,因为它们用于控制类型和用户标识符的联合体,这样就会Linux用户账号关联起来;然而,对于客体,用户和角色标识符几乎很少使用,为了规范管理,客体的角色常常是object_r,客体的用户常常是创建客体的进程的用户标识符,它们在访问控制上没什么作用。
用一个例子来解释以上概念:
假如我们设定 1.httpd这个进程使用httpd_t这个域类型运行.
2.将httpd进程使用的端口标记为httpd_port_t类型.
3.将网页目录标记为httpd_sys_content_t类型.
4.限制以httpd_t域运行的httpd程序只能监听httpd_port_t类型的端口,并限制此域的进程只能存取标记为httpd_sys_content_t的网页文件。
1.4.RBAC(基于角色的访问控制)
SELinux提供了一种依赖于类型强制(TE)基于角色的访问控制(RBAC),角色用于组域类型和限制域类型与用户之间的关系,SELinux中的用户关联一个或多个角色,使用角色和用户,RBAC特性允许有效地定义和管理最终授予Linux用户的特权。
注:组域类型指的是将多个域类型关联到一个角色。
SELinux中的角色和用户构成了它的RBAC特性的基础, SELinux中的访问权不是直接授予用户或角色的,角色扮演的是类型强制的一个支持特性,它和用户一起为Linux用户及其允许允许的程序提供了一种绑定基于类型的访问控制,SELinux中的RBAC通过定义域类型和用户之间的关系对类型强制做了更多限制,以控制Linux用户的特权和访问许可,RBAC没有允许访问权,在SELinux中,所有的允许访问权都是由类型强制提供的。
警告:Linux和SELinux有它们自己的用户标识符,如/etc/passwd中定义的用户,那就是"Linux用户"来,SElinux指的是SELinux策略中在安全上下文中定义的用户标识符。
SELinux中的RBAC特性依赖并支持TE特性,我们通过将域类型和一个或多个角色进行关联,而不是直接将权限授给用户,RBAC通过在安全上下文中控制域类型、角色和用户的关联实现对TE策略更多的约束,也就是说,域转换是受用户的角色约束的,最终约束了用户的总体权限。我们不会直接将域类型和用户进行关联,相反,域类型是与角色进行关联的,然后再将角色与SELinux用户进行关联,这就间接增加了两个效果,首先,他简化了管理所有策略的复杂度,一个系统可能只有三或四个角色,但有成千上万的用户和域类型,直接将域类型与用户进行关联,将会导致管理非常困难,将域类型分配给一小撮描述类型(如普通用户域类型)特权集的角色,然后将这些橘色指派给用户,这样就更容易管理了。
SELinux中的角色也允许我们限制用户的访问,对于任何进程,同一时间只有一个角色(即进程安全上下文中的角色)是"活动的",因为域类型是与角色进行关联的,域转换就会受到与它们关联的活动角色的限制了。
限制域转换只对当前活动的角色有效,允许用户关联更多的角色,不会获得所有角色访问权的并集,例如:我们可以将一个用户与系统管理角色和受限的普通用户角色进行关联,在后面进行交互时将会使用普通用户角色,而不是管理角色,在常规使用过程中,普通用户角色将会被激活,阻止访问权授予管理域类型,仅当必需执行系统管理任务时激活管理角色(即通过域转换改变),这与标准Linux下使用普通账户切换到root账户进行系统管理非常类似,但比准Linux方式更精细。
关键要记住角色仅仅是一套域类型的集合,他可以方便地与用户建立联系,它们不是SELinux中独立的访问控制机制。
简单一点说就是,我们可以制定很多角色指定不同的权限规范,那样就可以规范不同的用户又不同的角色,只有切换到特定的角色才有特定的存取权限。对于用户来说,被划分成一些role,即使是ROOT用户,你要是不在sysadm_r里,也还是不能实行sysadm_t管理操作的。因为,那些role可以执行那些domain也是在策略里设定的。role也是可以迁移的,但是也只能按策略规定的迁移。
1.5.DT(域类型转换)
域类型转换可以实现权限的扩展或者缩小,防止权限升级。例如:A进程运行在A_t域中,B进程运行在B_t域中。当以A_t运行B进程的时候可以规范B进程是要沿用A_t环境呢,还是继承自己的B_t环境。
举个例子进行说明:
1.5.1.环境介绍.察看当前用户的类型,vsftpd启动脚本的类型以及vsftpd执行程序的类型.
[root@localhost ~]# id -Z
user_u:system_r:unconfined_t
[root@localhost ~]# ls -Z /etc/init.d/vsftpd
-rwxr-xr-x
root root system_u:object_r:initrc_exec_t
/etc/init.d/vsftpd
[root@localhost ~]# ls /usr/sbin/vsftpd -Z
-rwxr-xr-x
root root system_u:object_r:ftpd_exec_t
/usr/sbin/vsftpd
1.5.2.selinux策略文件里的定义如下:
type_transition unconfined_t initrc_exec_t:process initrc_t
这条定义了以类型为unconfined_t身份执行类型为initrc_t的文件时进程的类型转换为initrc_t.
type_transition initrc_t ftpd_exec_t:process ftpd_t
这条定义了以类型为initrc_t身份执行类型为ftpd_exec_t文件时进程类型转换为ftp_t.
1.5.3.整个运行流程如下:
1.5.3.1.类型为unconfined_t的进程执行类型为initrc_exec_t类型的/etc/init.d/vsftpd文件,根据策略规定执行中的进程运行在initrc_t域中.
1.5.3.2.在initrc_t域中运行的进程会执行类型为ftpd_exec_t的/usr/sbin/vsftpd程序,根据策略文件的规定,/usr/sbin/vsftpd程序会在ftp_t域中运行.
1.5.3.3.最后我们就可以规范ftp_t类型可以存取的类型来限制ftp服务器.
1.5.3.4.小结
1.5.3.4.1./etc/init.d目录下所有文件的类型为initrc_exec_t
1.5.3.4.2.在selinux策略中定义了只能使用/etc/init.d目录下的脚本来启动服务.
1.5.3.4.3.启动的服务会进行类型转换而受到selinux策略里的环境而规范.
1.6.Selinux配置文件及设定
1.6.1.Selinux配置文件主目录是/etc/selinux
[root@localhost targeted]# ls /etc/selinux/
config
mls
restorecond.conf
semanage.conf
strict
targeted
1.6.1.1.使用config文件来配置selinux
SELINUX=enforcing
#此项定义selinux状态。
#enforcing—是强制模式系统受selinux保护。
#permissive—是提示模式系统不会受到selinux保护,只是收到警告信息。
#disabled—禁用selinux。
# SELINUXTYPE= type of policy in use. Possible values are:
#
targeted - Only targeted network daemons are protected.
#
strict - Full SELinux protection.
SELINUXTYPE=targeted
#此项定义selinux使用哪个策略模块保护系统。
#targeted—小红帽开发的策略,只对apache ,sendmail, bind,postgresql等网络服务保护,不属于那些domain的就都让他们在unconfined_t里,可导入性高,可用性好但是不能对整体进行保护。
# Strict,是NAS开发的,能对整个系统进行保护,但是设定复杂。
#mls,是一个较新的安全策略。
#以上三种策略配置都放置在/etc/selinux目录中,目录和策略名称相同。
1.6.2.targeted目录是targeted策略配置目录,contexts/子目录包括了许多帮助系统服务和实用程序管理文件安全上下文标记的大量文件,它们也包括登陆进程的默认安全上下文,通常,这些文件只应该由策略开发人员修改,但管理员可能偶尔也需要修改一下,下面列出这些文件的主要用途,你也可以略过这个部分的阅读。
1.6.2.1.contexts/customizable_types:包括一列当使用restorecon或setfiles实用程序修复文件标记问题时不会被重新标记的类型,这个特性在帮助保护某些文件标记时特别有用,使用SELinux应用程序接口(API)检查上下文是否自定义的是is_context_customizable(3)。
1.6.2.2.contexts/default_contexts:在初始登陆过程中,用户可能登陆会话可能不止得到一个角色/类型组授权,如管理员就可以以特权用户和非特权用户登陆,这个文件提供了一个方法决定初始登陆使用哪个登陆进程(login,ssh等)作为默认的角色/类型组。
注意,如果有contexts/users/[USER]文件的话,这些默认值可能会被一个特殊用户覆盖。
1.6.2.3.contexts/users/[USER]:这个文件和default_contexts文件的格式一样,除了default_contexts是为一个特殊用户设计的外,如果某个用户的文件已经存在,默认的角色/类型组由该文件的第一个决定。
1.6.2.4.contexts/failsafe_context:如果登陆进程不能决定用户的默认安全上下文,用户将不能登陆进系统,这和default_contexts文件被破坏会改变非常类似,这个文件提供了一个合理的安全上下文故障自动转移机制,至少允许管理员登陆,它提供最后的登陆进程失败前使用的默认安全上下文,通常是:
sysadm_r:sysadm_t
这样的话,至少管理员可以登陆。
1.6.2.5.contexts/default_type:这个文件包括一列实用程序(如newrole)使用的角色/类型组,如果我们使用newrole修改我们的角色,但不指定类型,实用程序将会咨询这个文件以确定默认的类型和角色,如果我们使用命令newrole -r sysadm_r,而且这个文件有一行的内容为sysadm_r:sysadm_t,这个命令将会尝试使用sysadm_t作为我们的默认用户域类型。
1.6.2.6.contexts/files/file_contexts:这个文件包括与文件有关的安全上下文标记信息,作为策略构建过程的一部分,为与文件有关的客体使用初始化安全上下文,它安装在这里帮助实用程序修复标记问题。
1.6.2.7.contexts/files/file_ contexts.home_dirs:这个文件是使用/usr/sbin/genhomedircon脚本自动生成的,它的格式与file_contexts一致,但它只用于标记用户home目录。
1.6.2.8.contexts/files/homedir_template:这个文件包括一个/usr/sbin/genhomedircon脚本使用它产生标记块的模板。
1.6.2.9.contexts/files/media:这个文件包括挂载在/media/目录下的存储设备的安全上下文,通过libselinux matchmediacon(3) API使用它。
1.6.2.10.contexts/initrc_context:这个文件包括一个角色/类型组,用于run_init的安全上下文,即管理员以init相同的方式启动系统服务,这样它就可以执行由init初始化的存储在/etc/rc.d/目录下的脚本,这个角色/类型组通常和init用来启动系统服务的角色/类型组一致
1.6.2.11.contexts/removable_context:这个文件包括可移动媒体设备的默认安全上下文,这个安全上下文用于media上下文文件没有标记的设备
1.6.3.检查selinux策略相关命令
1.6.3.1.seinfo
1.6.3.2.sesearch –a
1.6.3.3.sesearch –a –t ftpd_t
1.6.4.设置selinux相关命令
1.6.4.1.sestatus 查询selinux工作状态
[root@localhost selinux]# sestatus
SELinux status:
enabled
SELinuxfs mount:
/selinux
Current mode:
enforcing
Mode from config file:
enforcing
Policy version:
21
Policy from config file:
targeted
1.6.4.2.selinuxenabled检查selinux是否开启,配合echo $?.传回值是0为开启,1为关闭.
[root@localhost selinux]# selinuxenabled
[root@localhost selinux]# echo $?
0
1.6.4.3.setenforce设定selinux运行状态,1开启,0关闭.
[root@localhost selinux]# setenforce 1
1.6.4.4.selinux的boolean值.selinux策略中定义许多boolean值,用户自定义要让selinux开启保护某些程序,或者是关闭对某些程序,程序中的某个项目的保护.目录位置/selinux/boolean/下相关文件.
1.6.4.4.1.查看boolean值
[root@localhost ~]# getsebool -a
[root@localhost ~]# getsebool -a | grep ftp
1.6.4.4.2.设置boolean值,-P为设置永久生效.
[root@localhost ~]# setsebool ftpd_disable_trans off
[root@localhost ~]# setsebool -P ftpd_disable_trans off
注:不建议使用setsebool -P ftpd_disable_trans off,这样会让ftp服务器失去selinux保护.
试验1:启动vsftp服务器后以本地帐户登陆服务器,你是否看到本地帐号不能切换到家目录的出错信息?使用以下命令允许本地帐户进入家目录.(off是禁止本地帐户切换到家目录)
[root@localhost ~]# setsebool -P ftp_home_dir on
1.6.5.查看安全上下文相关命令
1.6.5.1.查看用户安全上下文,下面是普通用户和超级用户的安全上下文,从第一个字段一次为用户标识,角色,域类型.超级用户的第四字段为扩展的MLS或 MCS.(见附录)
tomyang@localhost ~]$ id -Z
user_u:system_r:unconfined_t
[root@localhost ~]# id -Z
root:system_r:unconfined_t:SystemLow-SystemHigh
1.6.5.2.查看文件安全上下文
[onlyc@localhost ~]$ ls -Z /home/onlyc/
drwxr-xr-x
onlyc onlyc user_u:object_r:user_home_t
Desktop
1.6.5.3.查看进程的安全上下文
user_u:system_r:ftpd_t
7950 ?
Ss
0:00 /usr/sbin/vsftpd
1.6.6.认识安全上下文,安全上下文以用户:角色:类型(域)的形式出现.(这里的用户指的是selinu用户)
1.6.6.1.用户:root表示root帐号身份,user_u表示普通无特权用户(一般用户),system_u表示系统进程.通过用户可以确认身份类型,一般搭配角色使用,身份和不同的角色搭配时权限不同.帐户之间切换时此用户身份不变.但是在targeted策略环境下用户标识没有实质作用.
1.6.6.2.角色:object_r一般为文件目录的角色,system_r一般为进程的角色.在targeted策略环境中用户的角色一般为system_r.在strict策略中用户的角色被细分为sysadm_r,system_r,user_r,staff_r角色.用户的角色类似组的概念,不同的角色具有不同的身份权限.一个用户可以具备多个角色,但是同一时间只能使用一个角色.但是在targeted策略环境下角色没有实质作用.在targeted策略环境中所有的进程文件的角色都是system_r角色.在strict策略环境中,一般用户登录时角色是user_r,root登陆时角色是staff_r,但是没有特权,切换到sysadm_r角色才具备超级用户的权限.只有staff_r角色可以切换成sysadm_r角色.
1.6.6.3.类型(进程的类型又可以称为域):文件和进程都有一个类型,seliunx依据类型的相关组合来限制存取权限.
1.6.7.更改安全上下文
1.6.7.1.chcon [-u –r -t] 如果此命令应用于目录上,则以后再此目录建立的文件都会继承目录的类型.
[root@localhost html]# ls -Z
-rw-r--r--
root root user_u:object_r:home_root_t
index.html
[root@localhost html]# chcon -t httpd_sys_content_t index.html
[root@localhost html]# ls -Z
-rw-r--r--
root root user_u:object_r:httpd_sys_content_t index.html
也可以这样做
[root@localhost html]# ls -Z
-rw-r--r--
root root user_u:object_r:home_root_t
index.html
[root@localhost html]# chcon --reference=/var/www/html index.html
[root@localhost html]# ls -Z
-rw-r--r--
root root system_u:object_r:httpd_sys_content_t index.html
试验1:启动ftp服务器,在服务器上打开匿名用户上传权限,并给目录可写权限,以匿名帐户登陆服务器看匿名帐户能否上传文件?selinux策略默认是不允许匿名用户上传文件的.
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anon_upload_enable=YES
[root@localhost ~]# mkdir /var/ftp/upload
[root@localhost ftp]# chmod 1777 upload/
[root@localhost ftp]# ls -Z
drwxrwxrwt
root root user_u:object_r:public_content_t upload
[root@localhost ftp]# lftp ftp@localhost
Password:
lftp ftp@localhost:~> cd upload/
cd ok, cwd=/upload
lftp ftp@localhost:/upload> ls
lftp ftp@localhost:/upload> put /root/install.log
put: Access failed: 553 Could not create file. (install.log)
现在使用以下命令允许匿名帐户可以上传文件
[root@localhost ftp]# chcon -t public_content_rw_t upload/
[root@localhost ftp]# ls -Z
drwxrwxrwt
root root system_u:object_r:public_content_t pub
drwxrwxrwt
root root user_u:object_r:public_content_rw_t upload
[root@localhost ftp]# lftp ftp@localhost
Password:
lftp ftp@localhost:~> cd upload/
cd ok, cwd=/upload
lftp ftp@localhost:/upload> put /root/install.log
27019 bytes transferred
1.6.7.2.restorecon
[-r -F]恢复文件安全上下文的默认值,-r递归 –F强制.默认值在/etc/selinux/targeted/contexts/files/file_contexts文件中定义.
[root@localhost www]# ls -Z
drwxr-xr-x
root root system_u:object_r:etc_t
html
[root@localhost www]# restorecon
html
[root@localhost www]# ls -Z
drwxr-xr-x
root root system_u:object_r:httpd_sys_content_t html
1.6.7.3. fixfiles一般是对整个文件系统根据/etc/selinux/targeted/contexts/files定义的进行修复,后面一般跟 relabel,对整个系统 relabel后,一般我们都重新启动。如果,在根目录下有.autorelabel空文件的话,每次重新启动时都调用 fixfiles relabel.下面介绍三种用法.
check:显示所有与文件上下文文件中安全上下文不匹配的与文件有关的客体。
restore:重新标记那些与文件上下文文件的安全上下文不匹配的与文件有关的客体的安全上下文。
relabel:和restore一样,但它也可以首先从/tmp目录中移除文件。
[root@localhost www]# fixfiles
–F
relabel
/
[root@localhost www]# fixfiles restore /etc/
[root@localhost www]# fixfiles check /etc/
1.6.8.所有的selinux信息都会记录到. /var/log/messages文件中
1.6.8.1.sealert –l 可以察看详细的消息
[root@localhost ~]#cat /var/log/messages
Mar
7 08:07:07 localhost setroubleshoot: SELinux is preventing restorecon (restorecon_t) "write" to /var/www/system_u:object_r:httpd_sys_content_t:s0 (httpd_sys_content_t). For complete SELinux messages. run sealert -l c836e80e-8e05-4d63-a871-3dee9f86a01f
[root@localhost ~]# sealert -l c836e80e-8e05-4d63-a871-3dee9f86a01f
1.6.8.2.GUI界面
1.6.9.GUI界面的selinux管理工具
1.6.9.1.使用GUI管理工具修改boolean值
Admin
在 Admin 类下,你可以允许系统使用未分配的终端(ttys),允许对 root 目录进行写操作,从非标准位置读取文件,禁止任何进程加载内核模块,禁止任何对 SELinux策略的修改,以及提供对缓冲区溢出保护的支持。
Cronn
在这节,你可以启用额外的规则以支持 fcron 调度命令,以及禁用 SELinux对 cron服务的保护。
CVS
如果你使用 CVS 版本控制系统,你可能想使它能够访问密码的影文件。
Databases
如果你安装了 MySQL 或 PostgreSQL 数据库系统,你可以关闭 SELinux对它们的保护。
FTP
这里有6个配置项,RHEL5 的 SELinux 允许 FTP作为独立于 xinetd (第13章对 xinetd服务有描述)的服务允许。即支持 vsftpd 作为常规服务运行,而不与 inetd或 xinetd 有关联。允许目录上传,需使用 public_content_rw_t 指令,前面已有讨论。你可以同样支持使用 CIFS和 NFS进行文件传输,允许读写用户家目录,或禁用 SELinux对 FTP服务的保护。
HTTPD Service
这里有一些 SELinux指令以增强 Apache Web 服务器的安全性,如下列所示。许多是很好理解的,其中一些,我添加了注释。
*允许 Apache 使用 mod_auth_pam (Pluggable Authentication Modules)
*允许 HTTPD 支持 CGI (CGI脚本)
*允许 httpd 守护进程对有 public_content_rw_t 标签的目录与文件写入(类似 FTP)
*允许 HTTPD 脚本和模块连接到网络
*允许 HTTPD 脚本和模块通过网络连接到数据库
*允许 HTTPD 脚本对有 public_content_rw_t 标签的目录与文件写入(类似 FTP)
*允许 HTTPD 读取家目录
*允许 HTTPD 作为 FTP 服务器运行
*允许 HTTPD 运行 SSL 与 CGI 在同一域中
*允许 HTTPD 支持内置脚本
*禁止 SELinux 对 httpd守护进程的保护
*禁止 SELinux 对 httpd suexec(可允许 HTTPD 服务的可执行文件)的保护
*统一 HTTPD 处理的所有内容档案
*统一 HTTPD 连接终端;需要处理证书
Kerberos
这里有3个配置选项。一个选项允许其他进程使用 Kerberos 文件(默认启用)。其他两个选项禁止 SELinux 对 Kerberos 管理进程 (kadmind) 和 Kerberos 键盘控制进程 (krb5kdc) 的保护。
Memory Protection
在目前版本的 Red Hat 考试指南,内存保护选项不与任何服务或系统关联。
Mount
这一类与 automount 服务有关;你可以通过配置它以允许挂载者挂载任何目录或文件,同样也可以禁用 SELinux的保护。
Name Service
名称服务器进程(named)指的是 RHEL DNS 服务。如果你维护一个区域,你会希望允许 named 进程可以覆盖主域文件。你也可以禁用 SELinux 的保护。名称服务器的缓存进程(ncsd)也是如此。
NFS
在NFS启用 SELinux之前,你至少需要启用 NFS 文件系统的读权限。如果你使用 NFS 共享系统,你可能想在 NFS 文件系统上启用读/写/创建功能。如果你配置某个服务器上的家目录作为 NFS 共享,你可能想让 NFS 支持家目录。这些都有通常安全管理服务进程(gssd)提供支持。
NIS
如果你想在 SELinux 系统上运行 NIS,你可能想允许 NIS 运行进程。你可以取消 SELinux对 NIS 密码和 NIS 传输进程的保护。如果还有问题,你可以取消 SELinux对相关进程(ypbind)的保护。
Other
这些选项可以允许完整文件的访问,通过 FTP 和未标签的包。它们同样可以禁止 SELinux 对PC读卡器和特殊时区数据的保护。
Polyinstatiation
Polyinstatiation 是很重要的,这意味着不同的用户在相同的目录下可能会看到不同的东西,如/ tmp。你可以使用 SELinux工具启用这一支持。
pppd
这一进程使用电话调制解调器进行通讯。你可以允许 pppd 在内核中插入支持通信的模块,或禁用 SELinux保护。
Printing
这部分允许你禁用 SELinux 对于不同 CUPS 进程的保护,包括 CUPS 后台服务, cupsd进程,cupsd-lpd服务和 HP 打印机进程(hplip)。你甚至可以用 LPD代替 CUPS。
rsync
这部分允许你为标签为 public_content_rw_t 目录配置写权限,和禁止 SELinux保护。
Samba
这里有一些方法,你可以使用SELinux 保护 Samba。选项如下:
*允许 Samba 共享 nfs目录
*允许 Samba 共享用户家目录
*允许 Samba 对标签为 public_content_rw_t 的目录文件进行写操作
*允许 用户登录到 CIFS家目录
*禁止 SELinux对 nmbd进程(NetBIOS 进程)的保护
*禁止 SELinux对 smbd进程(Samba 进程)的保护
*禁止 SELinux对 winbind进程(WINS 服务进程)的保护
SASL Authentication Server
简单的身份验证和安全层(SASL)服务器是另一个验证方法;通过安全级别配置工具,可以允许它进入您的 /etc/shadow 验证数据库,以及停用SELinux的保护。
在工作中
如上所述,这里有"sasl authentication server" 和 "sasl authentications server"。相关错误见 231868错误文件 https://bugzilla.redhat.com
SELinux Service Protection
这一类允许为大范围的进程禁用 SELinux保护,如从 amanda 到 zebra。这些服务不包含在其他类中。
Spam Protection
这一类作用于 SpamAssassin 服务。对于常规用户需要进入家目录。当然,你依然可以禁用它。
SQUID
如果你想设置 Squid Web代理的缓存,你将需要允许它访问网络。你也可以禁止 SELinux。
Universal SSL Tunnel
如果你要为网络配置一个安全通道,你可以用 SELinux添加保护。你可以使用此工具允许 stunnel 作为单独的服务运行,也可以禁用SELinux的保护。
Zebra
你可以利用这一工具是 Zebra 路由服务对路由表进行写入。
附录:多层安全
1.MLS是另一种强制访问控制方法,特别适合于政府机密数据的访问控制,早期对计算机安全的研究大多数都是以在操作系统内实现MLS访问控制为驱动的,SELinux为MLS提供了可选的支持,即使类型强制保留了SELinux的基础访问控制机制,我们也还是可以开启MLS特性,提供额外的MLS风格的强制访问控制。在SELinux中,MLS是类型强制的一个可选扩展,如果没有类型强制就没有MLS。
2.在开启了MLS后,安全上下文扩展了两个字段:低安全级别和高安全级别。每个安全级别本身有两个字段:灵敏度和一套分类。灵敏度有着严格的分级,它反应了一个有序的数据灵敏度模型,如政府分类控制中的绝密,机密和无密级。分类是无序的,它反应的是数据划分的需要。基本思路是对于要访问的数据你同时需要足够的灵敏度和正确的分类。
警告:不要将安全级别和灵敏度弄混了,一个安全级别是一个灵敏度和一套分类的集合。灵敏度有着严格的分级,可以使用等价关系符(<,=,>)进行比较;安全级别是没有分级的,可以使用控制关系运算符(dom,domby,eq,incomp)进行比较。
3.在SELinux策略中,使用sensitivity语句定义灵敏度,如:
sensitivity s0;sensitivity s1;sensitivity s2;sensitivity s3;
这些语句定义了四个灵敏度,分别是s0,s1,s2和s3。你可以随意给灵敏度命名,还可以在定义灵敏度时给它起别名,别名的待遇和正式名称一样,如:
sensitivity s1 alias unclassified;
因为灵敏度是分层的,我们必须在策略中使用dominance语句指定灵敏度的分级,如:
dominance { s0 s1 s2 s3 }
# s0 表示低,s3 表示高
dominance语句按从低到的高的顺序列出了灵敏度的名字,因此,在我们的例子中,s0比s1低,s1比s2低,以此类推。
分类的定义方法与灵敏度类似,它使用category语句进行定义,分类也可以有别名。但与灵敏度不同的是,分类是没有分级的,因此,不需要在分类之间明确定义任何关系,如:
category c0 alias blue;category c1 alias red;category c2 alias green;category c3 alias orange;category c4 alias white;
最后一步是使用level语句定义安全级别,level语句规定了灵敏度如何与分类进行关联,记住一个安全级别是由一个灵敏度加上一套分类组成的,如:
level s0:c0.c4;level s1:c0.c4;level s2:c0.c4;level s3:c0.c4;
在level语句中,可以灵活组织和搭配已经定义好的灵敏度和分类。
在前面这个例子中,我们将定义的所有灵敏度和分类都进行关联,在这个关联中还可以做更多的限制,如:
level s0:c0.c2;level s1:c0.c2,c4;
在这个例子中,s0可能只与分类c0,c1和c2关联,s1与c0,c1,c2和c4关联,但没有c3,现在你应该已经知道这里的点(.)表示一个分类的范围了,而逗号(,)表示一个非连续的分类列表了。
警告:由于分类范围是通过范围操作符(.)来指定的,这并不意味着分类是有分级的,相反,范围操作符只不过是一个引用一套分类的简便方法,分类的顺序也仅仅表示声明时的一个先后次序,并没有其他含义。
因此,如果你按c1,c0和c2的顺序声明的分类,表达式c0.c2等于c0和c2,并不包含c1。
level语句定义了灵敏度和分类的关联,共同组成一个合格的安全级别,成为SELinux中MLS的一部分
4.对于MLS SELinux系统,安全上下文被扩展,新加入两个安全级别:低或当前的安全级别和高安全级别。通常,低安全级别反应的是进程当前的安全级别,或包含在客体内的数据的灵敏度;高安全级别反应的是上下文中用户标识符的许可证级别或那些所谓多层客体允许的数据最大范围,当MLS开启时,对安全上下文的扩展格式如下:
user:role:type:sensitivity[:category,...]
[-sensitivity[:category,...]]
注意安全级别只需要一个灵敏度,可以不要分类或搭配多个分类,即分类是可选的,此外,在指定安全上下文时不需要指定高级级别,如果未指定,高级就等于低级,对于客体而言,这很常见。
对于一个有效的安全上下文,高级级别必须优先于低级级别,此外,与灵敏度关联的分类也必须是有效的,假设我们使用前面的level语句:
level s0:c0.c2;
level s1:c0.c2,c4;
和user_u,user_r和user_t,这些都是有效的用户、角色和类型标识符,下面的安全上下文是无效的:
user_u:user_r:user_t:s0-s0:c2,c4
(c4 is invalid for s0)
user_u:user_r:user_t:s0:c0-s0:c2
(high does not dominate the low)
因为SELinux中的MLS特性扩展了安全上下文,无论在什么地方使用安全上下文都需要指定安全级别信息了,对于一个MLS系统,所有用户都必须要有一个定义好的许可证安全级别(即高安全级别),它代表最高级别进程用户,user语句的语法就被改为:
user 用户名 roles 角色集
level 默认级别 range 允许的范围 ;
这里的用户名和角色集参数和之前的一样,但添加了两个新的关键字,一个定义用户登陆时默认的安全级别(level),另一个定义了用户登陆或可以运行的进程的安全级别的范围(range),默认级别是一个单一有效安全级别,允许的范围是从低到高的安全级别范围,如:
user joe roles user_r level s0 range s0 - s3:c0.c4;
这个语句给用户joe分配的默认安全级别是s0(我们早先定义的最低的敏感度,没有分类),允许用户从无分类的安全级别s0到有分类c0到c4的安全级别s3的任何安全级别登陆,如用户可以以s1:c1.c2安全级别登陆,但不允许以s4:c0安全级别登陆,因为这个级别没有在允许的范围内。
MLS影响的其它主要区域是使用一个安全上下文标记一个客体的地方,你需要记住,在MLS系统中,要扩展客体安全上下文,使其包括低和高安全级别.
[查看全文]

linux下open webmail服务器的架设
架设open webmail服务器,要安装sendmail和Apache2个服务哦,这个就不多说了。
准备所需的软件:
CGI.pm-3.05.tar.gz
MIME-Base64-3.01.tar.gz
libnet-1.19.tar.gz
Text-Iconv-1.2.tar.gz
Digest-1.08.tar.gz
Digest-MD5-2.33.tar.gz
perl-suidperl-5.8.8-27.el5.i386.rpm
所需软件可以去官方找,地址是http://openwebmail.org/openwebmail/download/packages/
安装软件的格式如下所示
tar -zxvf CGI.pm-3.05.tar.gz
cd CGI.pm-3.05
perl Makefile.PL
make
make install
其他一样的安装,按照上面软件包的顺序安装
安装openmail
tar -zxvf openwebmail-2.53.tar.gz
cp data/openmail /var/www/html
cp cgi-bin/openwebmail /var/www
然后是配置openmail
现在来看看我们的OpenWebMail是否安装完成,打开浏览器,输入:
http://localhost/cgi-bin/openwebmail/openwebmail.pl
如果出现登录OpemWebMail的界面,则说明安装成功,出现错误请反正检查,包括
你的cgi-bin目录在Apache是配置是否合理,看我的Apache中cgi-bin目录的配置:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
<Directory "/var/www/cgi-bin">
AllowOverride None
Options Indexes FollowSymLinks MultiViews
Order allow,deny
Allow from all
</Directory>
1.修改:vi cd /var/www/cgi-bin/openwebmail/etc/defaults/dbm.conf
把里面内容改成这样:
dbm_ext .db
dbmopen_ext .db
dbmopen_haslock yes
保存退出。然后在执行:
2.修改:/usr/httpd/cgi-bin/openwebmail/etc/defaults/auth_unix.pl文件:
my $unix_passwdfile_plaintext="/etc/passwd";
my $unix_passwdfile_encrypted="/etc/shadow";
my $unix_passwdmkdb="none";
2、修改 /usr/httpd/cgi-bin/openwebmail/etc/openwebmail.conf (我的文件内容如下)
domainnames auto
auth_module auth_unix.pl
mailspooldir /var/spool/mail
dbm_ext .db
dbmopen_ext %dbm_ext%
dbmopen_haslock no
ow_cgidir /usr/httpd/cgi-bin/openwebmail
ow_cgiurl /cgi-bin/openwebmail
ow_htmldir /usr/httpd/htdocs/openwebmail
ow_htmlurl /openwebmail
logfile /var/log/openwebmail.log
spellcheck /usr/bin/ispell
*本站禁止HTML标签噢* ;
--
Open WebMail Project (http://openwebmail.org)
</default_signature>;
然后运行/usr/httpd/cgi-bin/openwebmail/openwebmail-tool.pl --init
并启动apache:
/usr/httpd/bin/apachectl start
到此,你可以浏览一下看安装是否成功:http://localhost/cgi-bin/openwebmail/openwebmail.pl
PS:安装过程可能会出现错误提示,这个以后我会出更详细的文字教程,后续……
参考这个文档哦http://www.docin.com/p-28533081.html#
[查看全文]
Linux Iptables命令详解用iptables -ADC 来指定链的规则,-A添加 -D删除 -C 修改
iptables - [RI] chain rule num rule-specification[option]
用iptables - RI 通过规则的顺序指定
iptables -D chain rule num[option]
删除指定规则
iptables -[LFZ] [chain][option]
用iptables -LFZ 链名 [选项]
iptables -[NX] chain
用 -NX 指定链
iptables -P chain target[options]
指定链的默认目标
iptables -E old-chain-name new-chain-name
-E 旧的链名 新的链名
用新的链名取代旧的链名
说明
Iptalbes 是用来设置、维护和检查Linux内核的IP包过滤规则的。
可以定义不同的表,每个表都包含几个内部的链,也能包含用户定义的链。每个链都是一个规则列表,对对应的包进行匹配:每条规则指定应当如何处理与之相匹配的包。这被称作'target'(目标),也可以跳向同一个表内的用户定义的链。
TARGETS
防火墙的规则指定所检查包的特征,和目标。如果包不匹配,将送往该链中下一条规则检查;如果匹配,那么下一条规则由目标值确定.该目标值可以是用户定义的链名,或是某个专用值,如ACCEPT[通过], DROP[删除], QUEUE[排队], 或者 RETURN[返回]。
ACCEPT 表示让这个包通过。DROP表示将这个包丢弃。QUEUE表示把这个包传递到用户空间。RETURN表示停止这条链的匹配,到前一个链的规则重新开始。如果到达了一个内建的链(的末端),或者遇到内建链的规则是RETURN,包的命运将由链准则指定的目标决定。
TABLES
当前有三个表(哪个表是当前表取决于内核配置选项和当前模块)。
-t table
这个选项指定命令要操作的匹配包的表。如果内核被配置为自动加载模块,这时若模块没有加载,(系统)将尝试(为该表)加载适合的模块。这些表如下:filter,这是默认的表,包含了内建的链INPUT(处理进入的包)、FORWORD(处理通过的包)和OUTPUT(处理本地生成的包)。nat,这个表被查询时表示遇到了产生新的连接的包,由三个内建的链构成:PREROUTING (修改到来的包)、OUTPUT(修改路由之前本地的包)、POSTROUTING(修改准备出去的包)。mangle 这个表用来对指定的包进行修改。它有两个内建规则:PREROUTING(修改路由之前进入的包)和OUTPUT(修改路由之前本地的包)。
OPTIONS
这些可被iptables识别的选项可以区分不同的种类。
COMMANDS
这些选项指定执行明确的动作:若指令行下没有其他规定,该行只能指定一个选项.对于长格式的命令和选项名,所用字母长度只要保证iptables能从其他选项中区分出该指令就行了。
-A -append
在所选择的链末添加一条或更多规则。当源(地址)或者/与 目的(地址)转换为多个地址时,这条规则会加到所有可能的地址(组合)后面。
-D -delete
从所选链中删除一条或更多规则。这条命令可以有两种方法:可以把被删除规则指定为链中的序号(第一条序号为1),或者指定为要匹配的规则。
-R -replace
从选中的链中取代一条规则。如果源(地址)或者/与 目的(地址)被转换为多地址,该命令会失败。规则序号从1开始。
-I -insert
根据给出的规则序号向所选链中插入一条或更多规则。所以,如果规则序号为1,规则会被插入链的头部。这也是不指定规则序号时的默认方式。
-L -list
显示所选链的所有规则。如果没有选择链,所有链将被显示。也可以和z选项一起使用,这时链会被自动列出和归零。精确输出受其它所给参数影响。
-F -flush
清空所选链。这等于把所有规则一个个的删除。
--Z -zero
把所有链的包及字节的计数器清空。它可以和 -L配合使用,在清空前察看计数器,请参见前文。
-N -new-chain
根据给出的名称建立一个新的用户定义链。这必须保证没有同名的链存在。
-X -delete-chain
删除指定的用户自定义链。这个链必须没有被引用,如果被引用,在删除之前你必须删除或者替换与之有关的规则。如果没有给出参数,这条命令将试着删除每个非内建的链。
-P -policy
设置链的目标规则。
-E -rename-chain
根据用户给出的名字对指定链进行重命名,这仅仅是修饰,对整个表的结构没有影响。TARGETS参数给出一个合法的目标。只有非用户自定义链可以使用规则,而且内建链和用户自定义链都不能是规则的目标。
-h Help.
帮助。给出当前命令语法非常简短的说明。
PARAMETERS
参数
以下参数构成规则详述,如用于add、delete、replace、append 和 check命令。
-p -protocal [!]protocol
规则或者包检查(待检查包)的协议。指定协议可以是tcp、udp、icmp中的一个或者全部,也可以是数值,代表这些协议中的某一个。当然也可以使用在/etc/protocols中定义的协议名。在协议名前加上"!"表示相反的规则。数字0相当于所有all。Protocol all会匹配所有协议,而且这是缺省时的选项。在和check命令结合时,all可以不被使用。
-s -source [!] address[/mask]
指定源地址,可以是主机名、网络名和清楚的IP地址。mask说明可以是网络掩码或清楚的数字,在网络掩码的左边指定网络掩码左边"1"的个数,因此,mask值为24等于255.255.255.0。在指定地址前加上"!"说明指定了相反的地址段。标志 --src 是这个选项的简写。
-d --destination [!] address[/mask]
指定目标地址,要获取详细说明请参见 -s标志的说明。标志 --dst 是这个选项的简写。
-j --jump target
-j 目标跳转
指定规则的目标;也就是说,如果包匹配应当做什么。目标可以是用户自定义链(不是这条规则所在的),某个会立即决定包的命运的专用内建目标,或者一个扩展(参见下面的EXTENSIONS)。如果规则的这个选项被忽略,那么匹配的过程不会对包产生影响,不过规则的计数器会增加。
-i -in-interface [!] [name]
i -进入的(网络)接口 [!][名称]
这是包经由该接口接收的可选的入口名称,包通过该接口接收(在链INPUT、FORWORD和PREROUTING中进入的包)。当在接口名前使用"!"说明后,指的是相反的名称。如果接口名后面加上"+",则所有以此接口名开头的接口都会被匹配。如果这个选项被忽略,会假设为"+",那么将匹配任意接口。
-o --out-interface [!][name]
-o --输出接口[名称]
这是包经由该接口送出的可选的出口名称,包通过该口输出(在链FORWARD、OUTPUT和POSTROUTING中送出的包)。当在接口名前使用"!"说明后,指的是相反的名称。如果接口名后面加上"+",则所有以此接口名开头的接口都会被匹配。如果这个选项被忽略,会假设为"+",那么将匹配所有任意接口。
[!] -f, --fragment
[!] -f --分片
这意味着在分片的包中,规则只询问第二及以后的片。自那以后由于无法判断这种把包的源端口或目标端口(或者是ICMP类型的),这类包将不能匹配任何指定对他们进行匹配的规则。如果"!"说明用在了"-f"标志之前,表示相反的意思。
OTHER OPTIONS
其他选项
还可以指定下列附加选项:
-v --verbose
-v --详细
详细输出。这个选项让list命令显示接口地址、规则选项(如果有)和TOS(Type of Service)掩码。包和字节计数器也将被显示,分别用K、M、G(前缀)表示1000、1,000,000和1,000,000,000倍(不过请参看-x标志改变它),对于添加,插入,删除和替换命令,这会使一个或多个规则的相关详细信息被打印。
-n --numeric
-n --数字
数字输出。IP地址和端口会以数字的形式打印。默认情况下,程序试显示主机名、网络名或者服务(只要可用)。
-x -exact
-x -精确
扩展数字。显示包和字节计数器的精确值,代替用K,M,G表示的约数。这个选项仅能用于 -L 命令。
--line-numbers
当列表显示规则时,在每个规则的前面加上行号,与该规则在链中的位置相对应。
MATCH EXTENSIONS
对应的扩展
iptables能够使用一些与模块匹配的扩展包。以下就是含于基本包内的扩展包,而且他们大多数都可以通过在前面加上!来表示相反的意思。
tcp
当 --protocol tcp 被指定,且其他匹配的扩展未被指定时,这些扩展被装载。它提供以下选项:
--source-port [!] [port[:port]]
源端口或端口范围指定。这可以是服务名或端口号。使用格式端口:端口也可以指定包含的(端口)范围。如果首端口号被忽略,默认是"0",如果末端口号被忽略,默认是"65535",如果第二个端口号大于第一个,那么它们会被交换。这个选项可以使用 --sport的别名。
--destionation-port [!] [port:[port]]
目标端口或端口范围指定。这个选项可以使用 --dport别名来代替。
--tcp-flags [!] mask comp
匹配指定的TCP标记。第一个参数是我们要检查的标记,一个用逗号分开的列表,第二个参数是用逗号分开的标记表,是必须被设置的。标记如下:SYN ACK FIN RST URG PSH ALL NONE。因此这条命令:iptables -A FORWARD -p tcp --tcp-flags SYN, ACK, FIN, RST SYN只匹配那些SYN标记被设置而ACK、FIN和RST标记没有设置的包。
[!] --syn
只匹配那些设置了SYN位而清除了ACK和FIN位的TCP包。这些包用于TCP连接初始化时发出请求;例如,大量的这种包进入一个接口发生堵塞时会阻止进入的TCP连接,而出去的TCP连接不会受到影响。这等于 --tcp-flags SYN, RST, ACK SYN。如果"--syn"前面有"!"标记,表示相反的意思。
--tcp-option [!] number
匹配设置了TCP选项的。
udp
当protocol udp 被指定,且其他匹配的扩展未被指定时,这些扩展被装载,它提供以下选项:
--source-port [!] [port:[port]]
源端口或端口范围指定。详见 TCP扩展的--source-port选项说明。
--destination-port [!] [port:[port]]
目标端口或端口范围指定。详见 TCP扩展的--destination-port选项说明。
icmp
当protocol icmp被指定,且其他匹配的扩展未被指定时,该扩展被装载。它提供以下选项:
--icmp-type [!] typename
这个选项允许指定ICMP类型,可以是一个数值型的ICMP类型,或者是某个由命令iptables -p icmp -h所显示的ICMP类型名。
mac
--mac-source [!] address
匹配物理地址。必须是XX:XX:XX:XX:XX这样的格式。注意它只对来自以太设备并进入PREROUTING、FORWORD和INPUT链的包有效。
limit
这个模块匹配标志用一个标记桶过滤器一一定速度进行匹配,它和LOG目标结合使用来给出有限的登陆数.当达到这个极限值时,使用这个扩展包的规则将进行匹配.(除非使用了"!"标记)
--limit rate
最大平均匹配速率:可赋的值有'/second', '/minute', '/hour', or '/day'这样的单位,默认是3/hour。
--limit-burst number
待匹配包初始个数的最大值:若前面指定的极限还没达到这个数值,则概数字加1.默认值为5
multiport
这个模块匹配一组源端口或目标端口,最多可以指定15个端口。只能和-p tcp 或者 -p udp 连着使用。
--source-port [port[, port]]
如果源端口是其中一个给定端口则匹配
--destination-port [port[, port]]
如果目标端口是其中一个给定端口则匹配
--port [port[, port]]
若源端口和目的端口相等并与某个给定端口相等,则匹配。
mark
这个模块和与netfilter过滤器标记字段匹配(就可以在下面设置为使用MARK标记)。
--mark value [/mask]
匹配那些无符号标记值的包(如果指定mask,在比较之前会给掩码加上逻辑的标记)。
owner
此模块试为本地生成包匹配包创建者的不同特征。只能用于OUTPUT链,而且即使这样一些包(如ICMP ping应答)还可能没有所有者,因此永远不会匹配。
--uid-owner userid
如果给出有效的user id,那么匹配它的进程产生的包。
--gid-owner groupid
如果给出有效的group id,那么匹配它的进程产生的包。
--sid-owner seessionid
根据给出的会话组匹配该进程产生的包。
state
此模块,当与连接跟踪结合使用时,允许访问包的连接跟踪状态。
--state state
这里state是一个逗号分割的匹配连接状态列表。可能的状态是:INVALID表示包是未知连接,ESTABLISHED表示是双向传送的连接,NEW表示包为新的连接,否则是非双向传送的,而RELATED表示包由新连接开始,但是和一个已存在的连接在一起,如FTP数据传送,或者一个ICMP错误。
unclean
此模块没有可选项,不过它试着匹配那些奇怪的、不常见的包。处在实验中。
tos
此模块匹配IP包首部的8位tos(服务类型)字段(也就是说,包含在优先位中)。
--tos tos
这个参数可以是一个标准名称,(用iptables -m tos -h 察看该列表),或者数值。
TARGET EXTENSIONS
iptables可以使用扩展目标模块:以下都包含在标准版中。
LOG
为匹配的包开启内核记录。当在规则中设置了这一选项后,linux内核会通过printk()打印一些关于全部匹配包的信息(诸如IP包头字段等)。
--log-level level
记录级别(数字或参看 syslog.conf(5))。
--log-prefix prefix
在纪录信息前加上特定的前缀:最多14个字母长,用来和记录中其他信息区别。
--log-tcp-sequence
记录TCP序列号。如果记录能被用户读取那么这将存在安全隐患。
--log-tcp-options
记录来自TCP包头部的选项。
--log-ip-options
记录来自IP包头部的选项。
MARK
用来设置包的netfilter标记值。只适用于mangle表。
--set-mark mark
REJECT
作为对匹配的包的响应,返回一个错误的包:其他情况下和DROP相同。
此目标只适用于INPUT、FORWARD和OUTPUT链,和调用这些链的用户自定义链。这几个选项控制返回的错误包的特性:
--reject-with type
Type可以是icmp-net-unreachable、icmp-host-unreachable、icmp-port-nreachable、icmp-proto-unreachable、 icmp-net-prohibited 或者 icmp-host-prohibited,该类型会返回相应的ICMP错误信息(默认是port-unreachable)。选项 echo-reply也是允许的;它只能用于指定ICMP ping包的规则中,生成ping的回应。最后,选项tcp-reset可以用于在INPUT链中,或自INPUT链调用的规则,只匹配TCP协议:将回应一个TCP RST包。
TOS
用来设置IP包的首部八位tos。只能用于mangle表。
--set-tos tos
你可以使用一个数值型的TOS 值,或者用iptables -j TOS -h 来查看有效TOS名列表。
MIRROR
这是一个试验示范目标,可用于转换IP首部字段中的源地址和目标地址,再传送该包,并只适用于INPUT、FORWARD和OUTPUT链,以及只调用它们的用户自定义链。
SNAT
这个目标只适用于nat表的POSTROUTING链。它规定修改包的源地址(此连接以后所有的包都会被影响),停止对规则的检查,它包含选项:
--to-source *本站禁止HTML标签噢* [- *本站禁止HTML标签噢* ][:port-port]
可以指定一个单一的新的IP地址,一个IP地址范围,也可以附加一个端口范围(只能在指定-p tcp 或者-p udp的规则里)。如果未指定端口范围,源端口中512以下的(端口)会被安置为其他的512以下的端口;512到1024之间的端口会被安置为1024以下的,其他端口会被安置为1024或以上。如果可能,端口不会被修改。
--to-destiontion *本站禁止HTML标签噢* [- *本站禁止HTML标签噢* ][:port-port]
可以指定一个单一的新的IP地址,一个IP地址范围,也可以附加一个端口范围(只能在指定-p tcp 或者-p udp的规则里)。如果未指定端口范围,目标端口不会被修改。
MASQUERADE
只用于nat表的POSTROUTING链。只能用于动态获取IP(拨号)连接:如果你拥有静态IP地址,你要用SNAT。伪装相当于给包发出时所经过接口的IP地址设置一个映像,当接口关闭连接会终止。这是因为当下一次拨号时未必是相同的接口地址(以后所有建立的连接都将关闭)。它有一个选项:
--to-ports *本站禁止HTML标签噢* [-port>]
指定使用的源端口范围,覆盖默认的SNAT源地址选择(见上面)。这个选项只适用于指定了-p tcp或者-p udp的规则。
REDIRECT
只适用于nat表的PREROUTING和OUTPUT链,和只调用它们的用户自定义链。它修改包的目标IP地址来发送包到机器自身(本地生成的包被安置为地址127.0.0.1)。它包含一个选项:
--to-ports *本站禁止HTML标签噢* [ *本站禁止HTML标签噢* ]
指定使用的目的端口或端口范围:不指定的话,目标端口不会被修改。只能用于指定了-p tcp 或 -p udp的规则。
DIAGNOSTICS
诊断
不同的错误信息会打印成标准错误:退出代码0表示正确。类似于不对的或者滥用的命令行参数错误会返回错误代码2,其他错误返回代码为1。
BUGS
臭虫
Check is not implemented (yet).
检查还未完成。
COMPATIBILITY WITH IPCHAINS
与ipchains的兼容性
iptables和Rusty Russell的ipchains非常相似。主要区别是INPUT 链只用于进入本地主机的包,而OUTPUT只用于自本地主机生成的包。因此每个包只经过三个链的一个;以前转发的包会经过所有三个链。其他主要区别是 -i 引用进入接口;-o引用输出接口,两者都适用于进入FORWARD链的包。当和可选扩展模块一起使用默认过滤器表时,iptables是一个纯粹的包过滤器。这能大大减少以前对IP伪装和包过滤结合使用的混淆,所以以下选项作了不同的处理:
-j MASQ
-M -S
-M -L
在iptables中有几个不同的链。
[查看全文]



itnihao_opnenwebmail服务器的架设源自it你好论坛
http://u.115.com/file/f6f342ae8#
itnihao_opnenwebmail服务器的架设源自it你好论坛.exe
[查看全文]
linux限速
一个用tc+iptables实现的下载和上传带宽限制的脚本 一个用tc+iptables实现的下载和上传带宽限制的脚本 这是我用的,新年献给大家。每个IP单独限制,好随时修改。如果是用拨号上网的,请把以下内容加到/etc/ppp/ip-up.local中,否则断线重拨后会没有上传限制,对BT光限制下载是不够的。 #!/bin/bash # [email=#lvhe888@163.com]#lvhe888@163.com[/email]# # 定义上下带宽 # 注意是 Kbit DOWNLOAD=800Kbit UPLOAD=160Kbit # 定义内网IP段 INET=192.168.0. # 定义限制的IP范围 IPS=1 IPE=253 # 定义本服务器IP ServerIP=254 # 定义进出设备 IDEV=eth0 ODEV=ppp0 # # # /sbin/tc qdisc del dev $IDEV root handle 10: /sbin/tc qdisc del dev $ODEV root handle 20: # /sbin/tc qdisc add dev $IDEV root handle 10: cbq bandwidth 100Mbit avpkt 1000 /sbin/tc qdisc add dev $ODEV root handle 20: cbq bandwidth 1Mbit avpkt 1000 # /sbin/tc class add dev $IDEV parent 10:0 classid 10:1 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 1Mbit prio 8 maxburst 20 avpkt 1000 /sbin/tc class add dev $ODEV parent 20:0 classid 20:1 cbq bandwidth 1Mbit rate 1Mbit allot 1514 weight 10Kbit prio 8 maxburst 20 avpkt 1000 # # 不限制内网从本服务器下载。 # 注意如本服务器上有代理,用户可通过代理绕过带宽限制, # 可取消以下三句限制从本服务器下载。 /sbin/tc class add dev $IDEV parent 10:1 classid 10:10 cbq bandwidth 100Mbit rate 95Mbit allot 1514 weight 20Kbit prio 5 maxburst 20 avpkt 1000 bounded /sbin/tc qdisc add dev $IDEV parent 10:10 sfq quantum 1514b perturb 15 /sbin/tc filter add dev $IDEV parent 10:0 protocol ip prio 50 u32 match ip src $INET$ServerIP flowid 10:10 # #限制下载速度 COUNTER=$IPS while [ $COUNTER -le $IPE ] do # 以下三句限制各IP的下载带宽 /sbin/tc class add dev $IDEV parent 10:1 classid 10:1$COUNTER cbq bandwidth 100Mbit rate $DOWNLOAD allot 1514 weight 20Kbit prio 5 maxburst 20 avpkt 1000 bounded /sbin/tc qdisc add dev $IDEV parent 10:1$COUNTER sfq quantum 1514b perturb 15 /sbin/tc filter add dev $IDEV parent 10:0 protocol ip prio 100 u32 match ip dst $INET$COUNTER flowid 10:1$COUNTER COUNTER=` expr $COUNTER + 1 ` done # #限制上传速度 COUNTER=$IPS while [ $COUNTER -le $IPE ] do # 以下三句限制各IP的上传带宽 /sbin/tc class add dev $ODEV parent 20:1 classid 20:1$COUNTER cbq bandwidth 1Mbit rate $UPLOAD allot 1514 weight 4Kbit prio 5 maxburst 20 avpkt 1000 bounded /sbin/tc qdisc add dev $ODEV parent 20:1$COUNTER sfq quantum 1514b perturb 15 /sbin/tc filter add dev $ODEV parent 20:0 protocol ip prio 100 handle $COUNTER fw classid 20:1$COUNTER COUNTER=` expr $COUNTER + 1 ` done #特殊照顾的IP在以上范围的用户 NIP=78 #192.168.0.78 这家伙天天BT ND=200Kbit NU=50Kbit /sbin/tc class change dev $IDEV parent 10:1 classid 10:1$NIP bandwidth 100Mbit rate $ND allot 1514 weight 20Kbit prio 5 maxburst 20 avpkt 1000 bounded /sbin/tc class change dev $ODEV parent 20:1 classid 20:1$NIP cbq bandwidth 1Mbit rate $NU allot 1514 weight 4Kbit prio 5 maxburst 20 avpkt 1000 bounded # NIP=1 # 192.168.0.1 增加我自已的带宽 ND=1500Kbit NU=500Kbit /sbin/tc class change dev $IDEV parent 10:1 classid 10:1$NIP bandwidth 100Mbit rate $ND allot 1514 weight 20Kbit prio 5 maxburst 20 avpkt 1000 bounded /sbin/tc class change dev $ODEV parent 20:1 classid 20:1$NIP cbq bandwidth 1Mbit rate $NU allot 1514 weight 4Kbit prio 5 maxburst 20 avpkt 1000 bounded # ................... # # # 修改防火墙,增加上传限制 COUNTER=$IPS while [ $COUNTER -lt $IPE ] do iptables -t mangle -A PREROUTING -i $IDEV -s $INET$COUNTER -j MARK --set-mark $COUNTER COUNTER=` expr $COUNTER + 1 ` done # 这里是NAT iptables -t nat -A POSTROUTING -o $EXTIF -s 192.168.0.0/24 -j MASQUERADE |
OpenLDAP + DNS + Samba + Postfix + OpenWebmail(1) | |
来源: ChinaUnix博客 日期: 2007.10.12 13:30 (共有0条评论) 我要评论 | |
RedHat Enterprise Linux Server 4.3 + OpenLDAP + DNS + Samba + Postfix + OpenWebmail 作者:Fandy 电子邮箱: 、 msn: QQ号码:332018422 主页地址: 建立日期:2006年03月27日,最后修改日期:2006年07月30日 版权说明:本文章的内容归作者版权所有,同时也接受大家转贴,但要保留作者的完整信息和出处,多谢! 环境: 因为软件版权和费用的问题,一值是公司凝难问题(我们是一家中小型企业,没有那么多钱来投资和购买软件license费用)。经过公司高层领导的决定,公 司准备将所有Microsoft服务器操作系统更改为RedHat Enterprise Server 4.3服务器操作系统!公司高层领导对新网络改造要求也不高就是可以共享上网和打印机、公司邮件和用户数据统一管理。 另外我也想说一下“在网络配置过程中遇到了许多不明白的问题,好在有google.com这个好朋友顶力帮助,还得到几位Linux前辈的指导,才可以顺利完成这一次网络改造任务,真的要好好多谢几位前辈的帮助,多谢!” 文章分为七大部分介绍实施情况: 第一部分:OpenLDAP Master、Slave主机安装RedHat Enterprise Linux Server 4.3操作系统过程; 第二部分:配置OpenLDAP Master、Slave服务器、DNS Master、Slave服务器; 第三部分:Samba PDC主机安装RedHat Enterprise Linux Server 4.3操作系统过程; 第四部分:安装和配置Samba PDC服务器、Clamav + Samba-Vscan免费杀毒软件、五笔输入法等; 第五部分:Mail主机安装RedHat Enterprise Linux Server 4.3操作系统过程; 第六部分:配置Postfix服务器、OpenWebmail、E-Groupware等程序; 第七部分:Windows XP客户端加入Samba PDC域和配置Outlook电子邮箱; Setp0、实现网络图: Setp1、Master & Slave OpenLDAP主机安装RedHat Enterprise Linux Server 4.3操作系统截图 RedHat Enterprise Linux AS 4.3的欢迎介面: 系统开始启动图形界面的安装程序,然后出现安装欢迎界面,直接点击 “►Next”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的安装语言选择介面: 进入安装语言的选择界面,这里选择“Chinese(Simplified)(简体中文)”→“►Next”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的键盘配置介面: 进入“键盘配置”界面后,安装程序会自动为用户选取一个通用的键盘类型,请点击“U.S.English”→“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的磁盘分区设置介面: 进入磁盘分区界面后,请点击“用 Disk Druid 手工分区(D)”→“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的磁盘分区设置警告介面: 在新硬盘上执行安装,所以在此会出现一个警告对话框,提示用户硬盘sda上的分区表无法读取,安装程序需要对其硬盘执行初始化操作,硬盘上所有数据将会丢失,请点击“√ 是(Y)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的磁盘设置介面: 设 备 挂点 类型 格式化 大小 开始 结束 /dev/sda1 / ext3 √ 9201 1 1173 /dev/sda2 swap √ 1028 1028 1304 请点选“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的引导装载程序配置介面: 在引导引导装载程序配置介面中,可以设置引导装载程序GRUB的属性,请点选“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的网络配置介面: 在网络配置界面中,安装程序提供通过DHCP自动配置和手工设置两种配置网络的方法,对于服务器而言IP地址通常是固定的,所以应该使用手工方式来设置,请点选“►编辑(E)”按键,进一步配置eth0资料! RedHat Enterprise Linux AS 4.3的编辑接口eth0介面(Master主机的网络详细配置): 取消“使用DHCP进行配置(D)”选择项; 点选“引导时激活(A)”; IP 地址(I):192.168.1.254 子网掩码(M):255.255.255.0 请点选“√ 确定(O)”按键,继续网络其它资料的配置! RedHat Enterprise Linux AS 4.3的主机名、网关、DNS服务器地址配置(Master主机的网络详细配置): 设置主机:master.nseasy.net; 其它设置: 网关(G):192.168.1.1; 主要DNS(P):192.168.1.254 次要DNS(S):192.168.1.253 第三DNS(T):202.96.128.68 RedHat Enterprise Linux AS 4.3的编辑接口eth0介面(Slave主机的网络详细配置): 取消“使用DHCP进行配置(D)”选择项; 点选“引导时激活(A)”; IP 地址(I):192.168.1.253 子网掩码(M):255.255.255.0 请点选“√ 确定(O)”按键,继续网络其它资料的配置! RedHat Enterprise Linux AS 4.3的主机名、网关、DNS服务器地址配置(Slave主机的网络详细配置): 设置主机:slave.nseasy.net; 其它设置: 网关(G):192.168.1.1; 主要DNS(P):192.168.1.254 次要DNS(S):192.168.1.253 第三DNS(T):202.96.128.68 RedHat Enterprise Linux AS 4.3的防火墙基本配置介面: 考虑到睇小弟的朋友好多都是初学者在学习和测试网络服务时,经常会遇到虽然服务配置正确,但是由于开启了防火墙和SELinux功能(特别是 SELinux功能),因此在测试时经常会发现服务不能正常工作,所以为了读者能将精力放在服务的配置上,建议在学习的过程将防火墙和SELinux功能 关闭! 点选: ⊙ 无防火墙 ⊙ 是否启用 SELinux:已禁用 请点击“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的无防火墙警告介面: 如果系统直接连接在互联网或大型公共网络上,推荐您配置一个防火墙来防止未经授权的进入,不过,如果您选择要不配置防火墙,请点击“继续(P)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的系统支持的语言界面设置介面: 在选择系统支持的语言界面中,可以选择系统安装的语言和系统默认语言,这里建议出除了选择常用的简体中文以外,还可以选择一些常用的语言,这里请点击“Chinese(P R. of China)”→“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的时区设置介面: 在时区选择界面中,应根据实际来选择,这里请点击“亚洲/上海”→“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的系统管理员设置密码介面: 在设置系统管理员密码中,可以为root管理员帐号设置口令(因为root帐号在系统中具有最高权限,它在系统中可以进行不受任何限制的操作,所以这个口令要尽可量设置复杂些) 根口令(P):%Rb65*( 确认根口令(C):%Rb65*( 请点击“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的软件包安装的默认设置介面: 软件包安装的默认设置界面中,安装程序会显示将要安装的软件包 建议这里选择: ⊙ 定制要安装的软件包(C) 这样可以在这里进行定制要安装的软件包,请点击“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的软件包组安装桌面程序选项: (√) X窗口系统 (选取全部) (√) GNOME桌面环境 (选取全部) RedHat Enterprise Linux AS 4.3的软件包组安装应用程序选项: (√) 工程和科学 (选取默认) (√) 图形化互联网 (选取默认) (√) 基于文本的互联网 (选取默认) (√) 办公/生产率 (选取默认) RedHat Enterprise Linux AS 4.3的软件包组安装服务器选项: (√) 服务器配置工具 (选取全部) (√) 万维网服务器 (选取全部) (√) Windows文件服务器 (选取全部) (√) DNS服务器 (选取全部) RedHat Enterprise Linux AS 4.3的软件包组安装开发选项: (√) 开发工具 (选择全部) RedHat Enterprise Linux AS 4.3的软件包组安装系统选项: (√) 管理工具 (选取默认) (√) 打印支持 (选取默认) RedHat Enterprise Linux AS 4.3的软件包组安装杂项选项: 全部不要选择; RedHat Enterprise Linux AS 4.3的即将安装介面: 在即将安装界面中,安装程序会让用户进行安装的最后确认,请单击“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的需要准备的安装光盘提示介面: 安装程序会非常善意地提醒用户需要准备的安装光盘数量,请单击“继续(C)”按键,继续安装过程; 安装过程中的“格式化硬盘”; 安装过程中的“正在筹备RPM传输……”; 安装过程中的“正在开启安装进程”; 安装过程中的“正在进行安装筹备……”; RedHat Enterprise Linux AS 4.3的更换安装光盘提示介面: 安装程序会非常善意地提醒用户需要更换安装光盘2,单击“请点选“√ 确定(O)”按键,继续安装过程; 执行安装光盘2的软件包过程…… RedHat Enterprise Linux AS 4.3的更换安装光盘提示介面: 安装程序会非常善意地提醒用户需要更换安装光盘3,单击“请点选“√ 确定(O)”按键,继续安装过程; 执行安装光盘3的软件包过程…… RedHat Enterprise Linux AS 4.3的更换安装光盘提示介面: 安装程序会非常善意地提醒用户需要更换安装光盘4,单击“请点选“√ 确定(O)”按键,继续安装过程; 执行安装光盘4的软件包过程…… RedHat Enterprise Linux AS 4.3的更换安装光盘提示介面: 安装程序会非常善意地提醒用户需要更换安装光盘1,单击“请点选“√ 确定(O)”按键,继续安装过程; 再次执行安装光盘1的软件包过程…… RedHat Enterprise Linux AS 4.3的安装后配置提示介面: 复制和安装软件包组,执行安装后配置程序过程; RedHat Enterprise Linux AS 4.3的软件包组安装完成提示介面: 最后安装程序报告系统安装完毕,至此,RedHat Enterprise Linux AS 4.3的安装完全结束,取出光驱中的安装光盘,请单击“重新引导(T)”按键,完成安装任务重新引导系统; RedHat Enterprise Linux AS 4.3系统的配置过程: 首次启动RedHat Enterprise Linux AS 4.3系统,会运行系统设置代理程序,出现欢迎界面,请单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 进入“许可协议”界面,选择“Yes, I agree to the License Agreement”,单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 进入“日期和时间”设置界面,应根据实际设置正确的时间,单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 在“显示”设置界面中,应根据实际设置,单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 进入“Red Hat 网络登录”界面中,选择“告诉我为什么需要注册并提供一个Red Hat登录帐户”,单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 进入“为什么要注册”界面中,因为我没有正版的授权,所以只能选择试用版的方式来使用这套软件,选择“我现在还不能完成注册。请在以后提醒我。”,单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 在进入“系统用户”界面中,建立一个普通用户的资料: 用户名:fandy 全名:Fan Jin Biao 口令:1234567 确认口令:1234567(必须和口令相同) 单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 进入“系统声卡”设置界面中,单击“播放测试声音”按键,系统将播放3次声音。若声音播放正确,就在随后弹出的声音播放成功对话框选择“是”声音设置完成后,单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 进入“额外光盘”界面中,可以通过额外光盘用来安装用户所需要的额外软件,由于可以在以后再安装软件包,所以单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的结束配置: 进入“结束设置”界面中,直接单击“►下一步(N)”按键,就可以完成首次启动的设置工作,接下来就可以开始使用RedHat Enterprise Linux系统了; RedHat Enterprise Linux AS 4.3系统的配置过程: 进入“用户登录”界面中,在用户名框中输入:root,按回车键,继续用户登录系统的过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 进入“用户登录”界面中,在密码框中输入:%Rb65*(,按回车键,完成用户登录系统的过程; RedHat Enterprise Linux AS 4.3启动系统初始化过程: 启动系统相关功能项目; 用户正常登录操作系统界面 到这里为止Master & Slave OpenLDAP主机安装RedHat Enterprise Linux Server 4.3操作系统! Master & Slave OpenLDAP、DNS服务器所需要的全部软件包清单: 详细清单: bind-9.2.4-2.i386.rpm bind-chroot-9.2.4-2.i386.rpm bind-devel-9.2.4-2.i386.rpm bind-libs-9.2.4-2.i386.rpm bind-utils-9.2.4-2.i386.rpm db4-4.2.52-7.1.i386.rpm db4-devel-4.2.52-7.1.i386.rpm db4-java-4.2.52-7.1.i386.rpm db4-tcl-4.2.52-7.1.i386.rpm db4-utils-4.2.52-7.1.i386.rpm openldap-2.2.13-4.i386.rpm openldap-clients-2.2.13-4.i386.rpm openldap-devel-2.2.13-4.i386.rpm openldap-servers-2.2.13-4.i386.rpm openldap-servers-sql-2.2.13-4.i386.rpm ---------------------------------------------------------------------------------------------------------------------- 特别说明:请确定以上所列表的软件包是否完全安装,如没有安装的请补完以上全部的软件包(软件包可以在系统的四张光盘中找到)! ---------------------------------------------------------------------------------------------------------------------- Setp2、配置OpenLDAP Master、Slave服务器、DNS Master、Slave服务器 配置主DNS服务器,详细过程: 修改Master DNS服务器/var/named/chroot/etc/named.conf文件,添加以下内容(注意修改/etc/目录下的named.conf也可以,因为是一个连接文件): 详细内容: zone "nseasy.net " { #正解 type master; file "/var/named/nseasy.net.hosts"; }; zone "1.168.192.in-addr.arpa" { #反解 type master; file "/var/named/192.168.1.rev"; }; 在MasterDNS服务器/var/named/chroot/var/named/目录建立正解nseasy.net.hosts文件,完整内容如下: 详细内容: $ttl 38400 @ IN SOA @ fandy.nseasy.net. ( 1137063120 10800 3600 604800 38400 ) @ IN MX 10 mail. nseasy.net @ IN A 192.168.1.254 @ IN A 192.168.1.253 @ IN NS master.nseasy.net. @ IN NS slave.nseasy.net. master.nseasy.net. IN A 192.168.1.254 slave.nseasy.net. IN A 192.168.1.253 pdc.nseasy.net. IN A 192.168.1.252 在MasterDNS服务器/var/named/chroot/var/named/目录建立反解192.168.1.rev文件,完整内容如下: 详细内容: $ttl 38400 @ IN SOA @ fandy.nseasy.net. ( 1137063120 10800 3600 604800 38400 ) @ IN NS master.nseasy.net. @ IN NS slave.nseasy.net. 253.1.168.192.in-addr.arpa. IN PTR nseasy.net. 254.1.168.192.in-addr.arpa. IN PTR nseasy.net. 253.1.168.192.in-addr.arpa. IN PTR slave.nseasy.net. 254.1.168.192.in-addr.arpa. IN PTR master.nseasy.net. 252.1.168.192.in-addr.arpa. IN PTR pdc.nseasy.net. ---------------------------------------------------------------------------------------------------------------------- 特别说明:Serial数值是随着nseasy.net.hosts和192.168.1.rev 两个文件发生变化时,Serial数值也要发生变化。Serial数值同是master及slave是否同步有关!一般而言,如果这个数值变大了, slave 才会同步更新。 ---------------------------------------------------------------------------------------------------------------------- 修改Master DNS服务器的/etc/resolv.conf文件,文件完整内容如下: 详细内容: search nseasy.net nameserver 192.168.1.254 nameserver 192.168.1.253 修改Master DNS服务器的/var/named/chroot/var/named/localhost.zone文件,完整内容如下: 详细内容: $TTL 86400 @ IN SOA @ root ( 42 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum 1D IN NS @ 1D IN A 127.0.0.1 修改Master DNS服务器的/var/named/chroot/var/named/named.local文件,完整内容如下: 详细内容: $TTL 86400 @ IN SOA localhost. root.localhost. ( 2005112401 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS localhost. 1 IN PTR localhost. 修改Master DNS服务器的/var/named/chroot/var/named/named.zero文件,完整内容如下:: 详细内容: $TTL 86400 @ IN SOA localhost root ( 42 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum @ IN NS localhost 启动Master DNS服务器: 详细操作: # service named start (启动named服务器) 启动 named: [ 确定 ] 配置Slave DNS服务器,详细过程: 修改Slave DNS服务器/var/named/chroot/etc/named.conf文件,添加以下内容(注意修改/etc/目录下的named.conf也可以,因为是一个连接文件): 详细内容: zone " nseasy.net " { #正解内容 type slave; masters{192.168.1.254;}; file "/var/named/nseasy.net.hosts"; }; zone "1.168.192.in-addr.arpa" { #反解内容 type slave; masters{192.168.1.254;}; file "/var/named/192.168.1.rev"; }; 修改Slave DNS服务器的/etc/resolv.conf文件,文件完整内容如下: 详细内容: search nseasy.net nameserver 192.168.1.254 nameserver 192.168.1.253 因为RHEL 4.0系统使用CHROOT机制,所以需要使用以下的命令更改Slave DNS服务器目录属性,使管理员有写入的权限: 详细操作: # chmod g+w /var/named/chroot/var/named 使用scp命令复制Master DNS服务器主机中三个文件到Slave DNS服务器内(注意:复制文件的路径要跟Master DNS主机的一样): ---------------------------------------------------------------------------------------------------------------------- 特别说明:以下的这一步操作,请在master.easy.com主机(即Master DNS服务器主机)中进行,请大家一定要注意啊,重要(^_^)! ---------------------------------------------------------------------------------------------------------------------- 详细操作: # cd /var/named/chroot/var/named/ # scp localhost.zone :/var/named/chroot/var/named/ The authenticity of host 'slave.nseasy.net (192.168.1.253)' can't be established. RSA key fingerprint is c1:e3:eb:ee:62:2b:e8:6c:a2:5a:21:3b:ef:79:ec:79. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'slave.nseasy.net,192.168.1.253' (RSA) to the list of known hosts. 's password: jinbiao (输入slave主机的root超级管理员的密码) localhost.zone 100% 183 0.2KB/s 00:00 # scp named.local :/var/named/chroot/var/named/ 's password: jinbiao (输入slave主机的root超级管理员的密码) named.local 100% 433 0.4KB/s 00:00 # scp named.zero :/var/named/chroot/var/named/ 's password: jinbiao (输入slave主机的root超级管理员的密码) named.zero 100% 418 0.4KB/s 00:00 启动Slave DNS服务器: 详细操作: # service named start (启动named服务器) 启动 named: [ 确定 ] 对Master、Slave DNS服务器进行测试,使用nslookup命令来测试DNS服务器: 详细操作: # nslookup (DNS解释查询) > nseasy.net (输入要解释的域名:nseasy.net) Server: 192.168.1.254 Address: 192.168.1.254#53 Name: nseasy.net Address: 192.168.1.254 Name: nseasy.net Address: 192.168.1.253 > slave.easy.com (输入要查询的域名主机名:slave.nseasy.net) Server: 192.168.1.254 Address: 192.168.1.254#53 Name: slave.nseasy.net Address: 192.168.1.253 > master.nseasy.net (输入要查询的域名主机名:master.nseasy.net) Server: 192.168.1.254 Address: 192.168.1.254#53 Name: master.nseasy.net Address: 192.168.1.254 检查Master、Slave DNS服务器运行是否同步: 在主DNS服务器/var/named/chroot/var/named/nseasy.net.hosts文件新增一个正解主机记录内容: 详细内容: @ IN SOA @ fandy.nseasy.net. ( 1137063120 更改为: @ IN SOA @ fandy.nseasy.net. ( 1137063121 (每改一次在原值基础1137063120+1=1137063121) mail.nseasy.net. IN A 192.168.1.251 (新增一个正解主机记录) 在Master DNS服务器/var/named/chroot/var/named/192.168.1.rev文件新增一个反解主机记录内容: 详细内容: @ IN SOA @ fandy.nseasy.net. ( 1137063120 更改为: @ IN SOA @ fandy.nseasy.net. ( 1137063121 (每改一次在原值基础1137063120+1=1137063121) 251.1.168.192.in-addr.arpa. IN PTR mail.nseasy.net. (新增一个反解主机记录) 重新启动Master DNS服务器: 详细操作: # service named restart (重新启动named服务器) 停止 named: [ 确定 ] 启动 named: [ 确定 ] 检查Slave DNS服务器的日志记录,以便分析Master、Slave DNS同步的情况: 详细内容: # tail -n 15 /var/log/messages Mar 22 20:16:42 master named[3327]: running Mar 22 20:16:42 master named[3327]: zone 1.168.192.in-addr.arpa/IN: sending notifies (serial 1137063123) Mar 22 20:16:42 master named[3327]: zone nseasy.net/IN: sending notifies (serial 1137063123) Mar 22 20:16:42 master named[3327]: client 192.168.1.253#32777: transfer of '1.168.192.in-addr.arpa/IN': AXFR-style IXFR started Mar 22 20:16:42 master named[3327]: received notify for zone '1.168.192.in-addr.arpa' Mar 22 20:16:42 master named[3327]: received notify for zone '1.168.192.in-addr.arpa' Mar 22 20:16:42 master named[3327]: received notify for zone 'nseasy.net ' Mar 22 20:16:42 master named[3327]: client 192.168.1.253#32778: transfer of 'nseasy.net/IN': AXFR-style IXFR started Mar 22 20:16:42 master named[3327]: received notify for zone 'nseasy.net '.nseasy.net. 如出现以上的日志信息,Master、Slave DNS服务器Master、Slave DNS已经同步。 配置Master OpenLDAP服务器,详细过程: 在配置Master OpenLDAP前,先复制samba.schema文件到/etc/openldap/schema/目录下(添加ldap所需要的samba认证的资料文件到schema目录): 详细操作: # cp /usr/share/doc/samb-3.0.10/LDAP/samba.schema /etc/openldap/schema/ ---------------------------------------------------------------------------------------------------------------------- 说明:请一定要复制samba.schema文件到/etc/openldap/schema目录下, 否则在启动ldap时会出现以下的错误提示信息: # service ldap start 检查 的配置文件:slaptest: bad configuration file! [失败] ---------------------------------------------------------------------------------------------------------------------- 修改Master OpenLDAP服务器/etc/openldap/目录中的slapd.conf文件,主要说明修改的关键部分: Master OpenLDAP主机slapd.conf文件内容的配置: include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema 更改为: include /etc/openldap/schema/core.schema include /etc/openldap/schema/corba.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/dyngroup.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/misc.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/samba.schema database ldbm(定义ldap的数据库类型) 更改为: database bdb suffix "dc=my-domain,dc=com" (定义ldap搜索的域后缀) rootdn "cn=Manager,dc= my-domain,dc=com" (定义ldap的管理DN) 更改为: suffix "dc=nseasy,dc=net" rootdn "cn=admin,dc=nseasy,dc=net" 继续slapd.conf文件内容的配置(Master Openldap): # rootpw {crypt}ijFYNcSNctBYg (设置管理DN的密码) 更改为: rootpw {SSHA}zW6nrZ8Muho9GOl/nAk3grt4Xqq0ZpJi index objectClass eq,pres index ou,cn,mail,surname,givenname eq,pres,sub index uidNumber,gidNumber,loginShell eq,pres index uid,memberUid eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub 更改为: index objectClass,uidNumber,gidNumber eq index cn,sn,uid,displayName pres,sub,eq index memberUid,mail,givenname eq,subinitial index sambaSID,sambaPrimaryGroupSID,sambaDomainName eq #replogfile /var/lib/ldap/openldap-master-replog #replica host=ldap-1.example.com:389 starttls=critical # bindmethod=sasl saslmech=GSSAPI # authcId=host/ldap-master.example.co 更改为: replogfile /var/lib/ldap/openldap-slave.replog replica host=slave.nseasy.net:389 binddn="cn=admin,dc=nseasy,dc=net" bindmethod=simple credentials=jinbiao access to attrs=userPassword,sambaLMPassword,sambaNTPassword by self write by anonymous auth by * none access to * by * read ---------------------------------------------------------------------------------------------------------------------- 特别说明:DN管理者密码的制造过程: # slappasswd -h {SSHA} -s jinbiao (产生SSHA密码的加密方式) {SSHA}ahKxZL3yjzLtZxXgx+WEMOrpcYH5/D3m # slappasswd -h {MD5} -s jinbiao (产生MD5密码的加密方式) {MD5}aQM3a2IdXua7HkURAn0Gbg== 特别说明:新增权限设定。在slapd.conf文件最后部分添加的内容,作用为定义ldap的访问权限(注意书写的格式,因为作者就是因为这个问题浪费了不少的时间和感情啦! ---------------------------------------------------------------------------------------------------------------------- 修改Master OpenLDAP服务器/etc/openldap/ldap.conf文件内容,主要说明修改的关键部分: 详细配置内容: BASE dc=example,dc=com (更改ldap搜索的域后缀) 更改为: BASE dc=nseasy,dc=net TLS_CACERTDIR /etc/openldap/cacerts(不使用TLS服务项目) 更改为: # TLS_CACERTDIR /etc/openldap/cacerts 启动Master OpenLDAP服务器项目,详细操作如下: 详细操作: # service ldap start 检查 slapd 的配置文件:config file testing succeeded 启动 slapd: [ 确定 ] 启动 slurpd: [ 确定 ] 查询master.nseasy.net的目录内容: 详细操作: # ldapsearch -x -h master.nseasy.net -b "dc=nseasy,dc=net" # extended LDIF # # LDAPv3 # base with scope sub # filter: (objectclass=*) # requesting: ALL # # search result search: 2 result: 32 No such object # numResponses: 1 配置Slave OpenLDAP服务器,详细过程: 在配置Slave OpenLDAP服务器前,请先停止Master OpenLDAP服务器,详细操作如下(请在Master主机内操作): 详细操作: # service ldap stop 停止 slapd: [ 确定 ] 停止 slurpd: [ 确定 ] 同时配置Slave OpenLDAP服务器,也要复制samba.schema文件到/etc/openldap/schema/目录下(添加ldap所需要的samba认证的资料文件到schema目录): 详细操作: # cp /usr/share/doc/samb-3.0.10/LDAP/samba.schema /etc/openldap/schema/ ---------------------------------------------------------------------------------------------------------------------- 说明:请一定要复制samba.schema文件到/etc/openldap/schema目录下, 否则在启动ldap时会出现以下的错误提示信息: # service ldap start 检查 的配置文件:slaptest: bad configuration file! [失败] ---------------------------------------------------------------------------------------------------------------------- 使用scp命令复制Master OpenLDAP服务器主机中/var/lib/ldap所有文件到Slave DNS服务器内(注意:复制文件的路径要跟Master DNS主机的一样): ---------------------------------------------------------------------------------------------------------------------- 特别说明:以下的这一步操作,请在master.easy.com主机(即Master DNS服务器主机)中进行,请大家一定要注意啊,重要(^_^)! ---------------------------------------------------------------------------------------------------------------------- 详细操作: # cd /var/lib/ldap # scp * :/var/lib/ldap/ 's password: jinbiao (输入slave主机的root超级管理员的密码) cn.bdb 100% 8192 8.0KB/s 00:00 __db.001 100% 16KB 16.0KB/s 00:00 __db.002 100% 272KB 272.0KB/s 00:00 __db.003 100% 96KB 96.0KB/s 00:00 __db.004 100% 16KB 96.0KB/s 00:00 __db.005 100% 1KB 96.0KB/s 00:00 dn2id.bdb 100% 8192 8.0KB/s 00:00 id2entry.bdb 100% 32KB 32.0KB/s 00:00 log.0000000001 100% 161KB 161.1KB/s 00:00 更改Slave OpenLDAP服务器/var/lib/ldap/目录的用户权限和属性,详细操作如下(请在Slave主机内操作): 详细操作: # chown -R ldap.ldap /var/lib/ldap # chmod 700 /var/lib/ldap 修改Slave OpenLDAP服务器/etc/openldap/目录中的slapd.conf文件,主要说明修改的关键部分(请在Slave主机内操作): Slave OpenLDAP主机slapd.conf文件内容的配置: include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema 更改为: include /etc/openldap/schema/core.schema include /etc/openldap/schema/corba.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/dyngroup.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/misc.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/samba.schema database ldbm(定义ldap的数据库类型) 更改为: database bdb suffix "dc=my-domain,dc=com" (定义ldap搜索的域后缀) rootdn "cn=Manager,dc= my-domain,dc=com" (定义ldap的管理DN) 更改为: suffix "dc=nseasy,dc=net" rootdn "cn=admin,dc=nseasy,dc=net" # rootpw {crypt}ijFYNcSNctBYg (设置管理DN的密码) 更改为: rootpw jinbiao index objectClass eq,pres index ou,cn,mail,surname,givenname eq,pres,sub index uidNumber,gidNumber,loginShell eq,pres index uid,memberUid eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub 更改为: index objectClass,uidNumber,gidNumber eq index cn,sn,uid,displayName pres,sub,eq index memberUid,mail,givenname eq,subinitial index sambaSID,sambaPrimaryGroupSID,sambaDomainName eq #新增加查找Master主机的方式 updatedn "cn=admin,dc=nseasy,dc=net" updateref ldap://master.nseasy.net 继续slapd.conf文件内容的配置(Slave Openldap): #增加用户访问Openldap资料权限 access to attrs=userPassword,sambaLMPassword,sambaNTPassword by self write by anonymous auth by * none access to * by * read 修改Slave OpenLDAP服务器/etc/openldap/ldap.conf文件内容,主要说明修改的关键部分: 详细配置内容: BASE dc=example,dc=com (更改ldap搜索的域后缀) 更改为: BASE dc=nseasy,dc=net TLS_CACERTDIR /etc/openldap/cacerts(不使用TLS服务项目) 更改为: # TLS_CACERTDIR /etc/openldap/cacerts 先启动Master OpenLDAP服务器项目,详细操作如下(请在Master主机内操作): 详细操作: # service ldap start 检查 slapd 的配置文件:config file testing succeeded 启动 slapd: [ 确定 ] 启动 slurpd: [ 确定 ] 再启动Slave OpenLDAP服务器项目,详细操作如下(请在Slave主机内操作): 详细操作: # service ldap start 检查 slapd 的配置文件:config file testing succeeded 启动 slapd: [ 确定 ] Setp3、Samba PDC主机安装RedHat Enterprise Linux Server 4.3操作系统截图 RedHat Enterprise Linux AS 4.3的欢迎介面: 系统开始启动图形界面的安装程序,然后出现安装欢迎界面,直接点击 “►Next”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的安装语言选择介面: 进入安装语言的选择界面,这里选择“Chinese(Simplified)(简体中文)”→“►Next”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的键盘配置介面: 进入“键盘配置”界面后,安装程序会自动为用户选取一个通用的键盘类型,请点击“U.S.English”→“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的磁盘分区设置介面: 进入磁盘分区界面后,请点击“用 Disk Druid 手工分区(D)”→“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的磁盘分区设置警告介面: 在新硬盘上执行安装,所以在此会出现一个警告对话框,提示用户硬盘sda上的分区表无法读取,安装程序需要对其硬盘执行初始化操作,硬盘上所有数据将会丢失,请点击“√ 是(Y)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的磁盘设置介面: 设 备 挂点 类型 格式化 大小 开始 结束 /dev/sda1 / ext3 √ 39911 1 5088 /dev/sda2 swap √ 1028 5089 5219 请点选“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的引导装载程序配置介面: 在引导引导装载程序配置介面中,可以设置引导装载程序GRUB的属性,请点选“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的网络配置介面: 在网络配置界面中,安装程序提供通过DHCP自动配置和手工设置两种配置网络的方法,对于服务器而言IP地址通常是固定的,所以应该使用手工方式来设置,请点选“►编辑(E)”按键,进一步配置eth0资料! RedHat Enterprise Linux AS 4.3的编辑接口eth0介面(PDC主机的网络详细配置): 取消“使用DHCP进行配置(D)”选择项; 点选“引导时激活(A)”; IP 地址(I):192.168.1.252 子网掩码(M):255.255.255.0 请点选“√ 确定(O)”按键,继续网络其它资料的配置! RedHat Enterprise Linux AS 4.3的主机名、网关、DNS服务器地址配置(PDC主机的网络详细配置): 设置主机:pdc.nseasy.net; 其它设置: 网关(G):192.168.1.1; 主要DNS(P):192.168.1.254 次要DNS(S):192.168.1.253 第三DNS(T):202.96.128.68 RedHat Enterprise Linux AS 4.3的防火墙基本配置介面: 考虑到睇小弟的朋友好多都是初学者在学习和测试网络服务时,经常会遇到虽然服务配置正确,但是由于开启了防火墙和SELinux功能(特别是 SELinux功能),因此在测试时经常会发现服务不能正常工作,所以为了读者能将精力放在服务的配置上,建议在学习的过程将防火墙和SELinux功能 关闭! 点选: ⊙ 无防火墙 ⊙ 是否启用 SELinux:已禁用 请点击“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的无防火墙警告介面: 如果系统直接连接在互联网或大型公共网络上,推荐您配置一个防火墙来防止未经授权的进入,不过,如果您选择要不配置防火墙,请点击“继续(P)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的系统支持的语言界面设置介面: 在选择系统支持的语言界面中,可以选择系统安装的语言和系统默认语言,这里建议出除了选择常用的简体中文以外,还可以选择一些常用的语言,这里请点击“Chinese(P R. of China)”→“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的时区设置介面: 在时区选择界面中,应根据实际来选择,这里请点击“亚洲/上海”→“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的系统管理员设置密码介面: 在设置系统管理员密码中,可以为root管理员帐号设置口令(因为root帐号在系统中具有最高权限,它在系统中可以进行不受任何限制的操作,所以这个口令要尽可量设置复杂些) 根口令(P):%Rb65*( 确认根口令(C):%Rb65*( 请点击“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的软件包安装的默认设置介面: 软件包安装的默认设置界面中,安装程序会显示将要安装的软件包 建议这里选择: ⊙ 定制要安装的软件包(C) 这样可以在这里进行定制要安装的软件包,请点击“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的软件包组安装桌面程序选项: (√) X窗口系统 (选取全部) (√) GNOME桌面环境 (选取全部) RedHat Enterprise Linux AS 4.3的软件包组安装应用程序选项: (√) 工程和科学 (选取默认) (√) 图形化互联网 (选取默认) (√) 基于文本的互联网 (选取默认) (√) 办公/生产率 (选取默认) RedHat Enterprise Linux AS 4.3的软件包组安装服务器选项: (√) 服务器配置工具 (选取全部) (√) 万维网服务器 (选取全部) (√) Windows文件服务器 (选取全部) RedHat Enterprise Linux AS 4.3的软件包组安装开发选项: (√) 开发工具 (选择全部) RedHat Enterprise Linux AS 4.3的软件包组安装系统选项: (√) 管理工具 (选取默认) (√) 打印支持 (选取默认) RedHat Enterprise Linux AS 4.3的软件包组安装杂项选项: 全部不要选择; RedHat Enterprise Linux AS 4.3的即将安装介面: 在即将安装界面中,安装程序会让用户进行安装的最后确认,请单击“►下一步(N)”按键,继续安装过程; RedHat Enterprise Linux AS 4.3的需要准备的安装光盘提示介面: 安装程序会非常善意地提醒用户需要准备的安装光盘数量,请单击“继续(C)”按键,继续安装过程; 安装过程中的“格式化硬盘”; 安装过程中的“正在筹备RPM传输……”; 安装过程中的“正在开启安装进程”; 安装过程中的“正在进行安装筹备……”; RedHat Enterprise Linux AS 4.3的更换安装光盘提示介面: 安装程序会非常善意地提醒用户需要更换安装光盘2,单击“请点选“√ 确定(O)”按键,继续安装过程; 执行安装光盘2的软件包过程…… RedHat Enterprise Linux AS 4.3的更换安装光盘提示介面: 安装程序会非常善意地提醒用户需要更换安装光盘3,单击“请点选“√ 确定(O)”按键,继续安装过程; 执行安装光盘3的软件包过程…… RedHat Enterprise Linux AS 4.3的更换安装光盘提示介面: 安装程序会非常善意地提醒用户需要更换安装光盘4,单击“请点选“√ 确定(O)”按键,继续安装过程; 执行安装光盘4的软件包过程…… RedHat Enterprise Linux AS 4.3的更换安装光盘提示介面: 安装程序会非常善意地提醒用户需要更换安装光盘1,单击“请点选“√ 确定(O)”按键,继续安装过程; 再次执行安装光盘1的软件包过程…… RedHat Enterprise Linux AS 4.3的安装后配置提示介面: 复制和安装软件包组,执行安装后配置程序过程; RedHat Enterprise Linux AS 4.3的软件包组安装完成提示介面: 最后安装程序报告系统安装完毕,至此,RedHat Enterprise Linux AS 4.3的安装完全结束,取出光驱中的安装光盘,请单击“重新引导(T)”按键,完成安装任务重新引导系统; RedHat Enterprise Linux AS 4.3系统的配置过程: 首次启动RedHat Enterprise Linux AS 4.3系统,会运行系统设置代理程序,出现欢迎界面,请单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 进入“许可协议”界面,选择“Yes, I agree to the License Agreement”,单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 进入“日期和时间”设置界面,应根据实际设置正确的时间,单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 在“显示”设置界面中,应根据实际设置,单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 进入“Red Hat 网络登录”界面中,选择“告诉我为什么需要注册并提供一个Red Hat登录帐户”,单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 进入“为什么要注册”界面中,因为我没有正版的授权,所以只能选择试用版的方式来使用这套软件,选择“我现在还不能完成注册。请在以后提醒我。”,单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 在进入“系统用户”界面中,建立一个普通用户的资料: 用户名:fandy 全名:Fan Jin Biao 口令:1234567 确认口令:1234567(必须和口令相同) 单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 进入“系统声卡”设置界面中,单击“播放测试声音”按键,系统将播放3次声音。若声音播放正确,就在随后弹出的声音播放成功对话框选择“是”声音设置完成后,单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 进入“额外光盘”界面中,可以通过额外光盘用来安装用户所需要的额外软件,由于可以在以后再安装软件包,所以单击“►下一步(N)”按键,继续系统的配置过程; RedHat Enterprise Linux AS 4.3系统的结束配置: 进入“结束设置”界面中,直接单击“►下一步(N)”按键,就可以完成首次启动的设置工作,接下来就可以开始使用RedHat Enterprise Linux系统了; RedHat Enterprise Linux AS 4.3系统的配置过程: 进入“用户登录”界面中,在用户名框中输入:root,按回车键,继续用户登录系统的过程; RedHat Enterprise Linux AS 4.3系统的配置过程: 进入“用户登录”界面中,在密码框中输入:%Rb65*(,按回车键,完成用户登录系统的过程; RedHat Enterprise Linux AS 4.3启动系统初始化过程: 启动系统相关功能项目; 用户正常登录操作系统界面 Samba PDC服务器所需要的全部软件包清单: 详细清单: openldap-clients-2.2.13-4.i386.rpm perl-Crypt-SmbHash-0.12-1.rhel4.noarch.rpm perl-Digest-MD4-1.5-2.rhel4.i386.rpm perl-Digest-SHA1-2.07-5.i386.rpm perl-LDAP-0.31-5.noarch.rpm perl-XML-SAX-0.12-7.noarch.rpm nss_ldap-226-10.i386.rpm nss_db-2.2-29.i386.rpm nss_db-compat-2.2-29.i386.rpm samba-3.0.10-1.4E.6.i386.rpm samba-client-3.0.10-1.4E.6.i386.rpm samba-common-3.0.10-1.4E.6.i386.rpm samba-swat-3.0.10-1.4E.6.i386.rpm smbldap-tools-0.9.1-1.2.el4.rf.noarch.rpm ---------------------------------------------------------------------------------------------------------------------- 特别说明:请确定以上所列表的软件包是否完全安装,如没有安装的请补完以上全部的软件包(软件包可以在系统的四张光盘中找到)! ---------------------------------------------------------------------------------------------------------------------- Setp4、安装和配置Samba PDC服务器、Clamav + Samba-Vscan免费杀毒软件、五笔输入法 配置Samba PDC服务器,详细过程: 更改为使用LDAP帐号做pdc.nseasy.net主机的系统帐号,修改/etc/目录中的nsswitch.conf文件,主要说明修改的关键部分: 详细配置内容: passwd: files shadow: files group: files 更改为: passwd: files ldap shadow: files ldap group: files ldap 使用setup命令来配置用户和验证的详细信息: 详细操作: # setup 选择一种工具项目中选择:验证配置,然后按“运行工具”键; 用户信息项目中点选: “缓存信息”、“使用LDAP”; 验证项目中点选: “使用MD5口令”、“使用屏蔽口令”、“使用LDAP验证”; 然后按“下一步”键; LDAP设置: [ ] 使用TLS (不要点选); 服务器:192.168.1.254 (按默认地址) 基点 DN:dc=nseasy,dc=net (更改为:dc=nseasy,dc=net) 然后按“确定”键: 系统自动执行过程如下: setsebool: SELinux is disabled. 停止 nscd: [ 失败 ] 启动 nscd: [ 确定 ] 执行后以上的操作后,将后回到“选择一种工具”介面,按“退出”键,完成所有ldap进认证过程。 修改/etc/pam.d/目录中的sshd文件,完整文件内容如下: 详细配置内容: #%PAM-1.0 auth sufficient /lib/security/pam_ldap.so auth required pam_stack.so service=system-auth auth required pam_nologin.so account sufficient /lib/security/pam_ldap.so account required pam_stack.so service=system-auth password required pam_stack.so service=system-auth session required pam_stack.so service=system-auth 修改/etc/openldap/目录中的ldap.conf文件,主要说明修改的关键部分: 详细配置内容: TLS_CACERTDIR /etc/openldap/cacerts 更改为: # TLS_CACERTDIR /etc/openldap/cacerts 修改/etc/目录中的ldap.conf文件,主要说明修改的关键部分: 详细配置内容: # rootbinddn cn=Manager,dc=easy,dc=com 更改为: rootbinddn cn=admin,dc=nseasy,dc=net #krb5_ccname FILE:/etc/.ldapcache 添加以下内容: #krb5_ccname FILE:/etc/.ldapcache nss_base_passwd ou=Users,dc=nseasy,dc=net?one nss_base_passwd ou=Computers,dc=nseasy,dc=net?one nss_base_shadow ou=Users,dc=nseasy,dc=net?one nss_base_group ou=Groups,dc=nseasy,dc=net?one TLS_CACERTDIR /etc/openldap/cacerts 更改为: # TLS_CACERTDIR /etc/openldap/cacerts 调整系统中的pam_ldap模组设定,详细操作如下: 详细配置内容: # echo jinbiao > /etc/ldap.secret # chmod 600 /etc/ldap.secret Samba的主要配置文件/etc/samba/smb.conf,其实系统中存有一个实际的例子配置文件可提供参考,只要更换成例子文件和按照自己的实际情况做一定的修改就可供使用: 详细操作: # cp /usr/share/doc/smbldap-tools-0.9.1/smb.conf /etc/samba/ cp:是否覆盖‘/etc/samba/smb.conf’? y 修改/etc/samba/smb.conf文件,以下为完整文件的详细内容:: 详细配置内容: ############################## Global parameters################# [global] workgroup = nseasy netbios name = PDC server string = Samba Server %v log file = /var/log/samba/log.%m security = user encrypt passwords = Yes obey pam restrictions = No ldap passwd sync = Yes log level = 3 syslog = 0 max log size = 100000 time server = Yes socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 mangling method = hash2 Dos charset = UTF-8 Unix charset = UTF-8 logon script = %U.bat logon drive = H: domain logons = Yes os level = 65 preferred master = Yes domain master = Yes passdb backend = ldapsam:ldap://192.168.1.254 ldap admin dn = cn=admin,dc=nseasy,dc=net ldap suffix = dc=nseasy,dc=net ldap group suffix = ou=Groups ldap user suffix = ou=Users ldap machine suffix = ou=Computers ldap ssl = off ldap delete dn = Yes add user script = /sbin/smbldap-useradd -m "%u" add machine script = /sbin/smbldap-useradd -t 0 -w "%u" add group script = /sbin/smbldap-groupadd -p "%g" add user to group script = /sbin/smbldap-groupmod -m "%u" "%g" delete user from group script = /sbin/smbldap-groupmod -x "%u" "%g" set primary group script = /sbin/smbldap-usermod -g '%g' '%u' ############################## Homes parameters ################ [homes] comment = repertoire de %U, %u browseable = no writeable = yes read only = no force create mode = 0700 create mode = 0700 force directory mode = 0700 directory mode = 700 ############################# Netlogone parameters ############### [netlogon] path = /home/netlogon/ browseable = No read only = yes ############################# Public parameters ################## [public] comment = Public Directory path = /home/public/ browseable = No writable = yes guest ok = yes create mask = 0777 ---------------------------------------------------------------------------------------------------------------------- 特别提示:在网上有一些文章介绍可以实现自动创建计算机帐号的方法,不知道可否正常使用,小弟没有试过! 操作如下在smb.conf文件的[global]里加入以下内容(注:适合Samba 3.0版以上): add machind script = /usr/sbin/useradd –d /dev/null –g 100 –s /bin/false –M %u ---------------------------------------------------------------------------------------------------------------------- 建立相关共享目录操作: 详细操作: # mkdir /home/netlogon # mkdir /home/public 启动Samba服务项目: 详细操作: # service smb start 启动 SMB 服务: [ 确定 ] 启动 NMB 服务: [ 确定 ] 添加Samba admin dn的ldap管理员密码(注意密码要和您openldap的rootdn密码要一致啊): 详细操作: # smbpasswd -w jinbiao Setting stored password for "cn=Manager,dc=nseasy,dc=net" in secrets.tdb 使用testparm命令来测试Samba PDC服务器配置是否正常启动: 详细操作: # testparm Load smb config files from /etc/samba/smb.conf Processing section "[homes]" Processing section "[netlogon]" Processing section "[public]" Loaded services file OK. Server role: ROLE_DOMAIN_PDC Press enter to see a dump of your service definitions Sambldap的配置使用过程: 详细操作: # cd /usr/share/doc/smbldap-tools-0.9.1/ # ./configure.pl -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- smbldap-tools script configuration -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Before starting, check . if your samba controller is up and running. . if the domain SID is defined (you can get it with the 'net getlocalsid') . you can leave the configuration using the Crtl-c key combination . empty value can be set with the "." character -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Looking for configuration files... Samba Configuration File Path [/etc/samba/smb.conf] > The default directory in which the smbldap configuration files are stored is shown. If you need to change this, enter the full directory path, then press enter to continue. Smbldap-tools Configuration Directory Path [/etc/smbldap-tools/] > -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Let's start configuring the smbldap-tools scripts ... . workgroup name: name of the domain Samba act as a PDC workgroup name [nseasy] > . netbios name: netbios name of the samba controler netbios name [PDC] > . logon drive: local path to which the home directory will be connected (for NT Workstations). Ex: 'H:' logon drive [H:] > . logon home: home directory location (for Win95/98 or NT Workstation). (use %U as username) Ex:'\\PDC\%U' logon home (press the "." character if you don't want homeDirectory) [\\PDC\%U] > . logon path: directory where roaming profiles are stored. Ex:'\\PDC\profiles\%U' logon path (press the "." character if you don't want roaming profile) [\\PDC\profiles\%U] > . . home directory prefix (use %U as username) [/home/%U] > . default users' homeDirectory mode [700] > . default user netlogon script (use %U as username) [%U.bat] > default password validation time (time in days) [45] > . ldap suffix [dc=nseasy,dc=net] > . ldap group suffix [ou=Groups] > . ldap user suffix [ou=Users] > 继续smb.conf文件内容: 详细配置内容: . ldap machine suffix [ou=Computers] > . Idmap suffix [ou=Idmap] > . sambaUnixIdPooldn: object where you want to store the next uidNumber and gidNumber available for new users and groups sambaUnixIdPooldn object (relative to ${suffix}) [sambaDomainName=nseasy] > . ldap master server: IP adress or DNS name of the master (writable) ldap server ldap master server [192.168.1.254] > . ldap master port [389] > . ldap master bind dn [cn=admin,dc=nseasy,dc=net] > ldap master bind password [] > jinbiao (Samba admin dn的ldap管理密码) . ldap slave server: IP adress or DNS name of the slave ldap server: can also be the master one ldap slave server [192.168.1.254] > . ldap slave port [389] > . ldap slave bind dn [cn=admin,dc=nseasy,dc=net] > ldap slave bind password [] > jinbiao (Samba admin dn的ldap管理密码) . ldap tls support (1/0) [0] > . SID for domain nseasy: SID of the domain (can be obtained with 'net getlocalsid PDC') SID for domain nseasy [S-1-5-21-3519350192-200481810-3753220053] > . unix password encryption: encryption used for unix passwords unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA) [SSHA] > . default user gidNumber [513] > . default computer gidNumber [515] > . default login shell [/bin/bash] > . default skeleton directory [/etc/skel] > . default domain name to append to mail adress [] > nseasy.net -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= backup old configuration files: /etc/smbldap-tools/smbldap.conf->/etc/smbldap-tools/smbldap.conf.old /etc/smbldap-tools/smbldap_bind.conf->/etc/smbldap-tools/smbldap_bind.conf.old writing new configuration file: /etc/smbldap-tools/smbldap.conf done. /etc/smbldap-tools/smbldap_bind.conf done. ---------------------------------------------------------------------------------------------------------------------- 重点说明:检查/etc/smbldap-tools/目录内的smbldap_bind.conf文件以下内容要一致: slaveDN=″cn=admin,dc=nseasy,dc=net″ slavePW =″jinbiao″ masterDN=″cn=admin,dc=nseasy,dc=net″ masterPW “jinbiao” ---------------------------------------------------------------------------------------------------------------------- 使用smbldap-populate命令初始化用户服务数据库: 详细操作: # smbldap-populate Populating LDAP directory for domain nseasy (S-1-5-21-3519350192-200481810-3753220053) (using builtin directory structure) adding new entry: dc=nseasy,dc=net adding new entry: ou=Users,dc=nseasy,dc=net adding new entry: ou=Groups,dc=nseasy,dc=net adding new entry: ou=Computers,dc=nseasy,dc=net adding new entry: ou=Idmap,dc=nseasy,dc=net adding new entry: uid=root,ou=Users,dc=nseasy,dc=net adding new entry: uid=nobody,ou=Users,dc=nseasy,dc=net adding new entry: cn=Domain Admins,ou=Groups,dc=nseasy,dc=net adding new entry: cn=Domain Users,ou=Groups,dc=nseasy,dc=net adding new entry: cn=Domain Guests,ou=Groups,dc=nseasy,dc=net adding new entry: cn=Domain Computers,ou=Groups,dc=nseasy,dc=net adding new entry: cn=Administrators,ou=Groups,dc=nseasy,dc=net adding new entry: cn=Account Operators,ou=Groups,dc=nseasy,dc=net adding new entry: cn=Print Operators,ou=Groups,dc=nseasy,dc=net adding new entry: cn=Backup Operators,ou=Groups,dc=nseasy,dc=net adding new entry: cn=Replicators,ou=Groups,dc=nseasy,dc=net adding new entry: sambaDomainName=nseasy,dc=nseasy,dc=net Please provide a password for the domain root: Changing password for root New password : jinbiao (admin的ldap管理密码) Retype new password : jinbiao (admin的ldap管理密码) 查看Samba的SID编号: 详细操作: # net getlocalsid SID for domain PDC is: S-1-5-21-3519350192-200481810-3753220053 使用smbaldap-useradd命令来添加用户组和用户到Samba PDC域内: 详细操作: # smbldap-useradd -a -m user2 (添加一个samba帐号并创建主目录) # smbldap-groupadd -p acc (添加一个samba组帐号) # smbldap-groupmod -m user2 acc (添加user2用户帐号到acc帐号中) adding user user2 to group acc 使用smbaldap-useradd命令来添加计算机名到Samba PDC域内: 详细操作: # smbldap-useradd -w pyns01$ (添加一个域计算机帐号) 更改user2帐号的密码: 详细操作: # smbldap-passwd user2 Changing password for user2 New password : 123456 (用户密码) Retype new password : 123456 (确认用户密码) 添加user2帐号的信息: 详细操作: # smbldap-userinfo user2 Changing the user information for user2 Enter the new value, or press ENTER for the default User Shell [/bin/bash]:/bin/sh Full Name [System User]:fan jin biao Room Number []:4873 Work Phone []:013066396266 Home Phone []:82-020-84680605 Other []:ha ha! LDAP updated 查看user2帐号的信息: 详细操作: # smbldap-usershow user2 dn: uid=user2,ou=Users,dc=nseasy,dc=net objectClass: top,inetOrgPerson,posixAccount,shadowAccount,sambaSamAccount uid: user2 uidNumber: 1000 gidNumber: 513 homeDirectory: /home/user2 description: System User sambaLogonTime: 0 sambaLogoffTime: 2147483647 sambaKickoffTime: 2147483647 sambaPwdCanChange: 0 displayName: System User sambaSID: S-1-5-21-3519350192-200481810-3753220053-3000 sambaPrimaryGroupSID: S-1-5-21-3519350192-200481810-3753220053-513 sambaLogonScript: user2.bat sambaHomePath: \\PDC\user2 sambaHomeDrive: H: sambaLMPassword: 15881AE64C222524AAD3B435B51404EE sambaAcctFlags: [U] sambaNTPassword: D577561A7CF0233733F6EA39BB596996 sambaPwdLastSet: 1153925912 sambaPwdMustChange: 1157813912 userPassword: {SSHA}DT0JnokCNuGkC1y7Hv281+MJSQMuWm5s gecos: fan jin biao,4873,013066396266,82-020-84680605,ha ha! cn: fan jin biao sn: biao givenName: fan jin roomNumber: 4873 telephoneNumber: 013066396266 homePhone: 82-020-84680605 loginShell: /bin/sh Samba用户登陆调试说明: 使用user2帐号登陆PDC服务器: 详细操作: # smbclient -L 192.168.1.254 -U user2 Password: Domain=[NSEASY] OS=[Unix] Server=[Samba 3.0.10-1.4E.6] Sharename Type Comment --------- ---- ------- IPC$ IPC IPC Service (Samba Server 3.0.10-1.4E.6) ADMIN$ IPC IPC Service (Samba Server 3.0.10-1.4E.6) user2 Disk repertoire de user2, user2 Domain=[NSEASY] OS=[Unix] Server=[Samba 3.0.10-1.4E.6] Server Comment --------- ------- PDC Samba Server 3.0.10-1.4E.6 Workgroup Master --------- ------- MYGROUP MASTER NSEASY PDC Samba域建立Windows用户登陆logon文件(本例为建立user2用户的user2.bat文件): 使用“文本编辑器”在/home/netlogon/目录新建user2.tmp文件,完整内容如下: 详细内容: net time \\PDC /set /yes (客户端与服务器的时间同步) net use T: \\PDC\public (设定public目录为T:盘) 将tmp文件转换成bat文件(因操作系统文件格式的不同,所以要进行一些特殊的转换工作): 详细内容: # cat -A user2.tmp | tr ‘$’ ‘\r’ > user2.bat 查看user2.bat文件转换结果: 详细内容: # cat -A user2.bat net time \\PDC /set /yes^M$ net use T: \\PDC\public^M$ 使用Clamav + Samba-Vscan查杀Samba服务器内设定的共享文件夹内容: 软件包格式:clamav-db-0.86.2-1.2.el4.rf.i386.rpm clamav-0.86.2-1.2.el4.rf.i386.rpm clamav-devel-0.86.2-1.2.el4.rf.i386.rpm clamd-0.86.2-1.2.el4.rf.i386.rpm clamav-milter-0.86.2-1.2.el4.rf.i386.rpm 软件包的大小分别为(KB):2385KB、602KB、153KB、58KB 、66KB 下载地址: http://dries.studentenweb.org/rpm/packages/clamav/info.html 软件包格式: samba-vscan-clamav-0.3.6-1.i386.rpm 软件包的大小(KB):56KB 下载地址: http://crash-hat.sd2.mirrors.redwire.net/crash-hat/3/samba-vscan/ 安装Clamav软件包: 详细操作: # clamav-db-0.86.2-1.2.el4.rf.i386.rpm warning: clamav-db-0.86.2-1.2.el4.rf.i386.rpm: V3 DSA signature: NOKEY, key ID 1aa78495 Preparing... ########################################### [100%] 1:clamav-db ########################################### [100%] # clamav-0.86.2-1.2.el4.rf.i386.rpm warning: clamav-0.86.2-1.2.el4.rf.i386.rpm: V3 DSA signature: NOKEY, key ID 1aa78495 Preparing... ########################################### [100%] 1:clamav ########################################### [100%] # clamav-devel-0.86.2-1.2.el4.rf.i386.rpm warning: clamd-0.86.2-1.2.el4.rf.i386.rpm: V3 DSA signature: NOKEY, key ID 1aa78495 Preparing... ########################################### [100%] 1:clamd ########################################### [100%] # clamd-0.86.2-1.2.el4.rf.i386.rpm warning: clamav-devel-0.86.2-1.2.el4.rf.i386.rpm: V3 DSA signature: NOKEY, key ID 1aa78495 Preparing... ########################################### [100%] 1:clamav-devel ########################################### [100%] # clamav-milter-0.86.2-1.2.el4.rf.i386.rpm warning: clamav-milter-0.86.2-1.2.el4.rf.i386.rpm: V3 DSA signature: NOKEY, key ID 1aa78495 Preparing... ########################################### [100%] 1:clamav-milter ########################################### [100%] ---------------------------------------------------------------------------------------------------------------------- 特别提示:请严格按照以上的安装顺序来安装Clamav软件包,否则出现安装不成功的情况! ---------------------------------------------------------------------------------------------------------------------- 安装Samba-Vscan软件包: 详细操作: # samba-vscan-clamav-0.3.6-1.i386.rpm warning: samba-vscan-clamav-0.3.6-1.i386.rpm: V3 DSA signature: NOKEY, key ID 6cdf2cc1 Preparing... ########################################### [100%] 1:samba-vscan-clamav ########################################### [100%] 升级病毒库文件: 详细操作: # freshclam –verbose Current working dir is /var/clamav Max retries == 3 ClamAV update process started at Fri Jan 27 17:37:45 2006 Querying current.cvd.clamav.net TTL: 900 Software version from DNS: 0.88 WARNING: Your ClamAV installation is OUTDATED! WARNING: Local version: 0.86.2 Recommended version: 0.88 DON'T PANIC! Read http://www.clamav.net/faq.html main.cvd version from DNS: 35 Retrieving http://db.cn.clamav.net/main.cvd Downloading main.cvd main.cvd updated (version: 35, sigs: 41649, f-level: 6, builder: tkojm) WARNING: Your ClamAV installation is OUTDATED! WARNING: Current functionality level = 5, recommended = 6 DON'T PANIC! Read http://www.clamav.net/faq.html daily.cvd version from DNS: 1252 Retrieving http://db.cn.clamav.net/daily.cvd Downloading daily.cvd daily.cvd updated (version: 1252, sigs: 1513, f-level: 7, builder: diego) WARNING: Your ClamAV installation is OUTDATED! WARNING: Current functionality level = 5, recommended = 7 DON'T PANIC! Read http://www.clamav.net/faq.html Database updated (43162 signatures) from db.cn.clamav.net (IP: 221.6.197.162) ERROR: Clamd was NOT notified: Can't connect to clamd on 127.0.0.1:3310 connect(): Connection refused Freeing option list...done 修改/etc/samba/目录中的smb.conf文件中[global]配置部分加入以下内容,完整内容如下: 详细操作: ################# Global parameters################# [global] workgroup = nseasy netbios name = PDC server string = Samba Server %v log file = /var/log/samba/log.%m security = user encrypt passwords = Yes obey pam restrictions = No ldap passwd sync = Yes log level = 3 syslog = 0 max log size = 100000 time server = Yes socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 mangling method = hash2 Dos charset = UTF-8 Unix charset = UTF-8 logon script = %U.bat logon drive = H: domain logons = Yes os level = 65 preferred master = Yes domain master = Yes passdb backend = ldapsam:ldap://127.0.0.1/ ldap admin dn = cn=admin,dc=nseasy,dc=net ldap suffix = dc=nseasy,dc=net ldap group suffix = ou=Groups ldap user suffix = ou=Users ldap machine suffix = ou=Computers ldap ssl = off ldap delete dn = Yes add user script = /sbin/smbldap-useradd -m "%u" add machine script = /sbin/smbldap-useradd -t 0 -w "%u" add group script = /sbin/smbldap-groupadd -p "%g" add user to group script = /sbin/smbldap-groupmod -m "%u" "%g" delete user from group script = /sbin/smbldap-groupmod -x "%u" "%g" set primary group script = /sbin/smbldap-usermod -g '%g' '%u' vfs object = vscan-clamav vscan-oav: config-file = /etc/samba/vscan-clamav.conf 修改修改/etc/samba/目录中的vscan-clamav.conf文件,主要说明修改的关键部分,详细内容如下: 详细操作: infected file action = nothing (当找到感染的档案是否发出”警告popup 窗口”给windows) 更改为: infected file action = quarantine 修改修改/etc/目录中的clamd.conf文件,主要说明修改的关键部分,详细内容如下: 详细操作: TCPSocket 3310 (取消TCPSocket 3310) 更改为: #TCPSocket 3310 #LocalSocket /var/run/clamav/clamd.sock (clamd socket的位置) 更改为: LocalSocket /var/run/clamav/clamd.sock User clamav (更改操作用户帐号) 更改为: User root 重新启动Samba服务项目: 详细操作: # service smb restart 关闭 SMB 服务: [ 确定 ] 关闭 NMB 服务: [ 确定 ] 启动 SMB 服务: [ 确定 ] 启动 NMB 服务: [ 确定 ] 启动Samba服务项目: 详细操作: # service clamd start Starting Clam AntiVirus Daemon [ 确定 ] 如果看到以下的讯息表现已经成功: 详细操作: # tail /var/log/messages Jan 27 17:56:10 ldap clamd[3218]: HTML support enabled. Jan 27 17:56:10 ldap clamd[3218]: Self checking every 1800 seconds. Jan 27 17:56:26 ldap smbd_vscan-clamav[3209]: samba-vscan (vscan-clamav 0.3.6) connected (Samba 3.0), (c) by Rainer Link, OpenAntiVirus.org Jan 27 17:56:26 ldap smbd_vscan-clamav[3209]: INFO: connect to service IPC$ by user nobody Jan 27 17:56:26 ldap smbd_vscan-clamav[3209]: INFO: disconnected Jan 27 17:56:26 ldap smbd_vscan-clamav[3209]: samba-vscan (vscan-clamav 0.3.6) connected (Samba 3.0), (c) by Rainer Link, OpenAntiVirus.org Jan 27 17:56:26 ldap smbd_vscan-clamav[3209]: INFO: connect to service IPC$ by user user2 Jan 27 17:56:26 ldap smbd_vscan-clamav[3209]: samba-vscan (vscan-clamav 0.3.6) connected (Samba 3.0), (c) by Rainer Link, OpenAntiVirus.org Jan 27 17:56:26 ldap smbd_vscan-clamav[3209]: INFO: connect to service IPC$ by user nobody Jan 27 17:56:37 ldap smbd_vscan-clamav[3209]: INFO: disconnected 本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/27493/showart_399285.html |
==================================================================
目录:
一,目前系统文件权限的管理有两种:DAC(传统的) 和 MAC(SELINUX)
1
1,传统的文件权限与帐号关系:自主式存取控制, DAC(DISCRETIONARY ACCESS CONTROL, DAC)
1
2,以政策规则订定特定程序读取特定文件:委任式存取控制, MAC
1
【理解】 2
二,SELINUX 的运作模式
2
1,【重要原理】SELINUX 是透过 MAC 的方式来控管程序, 2
2,查看安全性上下文的命令 2
【重点】在预设的 TARGETED 政策中, IDENTIFY 与 ROLE 栏位基本上是不重要的! 3
三、SELINUX 的启动、关闭与查看
3
1,并非所有的 LINUX DISTRIBUTIONS 都支持 SELINUX 的 3
2,查看SELINUX的模式 3
3,查看 SELINUX 的政策 (POLICY)? 3
4,通过配置文件调整SELINUX的参数 3
5,SELINUX 的启动与关闭 4
6,查看已启动程序的TYPE设定 4
正文:
SELinux是Security Enhanced Linux的缩写,强化网络安全和权限管理
一,目前系统文件权限的管理有两种:DAC(传统的) 和 MAC(SELinux)总结:DAC是以用户为出发点来管理权限的
MAC是以程序为出发点来管理权限的
1,传统的文件权限与帐号关系:自主式存取控制, DAC(Discretionary Access Control, DAC)简单理解DAC就是rwx!因此,当某个程序想要对文件进行存取时, 系统就会根据该程序的拥有者/群组,并比对文件的权限,若通过权限检查,就可以存取该文件了。
【注意】:各种权限设定对 root 是无效的。
DAC的缺点:
· root 具有最高的权限:如果不小心某个程序被它人取得, 且该程序属于 root 的权限,那么这支程序就可以在系统上进行任何资源的存取!真是要命!
·使用者可以取得程序来变更文件资源的存取权限:如果你不小心将某个目录的权限设定为 777 ,由于对任何人的权限会变成 rwx ,因此该目录就会被任何人所任意存取!
这些问题是非常严重的!尤其是当你的系统是被某些漫不经心的系统管理员所掌控时!她们甚至觉得目录权限调为 777 也没有什么了不起的危险哩...
2,以政策规则订定特定程序读取特定文件:委任式存取控制, MAC委任式存取控制 (MAC) :他可以针对特定的程序与特定的文件资源来进行权限的控管! 也就是说,即使你是 root ,那么在使用不同的程序时,你所能取得的权限并不一定是 root , 而得要看当时该程序的设定而定。如此一来,我们针对控制的『主体』变成了『程序』而不是使用者喔! 此外,这个主体程序也不能任意使用系统文件资源,因为每个文件资源也有针对该主体程序设定可取用的权限! 如此一来,控制项目就细的多了!但整个系统程序那么多、文件那么多,一项一项控制可就没完没了! 所以 SELinux 也提供一些预设的政策 (Policy)
,并在该政策内提供多个规则 (rule) ,让你可以选择是否启用该控制规则!
在委任式存取控制的设定下,我们的程序能够活动的空间就变小了!举例来说, WWW 伺服器软体的达成程序为 httpd 这支程式, 而预设情况下, httpd 仅能在 /var/www/ 这个目录底下存取文件,如果 httpd 这个程序想要到其他目录去存取资料时, 除了规则设定要开放外,目标目录也得要设定成 httpd 可读取的模式 (type) 才行喔!限制非常多! 所以,即使不小心 httpd 被 cracker 取得了控制权,他也无权浏览 /etc/shadow 等重要的设定档喔!
【理解】以前:root--->启动httpd---->httpd可以访问系统任何文件
现在:root--->启动httpd---->httpd只能访问/var/www/目录(这是MAC)规则的约束
如果httpd想要访问其他目录,那么必须满足两个条件:DAC的rwx + MAC的规则
二,SELinux 的运作模式1,【重要原理】SELinux 是透过 MAC 的方式来控管程序,他控制的主体是程序(httpd), 而目标是文件(该程序欲访问的文件)!
·主体 (Subject):SELinux 主要想要管理的就是程序,主体= process;
·目标 (Object):主体程序将访问的文件,目标=文件;
·政策 (Policy):由于程序与文件数量庞大,因此 SELinux 依据服务来制订基本的存取安全性政策。这些政策内包含有详细的规则 (rule)
来指定不同的服务开放某些资源的存取与否。在目前的 CentOS 5.x 里面仅有提供两个主要的政策,分别是:
【重点】
targeted:针对网路服务限制较多,针对本机限制较少,是预设的政策;
strict:完整的 SELinux 限制,限制方面较为严格。
建议:使用预设的 targeted 政策即可。
·安全性上下文 (security context):
我们刚刚谈到了主体、目标与政策面,但是主体能不能存取目标除了政策指定之外,主体与目标的安全性文本必须一致才能够顺利存取。 这个安全性文本 (security context) 有点类似文件系统的 rwx
!安全性文本的内容与设定是非常重要的! 如果设定错误,你的某些服务(主体程序)就无法存取文件系统(目标资源),当然就会一直出现『权限不符』的错误讯息了!
CentOS 5.x 已经帮我们制订好非常多的规则了,这部份你只要知道如何开启/关闭某项规则的放行与否即可。
2,查看安全性上下文的命令# ls –Z
-rw-r--r--
root root root:object_r:user_home_t
install.log.syslo
Identify:role:type身份识别:角色:类型
关于这三个参数的说明:
·身份识别 (Identify):
相当于帐号方面的身份识别!
root:表示 root 的帐号身份
system_u:表示系统程序方面的识别,通常就是程序;
user_u:代表的是一般使用者帐号相关的身份。
·角色 (Role):
通过角色栏,我们可以知道这个资料是属于程序、文件资料还是代表使用者。一般的角色有:
object_r:代表的是文件或者目录;
system_r:代表的就是程序或者一般使用者也会被指定成为 system_r !
【重点】在预设的 targeted 政策中, Identify 与 Role 栏位基本上是不重要的!重要的在于这个类型 (type)
栏位! 基本上,一个主体程序能不能读取到这个文件资源,与类型栏位有关!而类型栏位在文件与程序的定义不太相同。
·类型(type)很重要,它有两种叫法,但实为同一物!
type:在文件资源 (Object) 上面称为类型 (Type); DAC中的rwx
domain:在主体程序 (Subject) 则称为领域 (domain) 了! MAC中的权限
【重要】domain 需要与 type 搭配,则该程序才能够顺利的读取文件资源啦!
[root@master oracle]# ll -Zd /usr/sbin/httpd
-rwxr-xr-x
root root system_u:object_r:httpd_exec_t
/usr/sbin/httpd
【说明】:既然说type很重要,/usr/sbin/httpd的type是什么呢?就是httpd_exec_t 这说明httpd程序对该文件有执行权限!相当于文件上的x权限!!
三、SELinux 的启动、关闭与查看1,并非所有的 Linux distributions 都支持 SELinux 的目前 SELinux 支持三种模式,分别如下:
·enforcing:强制模式,代表 SELinux 运作中,且已经正确的开始限制 domain/type 了;
·permissive:宽容模式:代表 SELinux 运作中,不过仅会有警告讯息并不会实际限制 domain/type 的存取。这种模式可以运来作为 SELinux 的 debug 之用;
·disabled:关闭,SELinux 并没有实际运作。
2,查看SELinux的模式# getenforce
Enforcing
<==就显示出目前的模式为 Enforcing
3,查看 SELinux 的政策 (Policy)?[root@master oracle]# sestatus
SELinux status:enabled
<==
是否启动 SELinuxSELinuxfs mount:/selinux
<==SELinux
的相关文件资料挂载点Current mode:enforcing
<==目前的模式Mode from config file:enforcing
<==
设定档指定的模式Policy version:21
Policy from config file:
targeted
<==目前的政策为何?
4,通过配置文件调整SELinux的参数[root@www ~]# vi /etc/selinux/configSELINUX=enforcing
<==调整 enforcing|disabled|permissiveSELINUXTYPE=targeted
<==目前仅有 targeted 与 strict
5,SELinux 的启动与关闭【重要常识】上面是预设的政策与启动的模式!你要注意的是,如果改变了政策则需要重新开机;如果由 enforcing 或 permissive 改成 disabled ,或由 disabled 改成其他两个,那也必须要重新开机。这是因为 SELinux 是整合到核心里面去的, 你只可以在 SELinux 运作下切换成为强制 (enforcing) 或宽容 (permissive) 模式,不能够直接关闭 SELinux 的!
同时,由 SELinux 关闭 (disable) 的状态到开启的状态也需要重新开机啦!所以,如果刚刚你发现 getenforce 出现 disabled 时, 请到上述文件修改成为 enforcing 吧!
【重点】如果要启动SELinux必须满足以下两个点:
所以,如果你要启动 SELinux 的话,请将上述的 SELINUX=enforcing 设定妥当,并且指定 SELINUXTYPE=targeted 这一个设定, 并且到 /boot/grub/menu.lst 这个文件去,看看核心有无关闭 SELinux 了呢?
[root@www ~]# vi /boot/grub/menu.lstdefault=0timeout=5splashimage=(hd0,0)/grub/splash.xpm.gzhiddenmenutitle CentOS (2.6.18-92.el5)root (hd0,0)
kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet selinux=0
initrd /initrd-2.6.18-92.el5.img
# 如果要启动 SELinux ,则不可以出现 selinux=0 的字样在 kernel 后面!
【问题】通过上面的学习我们知道,如果将启动着的SELinux改为禁用,需要重启电脑,我们不想重启电脑又不想开启SELinux该怎么办呢?
【答案】将强制模式改为宽松模!
[root@www ~]# setenforce [0|1]选项与参数:0 :转成 permissive 宽容模式;1 :转成 Enforcing强制模式范例一:将 SELinux 在 Enforcing 与 permissive 之间切换与查看[root@www ~]# setenforce 0[root@www ~]# getenforcePermissive[root@www ~]# setenforce 1[root@www ~]# getenforceEnforcing
6,查看已启动程序的type设定[root@master oracle]# ps aux -Z
LABEL
USER
PID %CPU %MEM
VSZ
RSS TTY
STAT START
TIME COMMAND
system_u:system_r:init_t
root
1
0.0
0.4
2060
520 ?
Ss
May07
0:02 init [5
system_u:system_r:kernel_t
root
2
0.0
0.0
0
0 ?
S<
May07
0:00 [migra]
system_u:system_r:kernel_t
root
11
0.0
0.0
0
0 ?
S<
May07
0:00 [kacpi]
system_u:system_r:auditd_t
root
4022
0.0
0.4
12128
560 ?
S<sl May07
0:01 auditd
system_u:system_r:auditd_t
root
4024
0.0
0.4
13072
628 ?
S<sl May07
0:00 /sbin/a
system_u:system_r:restorecond_t root
4040
0.0
4.4
10284
5556 ?
Ss
May07
0:00 /usr/sb
说明:其实这些东西我们都不用管,都是SELinux内置的。只要学会在强制和宽松模式间转换就行了!
1.1 SElinux概述
SELinux(Security-Enhanced Linux) 是美国国家安全局(NAS)对于强制访问控 制的实现,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。大部分使用 SELinux 的人使用的都是SELinux就绪的发行版,例如 Fedora、Red Hat Enterprise Linux (RHEL)、Debian 或 Gentoo。它们都是在内核中启用 SELinux 的,并且提供一个可定制的安全策略,还提供很多用户层的库和工具,它们都可以使用 SELinux 的功能。
1.1.1 SElinux特点
1.MAC
对访问的控制彻底化,对所有的文件、目录、端口的访问都是基于策略设定的,可由管理员时行设定。
2.RBAC
对于用户只赋予最小权限。用户被划分成了一些role(角色),即使是 root用户,如果不具有sysadm_r角色的话,也不是执行相关的管理。哪里role可以执行哪些domain,也是可以修改的。
3. 安全上下文
当启动selinux的时候,所有文件与对象都有安全上下文。进程的安全上下文是域,安全上下文由用户:角色:类型表示。
(1)系统根据pam子系统中的pam_selinux.so模块设定登录者运行程序的安全上下文
(2)rpm包安装会根据rpm 包内记录来生成安全上下文,
(3)如果是手工他建的,会根据policy中规定来设置安全上下文,
(4)如果是cp,会重新生成安全上下文。
(5)如果是mv,安全上下文不变。
1.1.2 安全上下文格式
安全上下文由 user:role:type三部分组成,下面分别说明其作用:
1.user identity:类似 linux系统中的UID,提供身份识别,安全上下文中的一部分。
三种常见的user:
user_u-: 普通用户登录系统后预设;
system_u-: 开机过程中系统进程的预设;
root-: root登录后预设;
在targeted policy中users不是很重要;
在strict policy中比较重要,的有预设的selinux users都以 "_u"结尾,root除外。
2.role
文件与目录的role,通常是object_r;
程序的role,通常是system_r;
用户的role,targeted policy为system_r;
strict policy为sysadm_r,staff_r,user_r
用户的role,类似于系统中的GID,不同的角色具备不同的权限;用户可以具备多个role;但是同一时间内只能使用一role;
role是RBAC的基础;
3.type
type: 用来将主体与客体划分为不同的组,组每个主体和系统中的客体定义了一个类型;为进程运行提供最低的权限环境。
当一个类型与执行的进程关联时,该 type也称为domain,也叫安全上下文。
域或安全上下文是一个进程允许操作的列表,决字一个进程可以对哪种类型进行操作。
1.1.3 SElinux配置文件
vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=enforcing
#SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
#SELINUX有「disabled」「permissive」,「enforcing」3种选择。
1.模式的设置
enforcing: 强制模式,只要selinux不允许,就无法执行
permissive:警告模式,将该事件记录下来,依然允许执行
disabled:关闭selinux;停用,启用需要重启计算机。
2.策略的设置
targeted:保护常见的网络服务,是selinux的默认值;
stric: 提供RBAC的policy,具备完整的保护功能,保护网络服务,一般指令及应用程序。
策略改变后,需要重新启动计算机。
也可以通过命令来修改相关的具体的策略值,也就是修改安全上下文,来提高策略的灵活性。
3.策略的位置
/etc/selinux/<策略名>/policy/
1.2 SElinux命令介绍
1.2.1 查询SElinux状态命令
1.查询selinux状态
[root@redhat ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 21
Policy from config file: targeted
2.查询selinux激活状态
[root@redhat ~]# selinuxenabled
[root@redhat ~]# echo $?
0
如果为-256为非激活状态。
1.2.2 切换SElinux类型
1.切换成警告模式
[root@redhat ~]# setenforce 0或setenforce permissive
[root@redhat ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: enforcing
Policy version: 21
Policy from config file: targeted
或
[root@redhat ~]# getenforce
Permissive
2.切换成强制模式
[root@redhat ~]# setenforce 1
[root@redhat ~]# getenforce
Enforcing
注:使用setenforce切换enforcing与permissive模式不需要重启计算机。
1.2.3 检查安全上下文
1.检查帐号的安全上下文
[root@redhat ~]# id -Z
root:system_r:unconfined_t:SystemLow-SystemHigh
2.检查进程的安全上下文
[root@redhat home]# ps -Z
LABEL PID TTY TIME CMD
root:system_r:unconfined_t:SystemLow-SystemHigh 2383 pts/0 00:00:00 bash
root:system_r:unconfined_t:SystemLow-SystemHigh 2536 pts/0 00:00:00 ps
3.检查文件与目录的安全上下文
[root@redhat home]# ls -Z
drwx------ tom tom system_u:object_r:user_home_dir_t tom
1.2.4 修改文件/目录安全上下文与策略
1.chcon命令
chcon -u [user] 对象
-r [role]
-t [type]
-R 递归
示例:
chcon -R -t samba_share_t /tmp/abc
注:安全上下文的简单理解说明,受到selinux保护的进程只能访问标识为自己只够访问的安全上下文的文件与目录。
例如:上面解释为使用smb进程能够访问/tmp/abc目录而设定的安全上下文。
2.getsebool命令
获取本机selinux策略值,也称为bool值。
getsebool -a 命令同sestatus -b
[root@redhat files]# getsebool -a
NetworkManager_disable_trans --> off
allow_cvs_read_shadow --> off
allow_daemons_dump_core --> on
allow_daemons_use_tty --> off
allow_execheap --> off
allow_execmem --> on
allow_execmod --> off
allow_execstack --> on
allow_ftpd_anon_write --> off /*是否允许ftp匿名访问*/
allow_ftpd_full_access --> off
...
httpd_disable_trans --> off /*只要有disable_trans关闭保护*/
说明:selinux的设置一般通过两个部分完成的,一个是安全上下文,另一个是策略,策略值是对安全上下文的补充。
3.setsebool命令
setsebool -P allow_ftpd_anon_write=1
-P 是永久性设置,否则重启之后又恢复预设值。
示例:
[root@redhat files]# setsebool -P allow_ftpd_anon_write=1
[root@redhat files]# getsebool allow_ftpd_anon_write
allow_ftpd_anon_write --> on
说明:如果仅仅是安全上下文中设置了vsftpd进程对某一个目录的访问,配置文件中也允许可写,但是selinux中策略中不允许可写,仍然不可写。所以基于selinux保护的服务中,安全性要高于很多。
1.3 SElinux应用
selinux的设置分为两个部分,修改安全上下文以及策略,下面收集了一些应用的安全上下文,供配置时使用,对于策略的设置,应根据服务应用的特点来修改相应的策略值。
1.3.1 SElinux与samba
1.samba共享的文件必须用正确的selinux安全上下文标记。
chcon -R -t samba_share_t /tmp/abc
如果共享/home/abc,需要设置整个主目录的安全上下文。
chcon -R -r samba_share_t /home
2.修改策略(只对主目录的策略的修改)
setsebool -P samba_enable_home_dirs=1
setsebool -P allow_smbd_anon_write=1
getsebool 查看
samba_enable_home_dirs -->on
allow_smbd_anon_write --> on /*允许匿名访问并且可写*/
1.3.2 SElinux与nfs
selinux对nfs的限制好像不是很严格,默认状态下,不对 nfs的安全上下文进行标记,而且在默认状态的策略下,nfs的目标策略允许nfs_export_all_ro
nfs_export_all_ro
nfs_export_all_rw 值为0
所以说默认是允许访问的。
但是如果共享的是/home/abc的话,需要打开相关策略对home的访问。
setsebool -P use_nfs_home_dirs boolean 1
getsebool use_nfs_home_dirs
1.3.3 SElinux与ftp
1.如果ftp为匿名用户共享目录的话,应修改安全上下文。
chcon -R -t public_content_t /var/ftp
chcon -R -t public_content_rw_t /var/ftp/incoming
2.策略的设置
setsebool -P allow_ftpd_anon_write =1
getsebool allow_ftpd_anon_write
allow_ftpd_anon_write--> on
1.3.4 SElinux与http
apache的主目录如果修改为其它位置,selinux就会限制客户的访问。
1.修改安全上下文:
chcon -R -t httpd_sys_content_t /home/html
由于网页都需要进行匿名访问,所以要允许匿名访问。
2.修改策略:
setsebool -P allow_ftpd_anon_write = 1
setsebool -P allow_httpd_anon_write = 1
setsebool -P allow_<协议名>_anon_write = 1
关闭selinux对httpd的保护
httpd_disable_trans=0
1.3.5 SElinux与公共目录共享
如果ftp,samba,web都访问共享目录的话,该文件的安全上下文应为:
public_content_t
public_content_rw_t
其它各服务的策略的bool值,应根据具体情况做相应的修改。
1.3.6 SElinux配置总结
以上内容的selinux的配置实验还需要进行相关验证,以便在实际环境中能够直接应用,相关的内容还需要继续补充。
对于多于牛毛的策略,可以用过滤还查看一个服务相当开启哪些策略。
====================================================================
[查看全文]
linux qos (iptables+tc) 整段IP的平均限速脚本
[查看全文]# iptables –A input -F
# iptables -A output -F
# iptables -A forward -F
#echo 1 > /proc/sys/net/ipv4/ip_forward
#允许转发
# iptables -A input –j accept
# iptables -A output -j accept
# iptables -A forward -j accept
# iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -j MASQUERADE
# iptables -t nat -A POSTROUTING -s 172.18.0.0/16 -j MASQUERADE
# iptables -t nat -A POSTROUTING -s 172.19.0.0/16 -j MASQUERADE
#进行IP地址伪装,使得内部的主机的数据包能通过服务器与外界联系。
进行流量管理
#tc qdisc add dev eth0 root tbf rate 512k lantency 50ms burst 1540
#在网卡eth0上使用tbf(TokenBucket Filter)过滤队列,将出口限制在512kbit,延迟50ms,突发数据1540,rate指定的数值就是限制的带宽。
继续在eth1做限制。
#tc qdisc add dev eth1 root handle 1:0 cbq bandwidth 100Mbit avpkt 1000 cell 8
#创建队列,指明网卡为100M网卡,这个跟流量限制无关,用于计算使用。
#tc class add dev eth1 parent 1:0 classid 1:1 cbq bandwidth 100Mbit rate 5Mbit weight 6Mbit prio 8 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
#创建根分类,带宽限制在5Mbit,并且不允许借用别的带宽。
Prio 后面的参数为优先级,指定数据包处理的顺序。
#tc class add dev eth1 parent 1:1 classid 1:3 cbq bandwidth 100Mbit rate 512kbit weight 5Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
#在跟类底下,创建分类1:3 限制带宽为512kbit,不允许借用带宽,用于172.17网段。
#tc class add dev eth1 parent 1:1 classid 1:4 cbq bandwidth 100Mbit rate 128kbit weight 5Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
#在跟类底下,创建分类1:4 限制带宽为128kbit,不允许借用带宽,用于172.18网段。
#tc class add dev eth1 parent 1:1 classid 1:5 cbq bandwidth 100Mbit rate 3Mbit weight 10Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
#在跟类底下,创建分类1:5 限制带宽为3Mbit,不允许借用带宽,用于172.19网段。
#tc qdisc add dev eth1 parent 1:3 handle 30: sfq
#tc qdisc add dev eth1 parent 1:4 handle 40: sfq
#tc qdisc add dev eth1 parent 1:5 handle 50: sfq
#在每个分类底下,创建队列,使用sfq(Stochastic Fareness Queueing)随即公平队列。
#tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst 172.17.0.0/16 flowid 1:3
#tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst 172.18.0.0/16 flowid 1:4
#tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst 172.19.0.0/16 flowid 1:5
#使用u32过滤器,对目的地址进行分类,对应已经创建的队列。
通过以上方式实现了简单的流量控制,限制出口的上传流量以及内口的下载流量。
测试从 172.17.1.2 进行下载 限制的是 512kbit ,下载速率为 64-65kB
172.18.1.2 进行下载 限制的是 128kbit,下载速率为 13-16.3kB
172.19.1.2 进行下载 限制的是 3Mbit,下载速率达到 180-500kB
注:不匹配任何规则的数据包,将已root 设定的规则发送。
发现3M带宽的限制误差比较大。
以上的测试都是基于单机的,没有测试满负载的情况。