rhel6之四:正则表达式、共享访问、自动挂载、ldap、acl、selinux

chengdu

贡献于2013-07-08

字数:45214 关键词: RedHat

一、正则表达式: 正则表达式(或称Regular Expression,简称RE)就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。vim、grep、awk、sed都支持正则表达式。 1、.代表任意单个字符 ? 匹配零个或一个字符。如:'gr?p'匹配gr后跟一个或没有字符,然后是p的行 2、^作为RE的第一个字符,代表行的开始;在其他位置是普通字符 3、$作为RE的最后一个字符,代表行的结束;在其他位置是普通字符 那么‘^$’ 就表示空行 4、[…]匹配括号中的字符之一 [abc]      匹配单个字符a或b或c [123]          匹配单个字符1或2或3 [a-z]           匹配小写字母a-z之一 [a-zA-Z]     匹配任意英文字母之一 [0-9a-zA-Z]匹配任意英文字母或数字之一 注意上面标红色的单个和之一,不管[]里面多复杂,它的结果都是一个字符! 可以用^标记做[]内的前缀,表示除[]内的字符之外的字符。比如 搜索oo前没有g的字符串的行. 应用 '[^g]oo' 作搜索字符串,^符号如果出现在[]的起始位置表示否定,但是在其他位置是普通字符。[^ab^c] 匹配不是a或b或^或c的任意字符 5、* 用于修饰前导字符,表示前导字符出现任意多次,如:'a*grep'匹配所有一个或多个a后紧跟grep的行。“.*”表示任意字符串 6、\? 用于修饰前导字符,表示前导字符出现0或1次 7、\+ 用于修饰前导字符,表示前导字符出现1或多次 8、\{n,m\}  用于修饰前导字符,表示前导字符出现n至m次 (n和m都是整数,且nnew   该例子将文件 old 中的每一行第一次出现的 day 替换成 night, 将结果输出到文件 new   s            " 替换 " 命令   /../../      分割符 (Delimiter)   day          搜索字符串   night        替换字符串   其实 , 分割符 "/" 可以用别的符号代替 , 比如 ",", "|" 等 .  如:sed 's/\/usr\/local\/bin/\/common\/bin/'new   等价于 sed 's_/usr/local/bin_/common/bin_' new   显然 , 此时用 "_" 作分割符比 "/" 好得多 1.2 用 & 表示匹配的字符串   有时可能会想在匹配到的字符串周围或附近加上一些字符 .  如: sed 's/abc/(abc)/' new   该例子在找到的 abc 前后加上括号 .   该例子还可以写成 sed 's/abc/(&)/' new   下面是更复杂的例子 :   sed 's/[a-z]*/(&)/' new sed 默认只替换搜索字符串的第一次出现 , 利用 /g 可以替换搜索字符串所有 $ sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。 $ sed 's/^192.168.0.1/&localhost/' example-----&符号表示替换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加 localhost,变成192.168.0.1localhost。 $ sed 's#10#100#g' example-----不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替换成100。 二、网络文件共享服务: 1、NFS:Network File System 在Linux下实现文件共享有多种方式,NFS就是其中之一。网络文件系统(NFS)协议是由Sun MicroSystem在20世纪80年代为了提供对共享文件的远程访问而设计和实现的。该协议采用Client/Server模型, 通过使用Sun开发的远程过程调用协议(RPC Protocol)来实现运行在一台计算机上的程序来调用在另一台远程机器上运行的子程序. NFS包含3个版本:NFSv2、NFSv3、NFSv4 RHEL6是以NFSv4作为默认版本,NFSv4使用TCP 协议(端口号是2049)和NFS服务器建立连接,而老版本的NFS可以在TCP协议或者是UDP协议上运行。NFS服务的端口默认是不固定的,但可以强制NFS使用固定端口。 RHEL6中NFS的软件包:nfs-utils 在NFS的相关文档中,有两个值得重点关注 /etc/exports:NFS服务的主配置文件,该文件的最主要目的是发布共享目录并为共享目录限制权限。和其他服务的主配置文件一样,绝大部分的配置都是通过编辑该文件完成 /var/lib/nfs/xtab:这个文件主要用来记录客户端与NFS服务器的连接记录,如果想查看哪些客户端曾经连接过NFS服务器,查看该文件即可 NFS服务的主配置文件exports发布共享目录的格式如下: 共享目录 [客户端1参数1][客户端2 参数]… 共享目录是指在NFS服务器上需要给客户端共享出来的目录,在设置共享目录的时候要使用绝对路径 客户端是指所有可以访问NFS服务器共享目录的计算机。常见客户端指定方式如下表: 客户端指定方式 示例 使用IP地址指定单一主机 10.20.30.40 使用IP地址指定范围主机 172.16.0.0/16 使用IP地址指定范围主机 192.168.1.* 使用域名指定单一主机 Test.ice.apple 使用域名指定范围主机 *.ice.apple 使用通配符指定所有主机 * 参数:在诸多可以附带的参数中,使用最多的要数权限设置的参数了,常见参数如下表: 参数 说明 ro 设置共享权限为只读 rw 设置共享权限为读写 root_squash 当使用NFS服务器共享目录的使用者是root时,将不被映射为匿名账号 no_root_squash 当使用NFS服务器共享目录的使用者是root时,将被映射为匿名账号 all_squash 将所有使用NFS服务器共享目录的使用者都映射为匿名账号 anonuid 设置匿名账号的UID anongid 设置匿名账号的GID sync 保持数据同步,也就是将数据同步写入内存和硬盘。这可能导致效率降低 async 先将数据保存在内存中,而不是直接保存在硬盘 注意:在发布共享目录的格式中除了共享目录是必跟参数外,其他参数都 是可选 的。而且共享目录和客户端1与客户端2之间都 需要使用空格符号,但客户端和参数之间不能有空格。 如:在/etc/exports文件添加如配置: /media *(ro) 192.168.0.10(rw,no_root_squash) /NFS/test 192.168.0.0/24(ro) NFS服务的启动与停止:NFS服务脚本是NFS chkconfig --list 将rpcbind和nfs都设为自动启动 chkconfig rpcbind on chkconfig nfs on 启动rpcbind service rpcbind start 之后才能成功启动nfs service nfs start 一定要先启动rpcbind,然后再启动nfs,不然NFS quotas和NFS daemon都将启动失败。 service nfs start|stop|restart|reload exportfs命令:用于维护当前主机中NFS服务器的输出目录列表 exportfs –rv使NFS服务器重新读取exports文件的设置,而不需重启NFS服务器 exportfs –auv 用于停止当前主机中NFS服务器的所有目录输出 exportfs –av 用于输出NFS服务器的所有共享目录 exportfs –v 显示输出列表同时,显示导出的设定参数 showmount -e 在NFS Server上执行此命令显示NFS Server上所有的共享卷 格式:showmount –e NFS服务器的IP showmount -d NFS服务器IP 查看NFS服务器上哪些共享目录被客户端挂载了。 showmount - a NFS服务器地址:显示指定NFS服务器的所有客户端主机和其所连接的目录 客户端的使用: 客户端可以先使用showmount –e查看NFS服务器发布的共享目录 挂载NFS文件系统 Mount -t nfs NFS服务器IP地址(或主机名):共享目录 本地挂载点 如:mount –t nfs 192.168.0.1:/media /mnt 启动挂载NFS 想要系统每次启动时自动挂载NFS服务器上的共享目录,则可以编辑/etc/fstab文件 NFS服务器的IP:共享目录 挂载点 nfs defaults 0 0 配置NFS固定端口: 默认情况下,NFS配置完毕后,每次重新启动该服务后其相应的端口都会随机变化,如果启用了防火墙,如何开放变化的端口就成问题了,其实解决办法也很简单,只需对NFS进行配置使用固定端口即可 NFS服务启动时,会检查/etc/sysconfig/nfs文件,因此改该文件,修改相应字段便可以强制NFS服务使用固定端口了: 若NFS服务器上启用了iptables防火墙且filter表的3个链默认规则为DROP需创建如下规则: iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT iptables –A OUTPUT –m state --state ESTABLISHED,RELATED –j ACCEPT iptables –A INPUT –m state --state ESTABLISHED,RELATED –j ACCEPT iptables –A INPUT –p tcp --dport 111 –j ACCEPT iptables –A INPUT –p udp --dport 111 –j ACCEPT iptables –A INPUT –p tcp --dport 2049 –j ACCEPT iptables –A INPUT –p udp --dport 2049 –j ACCEPT iptables –A INPUT –p tcp –m multiport --dport 875,32803,32769,892,662 –j ACCEPT iptables –A INPUT –p udp –m multiport --dport 875,32803,32769,892,662 –j ACCEPT service iptables save 2、SMB/CIFS Samba项目是SMB/CIFS协议在Linux/Unix系统中的实现,能够实现跨平台的文件和打印机资源共享,适用于使用混合操作系统平台的企业环境 Samba的软件包组成:samba、samba-client、samba-common、samba-doc等,只需安装samba、samba-client、samba-common这3个软件包,即可实现Samba服务器和客户端的基本功能 Samba服务器的主要程序 smbd:提供对服务器中文件、打印资源的共享访问 nmbd:提供基于NetBIOS主机名称的解析 Samba的服务脚本:/etc/init.d/smb Samba的配置目录及文件 /etc/samba/ /etc/samba/smb.conf Samba服务的端口号:tcp协议的139、445;udp协议的137、138.若samba服务器启动了防火墙,要在input链上创建允许规则 smb.conf配置文件的内容组成 常见全局配置项的含义 workgroup:所在工作组名称 server string:服务器描述信息 security:安全级别,可用值如下:share、user、server、domain、ads(samba使用ads级别加入WINDOWS的域环境中) passdb backend = tdbsam log file:日志文件位置,“%m”变量表示客户机地址 max log size:日志文件的最大容量,单位为KB load printers = yes cups options = raw hosts allow hosts deny 当hosts allow和hosts deny同时出现且冲突时,hosts allow优先 [homes] comment = Home Directories browseable = no writable = yes [printers] ……. 常见共享目录配置项的含义 comment:对共享目录的注释、说明信息 path:共享目录在服务器中对应的实际路径 browseable:该共享目录在“网上邻居”中是否可见 guest ok:是否允许所有人访问,等效于“public” writable:是否可写,与read only的作用相反 建立可匿名访问的文件共享: 修改smb.conf配置文件 [global] workgroup = WORKGROUP security = share [movie] comment = Public share with movie files path = /var/public/movies public = yes read only = yes 建立带验证的文件共享 建立Samba用户数据库文件:系统用户帐号 -> Samba用户帐号 smbpasswd -a 系统用户名 smbpasswd命令的主要选项: -h:显示smbpasswd命令的帮助信息 -a:添加指定的Samba用户帐号 -d:禁用指定的用户帐号 -e:启用指定的用户帐号 -x:删除指定的用户帐号 不使用任何命令选项时可以用于修改Samba用户的密码 [global] workgroup = WORKGROUP security = user [movie] comment = Public share with movie files path = /var/public/movies public = no read only = no valid users = vina, @root write list = root directory mask = 0744 create mask = 0600 在smb.conf文件设置客户机访问授权,一般用在全局配置[global]部分 hosts allow配置项:仅允许特定的客户机 hosts deny配置项:仅拒绝特定的客户机 客户机地址表示形式: 以空格分隔多个地址 主机名或IP地址,例如: 192.168.168.11 或者 prtsvr 网络地址,例如:173.17. 或者 173.17.0.0/255.255.0.0 客户端访问: 使用Windows客户端访问文件共享服务 网上邻居、UNC路径 使用Linux客户端访问文件共享服务 smbclient命令,查看及登录使用共享 smbclient -L 192.168.168.1 smbclient -U vina //192.168.168.1/movie mount命令,将共享目录挂载到本地使用 mount -o username=vina //192.168.168.1/movie /mnt 注意:若开启了selinux功能则执行如下命令:先用getsebool -a |grep samba显示与samba访问相关的布尔值,然后再用setsebool修改相关的布尔值。-P 选项是修改的布尔值永久生效。如setsebool -P samba_enable_home_dirs on 注意防火墙的配置 三、自动挂载网络存储(automount) 自动安装守护进程在文件系统被访问到时就安装文件系统,而不再需要文件系统时,就卸载它们(不活动状态的时间间隔默认为5分钟),这一过程就减少了活动安装点的数目。 与自动安装相关的配置文件中,有两个主要的配置文件 主控文件:/etc/auto.master 此文件列出了应该有autofs文件系统安装到它们上面的目录,并且给每个目录关联了一个映射文件。除了给映射和映射名提供根目录之外,还能以mount命令使用的“-o”格式来指定其他选项,一个简单的主控文件(auto.master)类似于下面的样子 Directory Map Directory是指挂载点的父目录,可自已随便设置。这个目录必须是一个有效目录 Map是指定的映射文件,该文件中包含挂载点目录;autofs会自动监视映射文件的配置来自动挂载。 映射文件名可以随便写,只要在/etc目录下能够找到就OK了,像写成media.dvd也是可以的。 如下图所示: 映射文件:自动把几个文件系统安装到一个公共的目录下,目录路径是在主控文件中,而不是在映射文件本身里指定的。 格式: 挂载目录 -fstype=文件系统类型,其后可以跟挂载选项,用“,”隔开 要挂载的设备名(本地设备必须加“:”) 修改完主控文件和映射文件后要重启autofs服务:service autofs stop service autofs start 自动挂载的默认有效时间是5分钟,但可以通过修改/etc/sysconfig/autofs文件来设置。 Automount的应用 1、 自动挂载光驱:将光驱挂载在/misc/cd目录 确定/misc目录已存在 修改/etc/auto.master文件:指定挂载点的父目录(/misc)和映射文件。如图所示: 修改/etc/auto.misc文件:指定挂载点、文件系统类型及参数、挂载的设备。如下图所示 2、 自动挂载linux文件系统即linux分区:将linux分区挂载在/disk/part目录 创建目录/disk:mkdir /disk 修改/etc/auto.master文件:指定挂载点的父目录(/disk)和映射文件。如图所示: 创建/etc/auto.part映射文件:指定挂载点、文件系统类型及参数、挂载的设备。如下图所示 cp /etc/auto.misc /etc/auto.part vi /etc/auto.part 3、 自动挂载NFS共享目录:将NFS服务器上有两个共享目录:/var/nfs/oshu和/var/nfs/ralii分别挂载在/special/oshu和/special/ralii目录并且只读 修改/etc/exports文件,共享上述两个目录 确定挂载点父目录/special已存在 修改/etc/auto.master文件:指定挂载点的父目录(/special)和映射文件。如图所示: 创建/etc/auto.nfs映射文件:指定挂载点、文件系统类型及参数、挂载的设备。如下图所示 cp /etc/auto.misc /etc/auto.nfs vi /etc/auto.nfs 4、 自动挂载samba共享服务器上的共享目录public(对应本地目录:/var/public),将其挂载在/special/share目录 确定挂载点父目录/special已存在 修改/etc/auto.master文件:指定挂载点的父目录(/special)和映射文件。如图所示: 修改/etc/auto.nfs映射文件:指定挂载点、文件系统类型及参数、挂载的设备。如下图所示 扩展知识点:Automount可以应用于nfs+nis+autofs 先在nis服务器上面建立好用户: 107在nis客户端上验证(具体过程不多说了) 出错了,说没有家目录。怎么办?对,自动挂载给他做一个家目录: auto.master文件 这是auto.nfs文件 好了现在测试一下: OK! 那现在问题来了,是不是我所有的网络用户都要在自动挂载里面写一条,那多麻烦啊,所以我们利用通配符可以很好的解决这一需求: 在auto.nfs文件里改: 四、管理用户账户和权限 用户和组帐号概述:(/etc/passwd、/etc/shadow、/etc/group) Linux基于用户身份对资源访问进行控制 用户帐号: 超级用户root: 即root用户,类似于Windows系统中的Administrator用户,非执行管理任务时不建议使用root用户登录系统 普通用户: 一般只在用户自己的宿主目录中有完全权限 程序用户: 用于维持系统或某个程序的正常运行,一般不允许登录到系统。例如:bin、daemon、ftp、mail等 组帐号: 基本组(私有组) 附加组(公共组) UID和GID: UID(User Identity,用户标识号) GID(Group Identify,组标识号) root用户的UID的固定值为0、root组帐号的GID号为固定值0 1~499的UID、GID默认保留给程序用户使用,普通用户/组使用的UID、GID号在500~60000之间。可以查看/etc/login.defs文件 保存用户的帐号基本信息:文件位置:/etc/passwd ,每一行对应一个用户的帐号记录 p 字段1:用户帐号的名称 p 字段2:用户密码字串或者密码占位符“x” p 字段3:用户帐号的UID号 p 字段4:所属基本组帐号的GID号 p 字段5:用户全名 p 字段6:宿主目录 p 字段7:登录Shell信息 管理本地用户: 添加用户帐号:useradd [选项]... 用户名 常用命令选项 · -u:指定 UID 标记号 · -d:指定宿主目录,缺省为 /home/用户名 · -e:指定帐号失效时间 · -g:指定用户的基本组名(或UID号) · -G:指定用户的附加组名(或GID号) · -M:不为用户建立并初始化宿主目录 · -s:指定用户的登录Shell 最简单的用法是,不添加任何选项,只使用用户名作为useradd命令的参数,按系统默认配置建立指定的用户帐号 使用adduser命令也可以添加用户帐号,在RHEL系统中adduser命令实际上是useradd命令的符号链接 用户帐号的初始配置文件: 文件来源:新建用户帐号时,从 /etc/skel 目录中复制而来 主要的用户初始配置文件 · ~/.bash_profile:用户每次登录时执行 · ~/.bashrc:每次进入新的Bash环境时执行 · ~/.bash_logout:用户每次退出登录时执行 默认情况下,用户宿主目录下的初始配置文件只对当前用户有效,而全局配置文件对所有用户有效 修改用户帐号的属性:usermod [选项]... 用户名 常用命令选项 · -l:更改用户帐号的登录名称 · -L:锁定用户账户 · -U:解锁用户账户 · -a: append模式,若不加-a则删除其他附加组,通常和-G一起使用。 usermod -aG 组名 用户名(将用户加入指定的附加组) · 以下选项与useradd命令中的含义相同 -u、-d、-e、-g、-G、-s 删除用户帐号:userdel [-r] 用户名 添加 -r 选项时,表示连用户的宿主目录一并删除 管理密码: 用于保存密码字串、密码有效期等信息:文件位置:/etc/shadow 每一行对应一个用户的密码记录 p 字段1:用户帐号的名称 p 字段2:加密的密码字串信息 p 字段3:上次修改密码的时间 p 字段4:密码的最短有效天数,默认值为0 p 字段5:密码的最长有效天数,默认值为99999 p 字段6:提前多少天警告用户口令将过期,默认值为7 p 字段7:在密码过期之后多少天禁用此用户 p 字段8:帐号失效时间,默认值为空 p 字段9:保留字段(未使用) 默认只有root用户能够读取文件中的内容,并且不允许root直接编辑该文件中的内容 上次修改密码的时间,表示从1970年01月01日(可理解为Unix系统的诞生日)算起到最近一次修改密码时间隔的天数 设置/更改用户口令:passwd [选项]... 用户名 常用命令选项 · -d:清空用户的密码,使之无需密码即可登录 · -l:锁定用户帐号 · -S:查看用户帐号的状态(是否被锁定) · -u:解锁用户帐号 “未设置密码”的用户帐号尚未完成初始化,处于不可登录状态,这与“空密码”的情况(已经为用户设置密码,但密码字串为空)是不同的,“未设置密码”的用户将被禁止登录系统,而拥有“空密码”的用户是可以在本地终端登录的 普通用户也可以使用passwd命令,但只能更改自己的密码,密码要求有一定的复杂性(如不要直接使用英文单词,长度保持在6位以上),否则系统可能拒绝进行设置 被锁定的帐号也将无法登录系统 chage命令:修改用户密码的有效期 如:在下次登录时,chage -d 0 username将强制更新密码 chage -l username 将列出用户名的当前设置 组帐号文件 —— group、gshadow /etc/group:保存组帐号基本信息 /etc/gshadow:保存组帐号的密码信息 group文件内的最后一个字段中列出属于该组的用户成员(一般不包括基本组对应的用户帐号),多个成员之间以逗号“,”分隔 添加组帐号:groupadd [-g GID] 组帐号名 添加、删除组成员:gpasswd [选项]... 组帐号名 用途:设置组帐号密码(极少用)、添加/删除组成员 常用选项: -a:向组内添加一个用户 -d:从组内删除一个用户成员 -M:定义组成员列表,以逗号分隔 使用“-M”选项时可以为指定组帐号定义成员列表(注意:会覆盖原有组成员),需要添加多个用户到指定的组中时非常方便 删除组帐号:groupdel 组帐号名 用户和组帐号查询: · id命令 · 用途:查询用户身份标识 · 格式:id [用户名] · groups命令 · 用途:查询用户所属的组 · 格式:groups [用户名] · finger命令 · 用途:查询用户帐号的详细信息 · 格式:finger [-l] [用户名] · users、w 、who命令 · 用途:查询已登录到主机的用户信息 Linux系统有关文件和目录的权限管理:基本权限与附加权限(略,请参考教材) 权限 数字表示 对文件的影响 对目录的影响 r (读取) 4 可读取文件中的内容 可以列出目录的内容(文件名) w (写入) 2 可以更改文件的内容 可以创建或删除目录中的任一文件 x (可执行) 1 可以作为命令执行文件 可以访问目录的内容,即可以进入或通过目录,目录中文件内容能否访问取决于目录中文件的权限 特殊权限 数字表示 对文件的影响 对目录的影响 u+s (suid) 4 以拥有文件的用户身份执行文件,而不是以运行文件的用户身份 无影响 g+s (sgid) 2 以拥有文件的组身份执行文件 在目录中最新创建的文件将其组所有者设置为与目录的组所有者相匹配 o+t (sticky) 1 无影响 对目录具有写入权限的用户仅可以删除其所拥有的文件,而无法删除其他用户所拥有的文件。 五、LDAP(轻量级目录访问服务)管理用户 近几年,随着LDAP(Light Directory Access Protocol,轻量级目录访问协议)技术的兴起和应用领域的不断扩展,目录服务技术成为许多新型技术实现信息存储、管理和查询的首选方案,特别是在网络资源查找、用户访问控制与认证信息的查询、新型网络服务、网络安全、商务网的通用数据库服务和安全服务等方面,都需要应用目录服务技术来实现一个通用、完善、应用简单和可以扩展的系统。 随着企业自身的发展,企业网络也日益壮大,网络提供的服务也越来越多,如网络登录、电子邮件服务、FTP服务、WEB服和、代理服务和办公自动化等,但带来的问题也日益增多,其中最突出的问题是用户账号的管理。由于大部分的应用系统都来自不同的开发商,各个系统都使用自已的认证机制,需要网络管理员在每个应用系统中建立相应的账号信息,因此造成大量重复的劳动,同进也给用户们带来列穷的烦恼,他们不得不记信一大堆账号和密码。目录服务就是为了解决以上问题而产生的。目录服务是一个特殊的数据库,它为读、浏览和搜索进行了优化。目录服务目前有X.500和LDAP两个国际标准协议。 LDAP协议简介: LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务。目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化。在网络中应用了LDAP后,用户只需要使用一个账号和密码就可以轻松访问网络中的所有服务,实现用户身份的统一认证。LDAP系统结构图见图1. LDAP的信息是以树型结构存储的 首先要为目录树建立一个“根(ROOT)”。根是目录树的最顶层,后面建立的所有对象都是基于这个根的,所以它也称为基准DN。推荐使用公司的DNS域名的不同部分:dc=com,dc=example 公司的部门作为OU,如ou=people,ou=servers。OU是目录树的分枝节点,下面可以包含其他分枝节点或叶子节点。 用户是目录树的最底层(即叶子节点),可以根据用户所在的部门将其放在不同的OU中,使用uid或cn描述都可以。如uid=babs或cn=babs 配置OPENLDAP服务器: 1、安装openldap、db4、migrationtools安装包 #yum install openldap* #yum install db4 #yum install migrationtools # cd /var/lib/ldap/ 下面的这一步非常重要 ( 必须要第一步就执行这个 slapd 命令) # slapd        (会生成一些库文件) #ls alock     __db.003  __db.006      log.0000000001 __db.001  __db.004  dn2id.bdb     openldap-severs-update.log __db.002  __db.005  id2entry.bdb 查看服务器进程: #ps aux | grep ldap 查看端口: [root@station3 ldap]# netstat -ntlp | grep 389 tcp        0      0 0.0.0.0:389                 0.0.0.0:*                   LISTEN      3782/slapd           tcp        0      0 :::389                      :::*                        LISTEN      3782/slapd    问题一: [root@station3 ldap]# service slapd restart 停止 slapd:                                               [确定] /var/lib/ldap/id2entry.bdb is not owned by "ldap"          [警告] /var/lib/ldap/__db.002 is not owned by "ldap"              [警告] /var/lib/ldap/__db.001 is not owned by "ldap"              [警告] /var/lib/ldap/dn2id.bdb is not owned by "ldap"             [警告] /var/lib/ldap/__db.005 is not owned by "ldap"              [警告] /var/lib/ldap/__db.006 is not owned by "ldap"              [警告] /var/lib/ldap/__db.003 is not owned by "ldap"              [警告] /var/lib/ldap/__db.004 is not owned by "ldap"              [警告] 正在检查 slapd 的配置文件: bdb_db_open: alock package is unstable backend_startup_one: bi_db_open failed! (-1) slap_startup failed (test would succeed using the -u switch)                                                            [失败] 解决方法: chown ldap:ldap /var/lib/ldap/* # service slapd restart 停止 slapd:                                               [失败] 正在检查 slapd 的配置文件: bdb_db_open: Warning - No DB_CONFIG file found in directory /var/lib/ldap: (2) Expect poor performance for suffix dc=my-domain,dc=com. config file testing succeeded                                                                     [确定] 启动 slapd:                                                [确定 ] bdb_db_open: Warning - No DB_CONFIG file found in directory /var/lib/ldap: (2)   也是一个问题 解决方法: 拷贝DB_CONFIG.example 为DB_CONFIG cp /usr/share/doc/openldap-servers-2.4.19/DB_CONFIG.example /var/lib/ldap/DB_CONFIG # service slapd restart 一切都正常了,slapd服务启动正常。 2、创建LDAP服务的主配置文件/etc/openldap/slapd.conf cp -p /etc/openldap/slapd.conf.bak /etc/openldap/slapd.conf 3、产生一个manager服务的管理的密码 #slappasswd –h {SSHA} –s redhat >>/etc/openldap/slapd.conf 4、 编辑文件slapd.conf database bdb suffix "dc=example,dc=com"    #一条记录所属区域# rootdn "cn=Manager,dc=example,dc=com" rootpw 此处所写的就是上一步所产生的加密密码    #定义LDAP根管理员的密码(强烈建议使用加密的密码)rootpw与加密密码之间最好用按TAB键分隔 5、 设置各项服务的开机启动 #chkconfig slapd on ldap服务(5.4为ldap)现在变成了slapd #chkconfig rsyslog on rsyslog 服务(日志) 5.4为syslog #chkconfig rpcbind on 启动rpcbind服务 5.4为portmap 111端口 6、将系统账户转移到openldap中(事先建好一些系统账号),编辑文件migrate_common.ph文件 #vi /usr/share/migrationtools/migrate_common.ph $DEFAULT_MAIL_DOMAIN = "example.com"; 第71行 $DEFAULT_BASE = "dc=example,dc=com"; 第74行 # cd /usr/share/migrationtools #  ./migrate_passwd.pl /etc/passwd > /etc/openldap/user.ldif #  ./migrate_group.pl /etc/group > /etc/openldap/group.ldif 建立example.ldif,ou_people.ldif, ou_group.ldif三个文件 # cd /etc/openldap/ #cat example.ldif dn: dc=example,dc=com (dn惟一辨别名,类似于文件系统的绝对路径 objectclass: dcObject objectclass: organization o: Example, Inc. (组织名) dc: example 空行 dn: cn=Manager,dc=example,dc=com objectclass: organizationalRole cn: Manager # cat ou_people.ldif dn: ou=people,dc=example,dc=com objectclass: organizationalUnit ou: people # cat ou_group.ldif dn: ou=group,dc=example,dc=com objectclass: organizationalUnit ou: group 停止slapd服务 转换原有Linux 账号至OpenLDAP服务器上: #cd /etc/openldap # slapadd -vl example.ldif 若出错误就将/etc/openldap/slap.d目录重命名,因为在默认情况下她会自动寻找slap.d/目录下的slapd.conf文件 added: "dc=example,dc=com" (00000001) # slapadd -vl ou_people.ldif added: "ou=people,dc=example,dc=com" (00000002) # slapadd -vl ou_group.ldif added: "ou=group,dc=example,dc=com" (00000003) # slapadd -vl user.ldif # slapadd -vl group.ldif 启动slapd服务 #service slapd start 若出错,解决方法:chown ldap:ldap /var/lib/ldap/* 然后再重新启动slapd: #service slapd restart 为了检查服务是否正在运行并且被正确配置,可以对服务器运行一个搜索命令,使用ldapsearch,确保openldap-clients软件包安装 查询:  #ldapsearch -x -H ldap://192.168.1.209 -b  'dc=example,dc=com' # ldapsearch -x -b 'dc=example,dc=com' -b设置目录起点 安全性:LDAP服务器安全通信 LDAP是以明文的格式通过网络来发送所有信息的,包括用户名和密码。这样会有严重的安全隐患。不过可以在传输层采用SSL安全套接层所提供的加密机制来解决这个问题。SSL(Secure Socket Layer)是目前应用最广泛的安全协议,由两部分组成——SSL握手协议(SSL Handshare Protocol)和SSL记录协议(SSL Record Protocol)。上层的握手协议的作用在于建立SSL连接,协商会话密钥。下层的记录协议则负责处理数据的加解密。当有客户端向LDAP服务发起连接时,双方首先要进行安全连接的初始化和协商,通常需要服务器端向客户端提供自己的证书,客户端解签名确认服务器端身份的真实性。这需要PKI公钥基础结构的支持。在我们企业的局域网中可以使用openssl软件包来创建一个根CA认证服务器,由根CA向自己颁发LDAP服务的使用证书。公钥包含在证书之中,其中包括了服务器完整域名(FQDN)名。在LDAP服务的客户端存放一张根CA的证书,并且用这一张授权证书去检测LDAP服务器证书的有效性和真实性。  下图是SSL 身份认证及协商密钥的过程 ●客户端发起请求,包含一个hello消息,并附上客户端支持的密码算法和 SSL 协议的版本消息以及用于生成密钥的随机数。  ●服务器收到消息后,服务器端选择加密压缩算法并生成服务器端的随机数,将该信息反馈给客户端;接着服务器端将自身的数字证书(在图 1 中使用了一个 X.509 数字证书)发送到客户端;完成上述动作后后服务器端会发送“hello done”消息给客户端。此外如果服务器需要对客户端进行身份认证,服务器端还会发送一个请求客户端证书的消息。  ●一旦客户端收到”hello done” , 就开始对服务器端的数字证书进行认证并检查服务器端选中的算法是可行的。如果服务器要求认证客户端身份,客户端还会发送自己的公钥证书。  ●如果对服务器的身份认证通过,客户端会发起密钥交换的请求。  ●服务器端和客户端根据先前协商的算法和交换随机数生成对称密钥进行后续的通信。 <1>根CA配置: 要确保openssl的软件包已安装,如下图所示: (1)编辑/etc/pki/tls/openssl.cnf 文件首先备份成openssl.cnf.raw [CA_default] default_days = 3650 à   证书有效期为十年 (第73行)最好设置时间要长一些,否则过期后所有的都要重新设置 [req] default_bits = 1024  改为 2048 à  密钥的长度 (第106行) [usr_cert] basicConstraints=CA: FALSE  改为 CA:TRUE à 可以签发下级证书 (第172行) [v3_req] basicConstraints = CA : FALSE 改为 CA:TRUE (第223行) 编辑后改名openssl.cnf.rootca 制作根CA的配置文件 #cp /etc/pki/tls/openssl.cnf  /etc/pki/tls/openssl.cnf.rootca 使其能够签发下级证书。 (2)进入/etc/pki/tls/misc 目录。 在该目录中有一个CA脚本文件可以用它来制作根CA。 编辑CA文件找到DAY=“-days ” 和CADAY=“-days  ” (第63行和第64行) 配置为  DAYS=“—days  3650”#10years          CADAYS=“—days  3650”#10years 创建根CA机构 这里关系到两个目录,/etc/pki/tls/misc是工作目录,/etc/pki/CA是存放所有CA相关文件的目录。完成此步骤后,会在/etc/pki/CA目录下生成一系列文件,其中最重要的是 /etc/pki/CA/private/cakey.pem   CA的私钥文件 /etc/pki/CA/cacert.pem  CA的证书文件 注意:如果脚本检测到/etc/pki/CA下面有文件存在,那么script会安静的退出,不会创建任何东西。把/etc/pki/CA下的文件全部删除,script就可以正常工作了 #rm -rf /etc/pki/CA/ #cd /etc/pki/tls/misc/ 如图所示: 执行脚本文件CA创建根CA机构(为根CA申请证书) #./CA –newca 需要特别注意的是创建证书时,输入Common Name的时候如果输入FQDN,客户端就指定FQDN连,如果输入IP,客户端就指定IP连。如果指定的FQDN,就全部用FQDN,否则全部用IP地址 创建过程如下: CA certificate filename (or enter to create) Making CA certificate ... Generating a 1024 bit RSA private key ..................................++++++ .....++++++ writing new private key to '../../CA/private/cakey.pem' Enter PEM pass phrase: ――输入rootca的私钥密码 Verifying - Enter PEM pass phrase: ――确认密码 ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [GB]: ――国家区域号(如US、CN等) State or Province Name (full name) [Berkshire]: ――国家或省市名 Locality Name (eg, city) [Newbury]: ――城市名 Organization Name (eg, company) [My Company Ltd]: ――单位名 Organizational Unit Name (eg, section) []: ――部门名 Common Name (eg, your name or your server's hostname) []: ――证书的名称一般书写根CA服务器的完全合格名如svr.example.com Email Address []: ―― 联系邮箱 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: ――申请书的密码,直接跳过 An optional company name []: ――代办公司的名称,直接跳过 Using configuration from /etc/pki/tls/openssl.cnf Enter pass phrase for ../../CA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details:         Serial Number:       c4:87:8a:c3:fd:11:b2:61         Validity       Not Before: Jul 23 06:43:39 2010 GMT       Not After : Jul 22 06:43:39 2013 GMT         Subject:       countryName         = GB       stateOrProvinceName       = Berkshire       organizationName    = My Company Ltd       commonName          = svr.example.com         X509v3 extensions:       X509v3 Subject Key Identifier:           4B:11:F1:EE:53:DC:74:2A:66:F4:C5:E4:5A:15:61:8B:7A:4D:1F:2D       X509v3 Authority Key Identifier:           keyid:4B:11:F1:EE:53:DC:74:2A:66:F4:C5:E4:5A:15:61:8B:7A:4D:1F:2D           DirName:/C=GB/ST=Berkshire/O=My Company Ltd/CN=ldapm.dh.cn           serial:C4:87:8A:C3:FD:11:B2:61       X509v3 Basic Constraints:           CA:TRUE Certificate is to be certified until Jul 22 06:43:39 2013 GMT (1095 days) Write out database with 1 new entries Data Base Updated 创建成功后转入/etc/pki/CA/private/目录,有cakey.pem密钥。(权限设为400) /etc/pki/CA/下有根CA的证书cacert.pem。 #cd /etc/pki/CA #openssl x509 –noout –text –in cacert.pem 必须要显示  X509V3 Basic Constraints:               CA:TRUE à 表示可以签发下级证书。 <2>签发LDAP服务器证书: LDAP服务器证书也由根CA签发,不过该证书在扩展结构上应该是一张 终端用户证书,所以必须修改/etc/pki/tls/openssl.cnf文件适应变化 服务器签发证书文件配置 [CA_default] default_days=3650 [req] default_bits=1024 [usr_cert] basicConstraints=CA:FALSE [v3_req] basicContraints=CA:FALSE #cd  /etc/pki/tls/misc/ #./CA  -newreq (与创建根CA证书过程类似) Generating a 1024 bit RSA private key ...............++++++ .++++++ writing new private key to 'newkey.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [GB]: State or Province Name (full name) [Berkshire]: Locality Name (eg, city) [Newbury]: Organization Name (eg, company) [My Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:――证书的名称一般书写LDAP服务器的完全合格名如svr.example.com,很重要后面会用到 Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Request is in newreq.pem, private key is in newkey.pem 对证书进行签证: #./CA  -sign (对证书签证) Using configuration from /etc/pki/tls/openssl.cnf Enter pass phrase for ../../CA/private/cakey.pem:――输入密码 (Rootca 的 Private key 密码) Check that the request matches the signature Signature ok Certificate Details:         Serial Number:       c4:87:8a:c3:fd:11:b2:62         Validity       Not Before: Jul 23 06:52:31 2010 GMT       Not After : Jul 23 06:52:31 2011 GMT         Subject:       countryName         = GB       stateOrProvinceName       = Berkshire       localityName        = Newbury       organizationName    = My Company Ltd       c ommonName          = svr.example.com         X509v3 extensions:       X509v3 Basic Constraints:           CA:FALSE       Netscape Comment:           OpenSSL Generated Certificate       X509v3 Subject Key Identifier:           BE:21:BD:4C:39:C1:B4:26:B4:EB:ED:B6:42:36:97:1F:97:49:15:49       X509v3 Authority Key Identifier:           keyid:4B:11:F1:EE:53:DC:74:2A:66:F4:C5:E4:5A:15:61:8B:7A:4D:1F:2D Certificate is to be certified until Jul 23 06:52:31 2011 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated Signed certificate is in newcert.pem 这样LDAP服务器证书就制作完毕了,不过一定要确定是一张终端证书 验证LDAP服务器端证书: #openssl x509 –noout –text –in newcert.pem             X509V3  Basic  Constraints:              CA:FALSE à  表明是一张终端证书。 #cd /etc/pki/tls/misc #openssl verify –CAfile /etc/pki/CA/cacert.pem  newcert.pem 成功会显示newcert.pem:OK à 表明新证书newcert.pem是由根证书cacert.pem授权。 运行完上面两个步骤后,会发现当前目录下创建了3个文件: newreq.pem 创建证书请求文件,没什么用了 newcert.pem CA签发的证书 newkey.pem 证书对应的私钥,(权限设为400) <3>LDAP服务器配置使用SSL 使用SSL安全通信需要重新配置服务器端slapd.conf文件添加SSL支持。同时将cacert.pem,LDAP服务器证书和密钥放入指定路径。 slapd.conf文件配置改动: 指定到以下三行去注释并添加 TLSCACertificateFile   /etc/openldap/cacerts/cacert.pem TLSCertificateFile      /etc/openldap/cacerts/newcert.pem TLSCertificatekeyFile   /etc/openldap/cacerts/newkey.pem TLSVerifyClient      never 第一行设置了根CA证书的存放路径,第二行和第三行分别是服务器证书和私钥的存放路径。第四行表明服务器端不需要客户端提供证书这是一个单向认证。 转移文件 cp new* /etc/openldap/cacerts/ cp /etc/pki/CA/cacert.pem /etc/openldap/cacerts/ 属主 cd /etc/openldap/cacerts/ chown ldap.ldap newkey.pem (否则slapd有服务启动不了) 设置合适的权限 chmod 644 newcert.pem chmod 400 newkey.pem 修改httpd.conf文件,创建/etc/openldap/cacerts目录的虚拟目录,如下图所示: 重启httpd服务 <4>LDAP客户端配置支持安全通信 注意:防火墙和selinux 1、停掉iptables服务或创建LDAP的允许规则 iptables –A INPUT –p tcp –dport 389 –s 192.168.10.0/24 –j ACCEPT 方法: 将CA的证书文件(cacert.pem)放到客户端的/etc/openldap/cacerts目录下(可以用scp命令) 在/etc/hosts中添加LDAP服务器的IP和svr.example.com的对应记录 在配置客户端之前,你应该确保已安装directory-client的软件包,其中包括软件包sssd、authconfig-gtk和oddjob-mkhomedir 系统->管理->身份验证或system-config-authentication可用于修改”身份标识和身份验证”的配置。 然后单击“下载CA证书”,填写http://svr.example.com/pub/cacert.pem (svr.sample.com是在创建LDAP证书common name处所写的信息,pub是在httpd.conf中创建 的虚拟目录,cacert.pem是CA的证书 以上是通过http方式下载CA证书,也可以通过ftp方式下载 修改/etc/sssd/sssd.conf文件,如下图: 重启service sssd restart 系统安全服务守护进程(SSSD)功能:它实现了集中身份验证/认证管理,并且支持广泛的身份验证/认证服务(包括OpenLDAP、动态目录、Kerberos以及红帽自带的目录服务器)。对于红帽管理部门而言,这将使得集中认证的过程变得更加容易。 客户端配置完成 测试:使用ldap服务器上的用户在客户机上登录 能正常登录,但报一个错,说没有家目录。怎么办?对,自动挂载给他做一个家目录: 在LDAP服务器端先配配置好NFS服务器,共享/home目录: 在客户端上配置自动挂载: auto.master文件 auto.nfs文件: 好了现在测试一下:没问题了。 通过安装openLDAP GUI管理OPENLDAP 从RHEL5光盘中安装下列软件包 httpd 、php、php-ldap、php-common、php-pdo 修改/etc/httpd/conf.d/php.conf文件 确保LoadModule php5_module modules/libphp5.so存在 添加下列配置 AddType application/x-httpd-php .php 修改/etc/httpd/conf/httpd.conf文件,在DirectoryIndex后添加index.php 重新启动httpd服务 把下载的 phpLDAPadmin 解压到 Apache 的网站文档根目录中,目录命名为 phpldapadmin #tar zxvf phpldapadmin-1.1.0.7.tar –C /var/www/html #cd /var/www/html #mv phpldapadmin-1.1.0.7 phpldapadmin #chown -R apache.apache phpldapadmin #cp config.php.example config.php # vi config.php 对phpLDAPadmin进行支持中文的配置 // $config->custom->appearance['language'] = 'auto'; $config->custom->appearance['language'] = 'zh_CN' 设置口令加密信息,在配置文件中修改查询语句 $config->custom->session['blowfish']='hildap'; 为LDAP服务器设置名称、地址和端口等信息 $ldapservers->SetValue($i,'server','name','My LDAP Server'); $ldapservers->SetValue($i,'server','host','192.168.0.1'); $ldapservers->SetValue($i,'server','port','389'); 为LDAP服务器设置管理员的DN $ldapservers->SetValue($i,'login','dn','cn=Manager,dc=example,dc=com'); $ldapservers->SetValue($i,'login','pass',''); 注:如果用户认证方式设置的是config,则必须在此填写正确的LDAP服务器管理员的口令 设置用户认证方式 $ldapservers->SetValue($i,'Server','auth_type','cookie'); phpLDAPadmin提供了cookie、session和config 3种认证方式 config是phpLDAPadmin默认的认证方式,不需要用户登录 cookie用户输入正确的LDAP管理员得DN与口令会保存在Web浏览器的cookie里面 session类似于cookie,不同之处在于DN与口令保存在服务器端。 为目录树设置基准DN $ldapservers->SetValue($i,'server','base',array('dc=example,dc=com')); $queries[$q]['base']='dc=example,dc=com'; 在浏览器中输入http:/LDAP服务器的IP/phpldapadmin即可访问LDAP SERVER服务器 运行之后可能出现了一个错误: Unrecognized error number: 8192: Function eregi() is deprecated  打开/var/www/html/phpldapadmin/lib/common.php  文件 找到下面的代码: # We are now ready for error reporting.   error_reporting(E_ALL);   把它修改成: #We are now ready for error reporting.   error_reporting(E_ALL & ~E_DEPERCATED); 六、组管理和访问控制列表管理(ACL) Linux的ACL主要是对标准的9位权限模型直接进行扩展,。读写和执行权限只是系统能够处理的权力。而像setuid和粘附位这样的功能还是通过传统的模式位专门处理。 ACL可以按照用户和用户组的任意组合独立地设置rwx权限位。下表列出了ACL各组成项的样了: 格式 举例 权限 user::perms user::rw- 文件的属主 user:username:perms user:lisi:rw- 某个特定的用户 group::perms group::r-x 文件的属组 group:groupname:perms group:staff:rw- 某个特定的组 other::perms other::--- 所有其他人 mask::perms mask::rwx 除去属主和其他人之外的所有人 user和group可以用名字或UID/GID来标识 mask规定了ACL能够给单个用户和组访问权限的上限它类似于umask getfacl命令可以显示一个文件当前的ACL,setfacl命令可以修改或者设置文件当前的ACL。setfacl -b file命令可以清除ACL,setfacl -m aclspec file可以修改或扩展ACL,而setfacl -x aclspec file可以删除ACL中特定项。只要在aclspec中用逗号分隔ACL项,就能够在其中包含多个ACL项。 如果想拥有文件ACL的权限,就必须为文件系统添加一个ACL属性。否则不能应用ACL。 # mount -o remount,acl /dev/sdb1 ――对已挂载的文件系统重新挂载并增加ACL属性 或卸载后重新挂载时使用ACL属性,如: umount /dev/sdb1 mount –o acl /dev/sdb1 /data # mount | grep /dev/sdb1 /dev/sdb1 on /data type ext4 (rw,acl) 或 使用tune2fs设置默认挂载选项 #tune2fs –o acl,user_xattr /dev/block-dev #dumpe2fs /dev/block-dev |grep ‘Default mount’ 现在新建一个redhat目录 #mkdir /data/redhat #ls -ld redhat drwxr-xr-x 2 root root 4096 Feb 26 21:56 redhat/ 可以看到,这个redhat目录的权限为755,这个目录的属主和属组都是root,也就是说其他人对这个目录是没有写入的权限的。 su – user1 $ cd /data $ ls lost+found  redhat $ cd redhat/ $ touch file touch: cannot touch `file': Permission denied [user1@localhost redhat]$ ls –ld drwxr-xr-x 2 root root 4096 Feb 26 21:56 . 可以看到,user1是other,user1对redhat这个目录没有写入的权限。所以没有创建文件的权限。 现在我们就给user1对该目录设置ACL权限。 #setfacl   -m   u:user1:rwx  /data/redhat/ -m         修改      u           用户 user1     指定用户 rwx       指定权限 /redhat  指定目录 # cd /data #ll total 20 drwx------  2 root root 12288 Feb 26 21:53 lost+found drwxrwxr-x+ 2 root root  1024 Feb 26 22:11 redhat 我们已经给redhat目录设置了ACL权限,通过ll(或ls -l )可以看到,redhat目录的权限位后面多了一个加号,这个加号就代表不要看表面的权限,说明还有更深的权限隐藏在里面。 如何去查看这个文件的具体权限呢 #Getfacl  /mnt/redhat [root@localhost mnt]# getfacl /data/redhat getfacl: Removing leading '/' from absolute path names # file: data/redhat # owner: root # group: root user::rwx user:user1:rwx group::r-x mask::rwx other::r-x 我们可以看到文件的属主和属组都是root,user的权限是rwx,group的权限也r-x,other的权限是r-x。而且最重要的是user:user1:rwx,也就是user1这个用户对该目录也有rwx的权限。 现在就用user1到redhat目录里面尝试去写入。 # su - user1 $ cd /data/redhat/ $ mkdir file $ ls file 可以看到,刚才是不可以往里面写入的,但是现在就写入成功了。 刚才我们对user1这个用户做了文件的ACL权限。 现在对组来做文件的ACL权限。 #setfacl  -m  g:user1:rwx   /data/redhat/ [root@localhost ~]# getfacl /data/redhat/ getfacl: Removing leading '/' from absolute path names # file: mnt/redhat # owner: root # group: root user::rwx user:user1:rwx group::r-x group:user1:rwx mask::rwx other::r-x 现在user1这个组里面的成员对/mnt/redhat目录也有rwx权限了 刚才我们用user1在/mnt/redhat目录下面创建了一个file的文件夹,说明我们对redhat这个目录有rwx的权限,但是如果在redhat目录下面还有一个文件夹,我们是否对它有rwx的权限呢? # cd /mnt/redhat/ # ls file # mkdir file1 # cd # su - user1 $ cd /mnt/redhat/ $ cd file1 $ touch 1.txt touch: cannot touch `1.txt': Permission denied 很显然,我们对redhat目录下面的子目录是没有rwx的权限的。也就是说文件的ACL功能只对当前目录生效,并不可以对子目录生效。 看下这条命令的作用, # setfacl -m d:u:user2:rwx /data/redhat/ 现在,我们同样给user2一个rwx的权限。 # su - user2 $ cd /data/redhat/ $ mkdir file100 mkdir: cannot create directory `file100': Permission denied 但是现在我们不可以往/data/redhat目录里面写入数据,就是因为多了一个d,这个d代表default(默认项) 我们现在来看看它的用处是什么。 # cd /data/redhat/ # mkdir test # ll total 4 drwxrwxr-x  2 user1 user1 1024 Feb 26 22:44  file drwxr-xr-x   2 root  root  1024 Feb 26 22:46 file1 drwxrwxr-x+ 2 root  root  1024 Feb 26 22:58 test 现在可以看到,test这个目录权限位上面多了一个加号,看下它的具体权限。 [root@localhost redhat]# getfacl test/ # file: test # owner: root # group: root user::rwx user:user2:rwx group::r-x mask::rwx other::r-x default:user::rwx default:user:user2:rwx default:group::r-x default:mask::rwx default:other::r-x 可以看到,user2这个用户对该目录有rwx的权限。尝试往test目录里面写入数据。 # su - user2 $ cd /data/redhat/ $ cd test/ $ touch 1.txt $ ls 1.txt 写入成功了,刚才我们只是对/redhat目录做了文件的ACL功能,为什么现在user2对其子目录会有rwx的权限呢,这个就是因为刚才d参数的含义,就是递归的含义,对当前目录无效果,对子目录才有效果(即加到在目录下新创建的文件和子目录的ACL上) 不管是任何用户向/data/redhat目录建立的数据,user2都会继承它们的权限。 这条命令只可以针对目录来做ACL权限。不可以对文件做,因为对文件做没有意义。文件不可能有下一级目录的。 如果文件的属主和属组和文件的ACL权限发生冲突的时候,以属主和属组为准,其实文件的ACL功能只对other人有意义。 如何移除文件的ACL权限呢 #setfacl -k /data/redhat/ 移除文件的默认ACL属性 #setfacl –b /data/redhat 移除文件的所有ACL权限 #setfacl –x u:user1 /data/redhat 移除user1对文件的ACL权限  当我们在复制文件的时候会,如果使用-p的参数,也一样可以将文件的ACL权限给复制过去 七、管理SELINUX 简介: SELinux 全称 Security Enhanced Linux (安全强化 Linux),由美国国家安全部(National Security Agency)领导开发的GPL项目,它拥有一个灵活而强制性的访问控制结构,旨在提高Linux系统的安全性,提供强健的安全保证,可防御未知攻击,是 MAC (Mandatory Access Control,强制访问控制系统)的一个实现,目的在于明确的指明某个进程可以访问哪些资源(文件、网络端口等)。 强制访问控制系统的用途在于增强系统抵御 0-Day 攻击(利用尚未公开的漏洞实现的攻击行为)的能力。所以它不是网络防火墙或 ACL 的替代品,在用途上也不重复。 而SELinux则基于强制存取控制方法,即MAC,透过强制性的安全策略,应用程序或用户必须同时符合DAC及对应SELinux的MAC才能进行正常操作,否则都将遭到拒绝或失败,而这些问题将不会影响其他正常运作的程序和应用,并保持它们的安全系统结构。 DAC 自主访问控制 用户自主决定属于自己的文件权限 MAC 强制访问控制 内核定义了所有用户包括root 的权限由selinux决定,由内核实现 进程是用户获取资源的代理 ,一个进程在运行过程中对哪些文件具有访问权限 是由进程的发起者的权限决定的. 例如: 如果你的web服务器是以apache这个用户的身份运行的 他对系统中所有o上置r的文件都具有读权限 如果某个人劫持了web服务器 那么他就获得了apache的所有权限 他可以利用缓冲区溢出漏洞set uid等多种方式获得权限提升 进而劫持整个系统 此时 传统的DAC模式就无法防范这种攻击 SELinux系统比起通常的Linux系统来,安全性能要高的多,它通过对于用户,进程权限的最小化,即使受到攻击,进程或者用户权限被夺去,也不会对整个系统造成重大影响。 在一个进程需要运行以完成某种任务时 selinux为此进程规定了一个运行环境,此环境限制了此进程可以进行的操作和可以访问的文件,此时这个进程可以活动的范围就由selinux限定 如果是传统的DAC 此进程的行为权限则由运行它的用户的权限决定,此时 它的活动范围是整个系统 selinux将进程分类 将资源分类 定义了那个进程在哪个范围内运行 只能访问哪些资源 此时不管它对其它的资源有读写权限 此时只要selinux不允许 它就不能访问. Selinux控制规则及相关概念 1.DAC(自主存取控制)依据程序运行时的身份决定权限,是大部分操作系统的权限存取控制方式。也就是依据文件的own,group,other/r,w,x权限进行限制。Root有最高权限无法限制。r,w,x权限划分太粗糙。无法针对不同的进程实现限制。 2.MAC(强制存取控制)依据条件决定是否有存取权限。可以规范个别细致的项目进行存取控制,提供完整的彻底化规范限制。可以对文件,目录,网络,套接字等进行规范,所有动作必须先得到DAC授权,然后得到MAC授权才可以存取。 3.TE(类型强制)所有操作系统访问控制都是以关联的客体和主体的某种类型的访问控制属性为基础的。在SELinux中,访问控制属性叫做安全上下文。所有客体(文件、进程间通讯通道、套接字、网络主机等)和主体(进程)都有与其关联的安全上下文,一个安全上下文由三部分组成:用户(u)、角色(r)和类型(t)标识符。 以上简单了解即可,下面的是要重点掌握的 Selinux状态查看与配置: Selinux的配置文件位置:/etc/selinux/config,它还有个链接在/etc/sysconfig/selinux 使用config文件来配置selinux(通过配置文件修改selinux的状态属于永久修改,要重启系统才生效) 配置文件内容如下: SELINUX=enforcing #此项定义selinux状态。 #enforcing—是强制模式系统受selinux保护。就是你违反了策略,你就无法继续操作下去 #permissive—是提示模式系统不会受到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,nfs,cifs等网络服务保护,不属于那些domain的就都让他们在unconfined_t里,可导入性高,可用性好但是不能对整体进行保护。 # Strict,是NAS开发的,能对整个系统进行保护,但是设定复杂。 #mls,是一个较新的安全策略。 以上策略配置都放置在/etc/selinux目录中,目录和策略名称相同 使用selinux相关命令查看和修改状态:(属于临时性的) 1、sestatus 查询selinux工作状态 2、selinuxenabled检查selinux是否开启,配合echo $?.传回值是0为开启,1为关闭. 3、getenforce查看selinux的状态 4、setenforce设定selinux运行状态,1开启(Enforcing),0关闭(Permissive) 查看和设置selinux的boolean值: selinux策略中定义许多boolean值,用户自定义要让selinux开启保护某些程序,或者是关闭对某些程序、程序中的某个项目的保护.目录位置/selinux/boolean/下相关文件. 查看boolean值: [root@localhost ~]# getsebool -a [root@localhost ~]# getsebool -a | grep ftp 也可用semanage命令 #semanage boolean –l或 semanage –l |grep ftp 设置boolean值,-P为设置永久生效. [root@localhost ~]# setsebool ftpd_disable_trans off [root@localhost ~]# setsebool -P ftpd_disable_trans off 试验1:启动vsftp服务器后以本地帐户登陆服务器,你将会看到本地帐号不能登录,使用以下命令允许本地帐户进入自家目录.(off是禁止本地帐户切换到家目录) [root@localhost ~]# setsebool -P ftp_home_dir on 再次使用本地账户登录,你将会看到登录成功。 试验2:与nfs服务有关的boolean值的设置 试验3:与samba服务有关的boolean值的设置 试验4:apache实现个人主页: Apache以RPM包安装实现个人主页,修改httpd.conf文件,如下图所示:以系统用户lining为例: 在/home/lining/创建public_html目录并在其中创建一个测试页 设置其他用户对lining用户的主目录的x权限:chmod o+x /home/lining 在浏览器中输入http://web服务器的IP/~lining会发访问失败 如何解决呢? 方法:执行setsebool命令修改如下与httpd有关的boolean值 再访问就会成功 5、 查看安全上下文相关命令 查看用户安全上下文,下面是普通用户和超级用户的安全上下文,从第一个字段依次为用户标识,角色,域类型. # id -Z 查看文件安全上下文 #ls -Z 文件名或目录 查看进程的安全上下文 #ps axZ 查看进程的selinux标签(以下就是vsftpd进程和httpd进程的安全上下文:vsftpd进程的安全上下文域类型为ftpd_t;httpd进程的安全上下文域型为httpd_t) 安全上下文以用户:角色:类型(域)的形式出现.(这里的用户指的是selinu用户) 以下是复制和移动文件时安全上下文的变化: 更改安全上下文 chcon 意思是change context     -t type 类型     -R recursive 递归(特别适用于改变某个目录下所有文件的context)     -u user     -r role 试验1:启动ftp服务器,在服务器上打开匿名用户上传权限,并给目录可写权限,以匿名帐户登陆服务器看匿名帐户能否上传文件?selinux策略默认是不允许匿名用户上传文件的。 # vim /etc/vsftpd/vsftpd.conf anon_upload_enable=YES # service vsftpd restart # mkdir /var/ftp/upload # chown ftp:ftp upload/ 以匿名账户访问FTP服务器,上传文件,会显示失败,如下图所示: 现在使用以下命令允许匿名帐户可以上传文件 再以匿名账户访问FTP服务器,上传文件,成功。 试验2:让 Apache 可以访问位于非默认目录下的网站文件 apache以RPM包安装,在网页文档根目录/var/www/html下创建一个index.html文件: 用 semanage fcontext -l | grep '/var/www' 获知默认 /var/www 目录的 SELinux 上下文:显示如下 /var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 也可以用ls –Z /var/www/html查看index.html文件或/var/www目录的安全上下文: 在浏览器中访问http://web服务器的ip,发现可以成功访问index.html页面 从中可以看到 Apache 只能访问包含 httpd_sys_content_t 标签的文件 在/var目录中创建一个目录如:web; mkdir /var/web 将index.html文件拷贝到新建的目录中,并用ls -Z查看安全上下文 修改httpd.conf文件,添加/var/web目录的虚拟目录,如下图: 重启httpd服务,在浏览器中访问,http://web服务器的IP/cw 失败 解决方法: 用chcon命令修改/var/web/index.html文件的安全上下文,如下图: 再访虚拟目录发现成功 试验3:让 Apache 侦听非标准端口 默认情况下 Apache 只侦听 80 和 443 两个端口,若是直接指定其侦听 888 端口的话,会在 service httpd restart 的时候报错: 解决方法: 先使用 sealert -b 浏览,会显示与上面报错有关的信息 要执行sealert命令,先安装与sealert相关的包,如yum –y install *sealert* semanage port -a -t http_port_t -p tcp 888 要执行semanage须安装下列包。 policycoreutils-python: 提供 semanage, audit2allow, audit2why and chcat, policycoreutils: 提供restorecon, secon, setfiles, semodule,load_policy, and setsebool 这时重启httpd服务就正常了。 semanage命令是selinuxpolicy维护工具, semanage fcontext -l | grep '/var/www' 获知默认 /var/www 目录的 SELinux 上下文: /var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 假设希望 Apache 使用 /srv/www 作为网站文件目录,那么就需要给这个目录下的文件增加 httpd_sys_content_t 标签,分两步实现: 首先为 /srv/www 这个目录下的文件添加默认标签类型: semanage fcontext -a -t httpd_sys_content_t '/srv/www(/.*)?' 然后用新的标签类型标注已有文件: restorecon -Rv /srv/www 之后 Apache 就可以使用该目录下的文件构建网站了。 其中 restorecon 在 SELinux 管理中很常见的命令,起到恢复文件默认标签的作用。比如当从用户主目录下将某个文件复制到 Apache 网站目录下时,Apache 默认是无法访问,因为用户主目录的下的文件标签是 user_home_t。此时就需要 restorecon 将其恢复为可被 Apache 访问的httpd_sys_content_t 类型: 恢复文件安全上下文的默认值:restorecon [-r -F] 恢复文件安全上下文的默认值,-r递归 –F强制.默认值在/etc/selinux/targeted/contexts/files/file_contexts文件中定义. Selinux相关的日志:/var/log/audit/audit.log和/var/log/message文件 八、linux系统上安装和管理软件 1、rpm包管理命令:rpm RPM软件包:一般命名格式: RPM命令主要功能 1. 查询RPM软件、包文件的相关信息 2. 安装、升级、卸载RPM软件包 3. 维护RPM数据库信息 查询已安装的RPM软件信息 格式:rpm -q[子选项] [软件名] 用法:结合不同的子选项 完成不同查询 -qa:查看系统中已安装的所有RPM软件包列表 -qi:查看指定软件的详细信息 -ql:查询指定软件包所安装的目录、文件列表 -qc:仅显示指定软件包安装的配置文件 -qd:仅显示指定软件包安装的文档文件 查询文件/目录属于哪个RPM软件 格式:rpm -qf 文件或目录名 查询未安装的RPM包文件 格式:rpm -qp[子选项] RPM包文件 用法:结合不同的子选项 完成不同查询 -qpi:通过.rpm包文件查看该软件的详细信息 -qpl:查看.rpm安装包内所包含的目录、文件列表 -qpc:查看.rpm安装包内包含的配置文件列表 -qpd:查看.rpm安装包内包含的文档文件列表 安装或升级RPM软件 格式:rpm [选项] RPM包文件... 用法:不同选项适用于不同情况 -i:安装一个新的rpm软件包 -U:升级某个rpm软件,若原本未装,则进行安装 -F:更新某个rpm软件,若原本未装,则放弃安装 卸载指定的RPM软件 格式:rpm -e 软件名 辅助选项 --force:强制安装所指定的rpm软件包 --nodeps:安装、升级或卸载软件时,忽略依赖关系 -h:以“#”号显示安装的进度 -v:显示安装过程中的详细信息 当RPM数据库损坏时,需要进行数据库重建 格式:rpm --rebuilddb 或者 rpm --initdb 2、rpm包管理命令:YUM A):本地YUM:(光盘源) 以下是rhel_6.0-i386-DVD的目录结构: HighAvailability  高可用相关软件包,如rhcs等相关套件 Server  常规软件包,如mysql,httpd,开发工具,系统管理工具等 LoadBalancer  负载均衡相关软件包,如lvs,pirihan ResilientStorage Packages  真正存放所有软件包的目录 images  rhel安装进程所需要的引导和驱动镜像文件, isolinux 镜像文件引导时所需要的文件 用yum来安装所需要的软件包,先来搭建yum光盘源: 先将RHEL6的光盘挂载到某一目录下,如挂载到/mnt #mount /dev/cdrom /mnt 在/etc/yum.repos.d目录下创建一个以.repo结尾的文件: #vi /etc/yum.repos.d/server.repo 配置内容如下: [Server] name=Server baseurl=file:///mnt/Server enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [LoadBalancer] name=LoadBalancer baseurl=file:///mnt/LoadBalancer enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [HighAvailability] name=HighAvailability baseurl=file:///mnt/HighAvailability enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [ResilientStorage] name=ResilientStorage baseurl=file:///mnt/ResilientStorage enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [ScalableFileSystem] name=ScalableFileSystem baseurl=file:///mnt/ScalableFileSystem enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release Yum命令格式: yum 参数说明: options: 常用的有: -y : 如果在工作过程中如要使用者响应,这个参数可以直接回答yes command: list : 列出在yum server 上面有的RPM套件 install: 安装某个套件 update : 升级某个套件,如果update后面没有接套件名称,即更新目前主机所有已安装的套件. info : 列出某个套件的详细信息,相当于rpm -qi package内容 clean : 将已下载到本机的packages或headers移除 remove : 移除已经安装在系统中的某个套件 yum localinstall package 本地安装软件包 yum update 全部更新 yum update package 更新指定程序包package yum check-update 检查可更新的程序 yum info 显示安装包信息 yum list 显示所有已经安装和可以安装的程序包 yum list 显示指定程序包安装情况 yum search 查找软件包 yum remove | erase package1 删除程序包 yum clean headers 清除header yum clean packages 清除下载的rpm包 yum clean all 清除header与rpm包 yum grouplist ,列出所有组 yum groupinstall 安装某个软件组如:yum groupinstall Virtualization 安装虚拟化 问题解决: 1、如果首次安装软件包之后,再次安装别的软件包的时候,很可能会发现报错了,错误信息如下: Error: Cannot retrieve repository metadata (repomd.xml) for repository: InstallMedia. Please verify its path and try again 其实,rhel6在首次读取改软件仓库之后,会把原本光盘根目录下,也就是一同被你拷贝到软件仓库目录的media.repo复制一份到/etc/yum.repos.d/,而该文件也就是导致本地yum源失效的罪魁祸首。 解决方法: 删除软件仓库中的media.repo # rm -f /share/rhel/media.repo 或者在/etc/yum.conf增加以下选项 skip_if_unavailable=True 2、如果安装软件包出现public key for …….rpm is not install 解决方法:导入完整性验证的公钥 #mount /dev/sr0 /mnt #rpm –-import /mnt/RPM-GPG-KEY-redhat-release 本地YUM(硬盘源) 在本地创建一个存放YUM源的目录,如mkdir /yum 将RHEL6光盘中的所有内容拷贝到/yum中 #mount /dev/cdrom /media #cp -a /media/* /yum 在/etc/yum.repos.d目录下创建一个以.repo结尾的文件: 配置内容参照光盘源的YUM,此处略过 修改yumRepo.py文件 vim /usr/lib/python2.6/site-packages/yum/yumRepo.py 把782行的 remote = url + ‘/’ + relative 改成 remote = url + ‘/yum’ + relative 4、清理YUM缓存 yum clean all 验证本地YUM安装包 B):网络YUM(通过FTP或HTTP协议方式实现网络YUM安装RPM包) 在Linux主机中使用YUM客户端工具在线升级、安装软件时,由于受到网络连接速度、网络带宽的限制,往往给用户安装带来不必要的麻烦。但是如果在局域网中构建一个基于本地的YUM源服务器,则可以大大解决用户安装软件速度较慢的问题 1、 通过FTP方式:(方式1:硬盘源) 实现步骤: 安装createrepo工具: createrepoa主要用于收集目录中的rpm包文件的头信息,以创建repodata软件仓库数据(经gzip压缩的xml文件)。 mount /dev/cdrom /mnt //挂载光盘 rpm –ivh /mnt/Packages/createrepo-0.9.8-4.el6.noarch.rpm 注意:安装createrepo包时要依赖以下两个包:deltarpm和python-deltarpm,不能忽略这两个包 安装FTP服务器: rpm -ivh /mnt/Packages/vsftpd-2……..(按TAB键自动补齐) 配置软件仓库目录: 可参考安装光盘的Server目录 mkdir /var/ftp/pub/Packages mkdir /var/ftp/pub/repodata 从光盘把所有的RPM包复制到/var/ftp/pub/Packages目录下(要确保硬盘有足够的磁盘空间) cp - a /mnt/Packages/* /var/ftp/pub/Packages/ 创建软件仓库信息文件: cd /var/ftp/pub/ createrepo --database ./ [root@server pub]# ls repodata/ filelists.sqlite.bz2 other.sqlite.bz2 primary.sqlite.bz2 repomd.xml filelists.xml.gz other.xml.gz primary.xml.gz 可以看到已经创建好了相应的软件仓库信息文件 启动vsftpd服务: service vsftpd start chkconfig vsftpd on 在另一台客户端测试,首先创建repo文件指定YUM源位置 vi /etc/yum.repos.d/server.repo,注意文件的扩展名要以repo结尾,文件内容如下 [rhel6] //软件仓库的名字 name=rhel6 //软件仓库的描述 baseurl=ftp://192.168.100.1/pub //软件仓库的位置(VSFTP匿名用户访问FTP时根目录为/var/ftp) enabled=1 //是否起用软件仓库 gpgcheck=1 //是否检查GPG签名(用来验证要安装的包是不是REDHAT官方的) gpgkey=file://etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release //GPG签名密钥的位置 验证:在客户端上安装RPM包,如samba 若YUM服务器开启了selinux功能,客户端通过YUM安装会失败 解决方法:1、关闭selinux功能setenforce 0 方法2:setsebool allow_ftpd_full_access on 通过FTP方式:(方式2:光盘源) YUM服务器端配置:(IP:192.168.0.2) 先将RHEL6系统光盘挂载到/var/ftp/pub目录下 确保vsftpd服务启动 YUM客户端配置:(IP:192.168.0.1) 在/etc/yum.repos/目录下创建一个以.repo为后缀的文件,内容如下: [Server] name=Red Hat Enterprise Linux base baseurl=ftp://192.168.0.2/pub/Server enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [HighAvailability] name=Red Hat Enterprise Linux base baseurl=ftp://192.168.0.2/pub/HighAvailability enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [LoadBalancer] name=Red Hat Enterprise Linux base baseurl=ftp://192.168.0.2/pub/LoadBalancer enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [ResilientStorage] name=Red Hat Enterprise Linux base baseurl=ftp://192.168.0.2/pub/ResilientStorage enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [ScalableFileSystem] name=Red Hat Enterprise Linux base baseurl=ftp://192.168.0.2/pub/ScalableFileSystem enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release 在客户端上测试 2、通过HTTPD方式:与ftp方式类似 实现步骤: 安装createrepo工具: createrepoa主要用于收集目录中的rpm包文件的头信息,以创建repodata软件仓库数据(经gzip压缩的xml文件)。 mount /dev/cdrom /mnt //挂载光盘 rpm –ivh /mnt/Packages/createrepo-0.9.8-4.el6.noarch.rpm 安装httpd服务器: rpm -ivh /mnt/Packages/httpd-2……..(按TAB键自动补齐) 配置软件仓库目录: 可参考安装光盘的Server目录 mkdir /var/ftp/pub/Packages mkdir /var/ftp/pub/repodata 从光盘把所有的RPM包复制到/var/ftp/pub/Packages目录下(要确保硬盘有足够的磁盘空间) cp - a /mnt/Packages/* /var/ftp/pub/Packages/ 创建软件仓库信息文件: cd /var/ftp/pub/ createrepo --database ./ [root@server pub]# ls repodata/ filelists.sqlite.bz2 other.sqlite.bz2 primary.sqlite.bz2 repomd.xml filelists.xml.gz other.xml.gz primary.xml.gz 可以看到已经创建好了相应的软件仓库信息文件 启动httpd服务: service httpd start chkconfig httpd on 配置apache服务的主配置文件httpd.conf;在httpd.conf文件中创建/var/ftp/pub目录的虚拟目录(虚拟目录名称任意例如:虚拟目录名称为yum);httpd.conf文件配置如下图: 重启httpd服务 在另一台客户端测试,首先创建repo文件指定YUM源位置 vi /etc/yum.repos.d/server.repo,注意文件的扩展名要以repo结尾,文件内容如下 [rhel6] //软件仓库的名字 name=rhel6 //软件仓库的描述 baseurl=http://192.168.100.1/yum //软件仓库的位置(yum为在httpd.conf文件中定义的虚拟目录) enabled=1 //是否起用软件仓库 gpgcheck=1 //是否检查GPG签名(用来验证要安装的包是不是REDHAT官方的) gpgkey=file://etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release //GPG签名密钥的位置 验证:在客户端上安装RPM包 九:管理系统服务 查看系统服务的启动状态 格式:chkconfig –list或chkconfig --list 服务名称 服务脚本位置:/etc/init.d à /etc/rc.d/init.d 设置系统服务的启动状态 格式:chkconfig --level 级别列表 服务名 on|off 运行级别列表:可以是235、 35、5等等形式 服务名称:注意名称要正确,如果忘记了可查看/etc/init.d/目录下的脚本名 On|off:启动或关闭启动状态 ntsysv系统服务管理工具 格式:ntsysv 或ntsysv --level 级别列表 当需要设置个别服务在不同运行级别的启动状态时,选择使用chkconfig命令要更有效率 当需要同时设置大量服务的启动状态时,选择使用ntsysv配置工具要更加适合 系统服务启动、停止等控制: service 服务脚本 start|stop|restart|reload|status或/etc/init.d/服务脚本 start|stop|restart|reload|status 十:linux日志管理: 操作系统的日志主要具有审计与监测的功能,通过对日志信息的分析,可以检查错误发生的原因,监测追踪入侵者及受到攻击时留下的痕迹,甚至还能实时的进行系统状态的监控。有效利用日志信息并对其进行分析与实时的监控管理,对于系统的安全性具有极为重要的作用. 日志文件所处的位置都在/var/log目录下。查看/etc/rsyslog.conf内容,部分内容如下: *.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages 内核及应用程序公共消息日志 # The authpriv file has restricted access. authpriv.* /var/log/secure 安全验证日志,系统生成的日志文件是放在了/var/log/secure # Log all the mail messages in one place. mail.* /var/log/maillog这个是电子邮件系统的功能,这个日志文件是在/var/log/maillog目录下。 # Log cron stuff cron.* /var/log/cron cron计划任务相关的日志 # Everybody gets emergency messages *.emerg * 这是syslog对日志所设置的级别 # Save news errors of level crit and higher in a special file. uucp,news.crit /var/log/spooler这是syslog对news和uucp的日志所设置的级别,crit表示危急,但事故还没有发生,将要发生。news 是新闻组服务器的;uucp 全称是UNIX-TO-UNIX COPY PROTOCOL的信息 # Save boot messages also to boot.log local7.* /var/log/boot.log 开机系统日志,用local7来表示,日志文件的位置处在/var/log,日志文件是boot.log 日志级别,日志系统管理员来维护系统的,系统日志的内容太多,所以就有必要把日志按级别来排序,这样能方便管理员发现比较紧急和重要的问题,以着手处理和解决。 这里有一个主次顺序,也就是重要的都放在前面,级别是由高而低的 emerg 系统已经不可用,级别为紧急 alert 警报,需要立即处理和解决 crit 既将发生,得需要预防。事件就要发生 warnig 警告。 err 错误信息,普通的错误信息 notice 提醒信息,很重要的信息 info 通知信息,属于一般信息 debug 这是调试类信息 对于日志信息的管理通常采用两种方法,一种方法是不同服务器的日志信息都存放在各自系统内,系统管理员对各服务器进行分散管理。另一种方法则是使用日志主机系统,即集中进行日志的存储和管理;这是一个从其他主机收集日志,并将它们存放在同一个地方的系统,很容易使来自多个主机的日志条目关联起来,对其进行统一管理、分析,甚至配合自动化工具进行实时的监控,有效提高管理的效率. 第一种方法往往是大多数系统管理员的常用的方法,这种传统的管理方法在服务器数量较少时还能勉强应付,但在处理多主机状况时却并非一种有效的方法。本文主要讲述的是第二种日志管理方法,探寻一种提高系统管理效率的途径。 内核及系统日志由系统服务 rsyslog 统一管理, 配置文件:/etc/rsyslog.conf ;内容如下 试验:liunx系统日志集中存储,将B主机的系统日志存储到A主机(日志主机)上 A主机:IP:192.168.0.1/24 B主机:IP:192.168.0.2/24 A主机配置:(日志主机) 1、修改/etc/sysconfig/rsyslog文件,修改如下图所示: 2、 修改/etc/rsyslog.conf配置文件 将rsyslog.conf文件中第13、14、17、18行”#”注释去掉,修改如下图所示: 3、 重启rsyslog(系统日志服务脚本)service rsyslog restart Netstat -ntupl |grep rsyslog查看rsyslog服务的端口号 注意:A主机上若启动防火墙,则需要在防火墙上创建TCP/UDP 514端口的允许规则 B主机(客户端)配置: 1、修改/etc/rsyslog.conf文件,修改如下图所示: 上图是以/var/log/messages和/var/log/cron日志为例进行修改 2、重启rsyslog服务 验证: 当整个系统部署好后,可以从日志主机里验证各服务器是否将日志信息发送到了日志主机上。以/var/log/message或/var/log/cron为例,打开此文件,当看到具有不同主机名字的日志信息标志着日志主机已经正常工作 对于如此庞大的日志信息,大部分并没多大的用处,但在跟踪某一具体问题或者安全漏洞时却可能很有用。那么我们如何对其进行有效地分析与监测,发挥其真正作用呢?这里介绍常用的日志分析与监控软件,对这些日志信息进行自动地分析与监控。 利用Logwatch 进行日志监控: logwatch是一款专门监测Linux log文件(日志文件)的软件。安装以后只要稍微配置一下,再结合postfix就能每天将主机的log分析文件发送至指定的邮箱。这样就能节省一个个手动查看日志的繁琐,为管理员节省时间,节省精力。并且每天(甚至更频繁)都能准确地接收到日志。从而对服务器的安全情况有所掌握。 1、 在日志主机上安装logwatch包,可通过YUM安装,若用rpm命令安装,要依赖perl-Date包 2、 安装完毕后进行配置: 可以修改和添加它的logfiles、services和其他配置,但默认已经有很多脚本了,只要在配置文件中修改个别配置项即可; 1)可以添加新的配置到 /etc/logwatch/conf/logwatch.conf 2)也可以修改/usr/share/logwatch/default.conf/logwatch.conf 但1)会覆盖2)(即: /etc/logwatch/conf/ 会自动覆盖/usr/share/logwatch/default.conf/下的同名文件)。 要修改的配置项如下: MailTo =user1@benet.com   //你的实际Email地址,比如 MailTo = a@sina.com,多个邮箱用逗号隔开 Detail = High    //日志详细程度为高 Logwatch命令常用的选项有: --detail : 报告的详细程序,可用的值为:High, Med, Low or 0-10; --logfile : 日志文件文件名,如:messages、auth.log等; --service : 服务名,各个服务有对应的解析脚本,这些脚本位与以下目录中(/usr/share/logwatch/scripts/services/或/etc/log.d/scripts/services); --print: 打印标准输出; --mailto : 收件人地址; --archives: 使用压缩的文件或轮转的文件,如:messages.1、messages.1.gz; --save : 保存到文件 . --range : 日期范围:Yesterday、Today、All; --debug : 试调级别: High、Med、Low ; --splithosts: 为每个主机创建一份报告; --multiemail: 将报告发送给多个邮件地址; logwatch默认每天执行一次向邮箱发送邮件,可以从/etc/cron.daily里看到。 可以手动执行logwatch的命令: perl /usr/share/logwatch/scripts/logwatch.pl 测试向邮箱发邮件。 让系统定时给指定邮箱发送邮件: 编写一个脚本:vi /usr/local/sbin/logwatch.sh内容如下: #!/bin/bash perl /usr/share/logwatch/scripts/logwatch.pl 写完后保存退出 chmod u+x /usr/local/sbin/logwatch.pl 创建一个cron计划任务: #crontab –e 30 08 * * * /usr/local/sbin/logwatch.sh

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ]
0 人已下载

下载文档

相关文档