RHEL6:正测表达式_NFS_ACL_SELINUX_日志管理.doc_第1页
RHEL6:正测表达式_NFS_ACL_SELINUX_日志管理.doc_第2页
RHEL6:正测表达式_NFS_ACL_SELINUX_日志管理.doc_第3页
RHEL6:正测表达式_NFS_ACL_SELINUX_日志管理.doc_第4页
RHEL6:正测表达式_NFS_ACL_SELINUX_日志管理.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、正则表达式:正则表达式(或称Regular Expression,简称RE)就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。vim、grep、awk、sed都支持正则表达式。 1、.代表任意单个字符, 如:/l.e/ 与包含一个l,后跟两个字符,然后跟一个e的行相匹配 ? 匹配零个或一个字符。如:gr?p匹配gr后跟一个或没有字符,然后是p的行2、代表行的开始。 love 如:与所有love开头的行匹配 3、$代表行的结束。love$ 如:与所有love结尾的行匹配 那么$ 就表示空行4、匹配括号中的字符之一abc 匹配单个字符a或b或c123 匹配单个字符1或2或3a-z 匹配小写字母a-z之一a-zA-Z匹配任意英文字母之一0-9a-zA-Z匹配任意英文字母或数字之一注意上面标红色的单个和之一,不管里面多复杂,它的结果都是一个字符!可以用标记做内的前缀,表示除内的字符之外的字符。比如 搜索oo前没有g的字符串的行. 应用 goo 作搜索字符串,符号如果出现在的起始位置表示否定,但是在其他位置是普通字符。abc 匹配不是a或b或或c的任意字符5、* 用于修饰前导字符,表示前导字符出现0次或任意多次,如:a*grep匹配所有0个或多个a后紧跟grep的行。“.*”表示任意字符串6、? 用于修饰前导字符,表示前导字符出现0或1次7、+ 用于修饰前导字符,表示前导字符出现1或多次8、n,m 用于修饰前导字符,表示前导字符出现n至m次 (n和m都是整数,且nm)n,m还有其他几种形式:n 连续的n个前导字符n, 连续的至少n个前导字符9、 用于转义紧跟其后的单个特殊字符,使该特殊字符成为普通字符注:以上“前导字符”表示紧贴于元字符前面的单个普通字符例如:a* 匹配连续的任意(也包括0)个a.* 匹配连续的任意(也包括0)个任意字符,传说中的万能匹配!a? 匹配0或1个aa+ 匹配1或多个aa3,5 匹配3至5个连续的a.* 匹配0或多个连续的. .表示普通字符句点10、表示或 如: a|b|c 匹配a或b或c。如:grep|sed匹配grep或sed11、(),将部分 内容合成一个单位组,比如 要搜刮 glad 或 good 可以如许 g(la|oo)d综合举例:1 Christian Scott lives here and will put on a Christmas party.2 There are around 30 to 35 people invited. 3 They are: 4 Tom5 Dan6 Rhonda Savage7 Nicky and Kimerly.8 Steve, Suzanne, Ginger and Larry. A-Z.$搜索行以A至Z的一个字母开头,然后跟两个任意字母,然后跟一个换行符的行。将找到第5行。A-Za-z*30-5搜索以一个大写字母开头,后跟0个或多个小写字母,再跟数字3,再跟05之间的一个数字。 *A-Za-za-z$搜索以0个或多个空格开头,跟一个大写字母,两个小写字母和一个换车符。将找到第4行的TOM(整行匹配)和第5行。注意,*前面有一个空格。A-Za-z*,A-Za-z*$将查找以0个或多个大写或小写字母开头,不跟逗号,然后跟0个或多个大写或小写字母,然后跟一个换车符。将找到第5行。grep命令的用法grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.参数1. -A NUM,-after-context=NUM 除了列出符合行之外,并且列出后NUM行。如: $ grep A 1 panda file (从file中搜寻有panda样式的行,并显示该行的后1行)2. -a或text grep原本是搜寻文字文件,若拿二进制的档案作为搜寻的目标,则会显示如下的讯息: Binary file 二进制文件名 matches 然后结束。若加上-a参数则可将二进制档案视为文本文件搜寻,相当于-binary-files=text这个参数。example: (从二进制档案mv中去搜寻panda样式)(错误!)$ grep panda mvBinary file mv matches(这表示此档案有match之处,详见-binary-files=TYPE )(正确!)$ grep -a panda mv3. -B NUM,-before-context=NUM 与 -A NUM 相对,但这此参数是显示除符合行之外并显示在它之前的NUM行。example: (从file中搜寻有panda样式的行,并显示该行的前1行)$ grep -B 1 panda file4、 -C NUM, -NUM, -context=NUM 列出符合行之外并列出上下各NUM行,默认值是2。example: (列出file中除包含panda样式的行外并列出其上下2行)(若要改变默认值,直接改变NUM即可)$ grep -CNUM panda file5、 -c, -count 不显示符合样式行,只显示符合的总行数。若再加上-v,-invert-match,参数显示不符合的总行数6、-i,-ignore-case 忽略大小写差别7、-n,-line-number 在匹配的行前面打印行号8、-v,-revert-match 反检索,只显示不匹配的行要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。$ ls -l | grep a 通过管道过滤ls -l输出的内容,只显示以a开头的行。$ grep test d* 显示所有以d开头的文件中包含test的行。$ grep test aa bb cc 显示在aa,bb,cc文件中匹配test的行。$ grep a-z5, aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。sed命令的用法sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。基本命令 1、替换: s命令 1.1 基本用法 如: sed s/day/night/ new 该例子将文件 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*/(&)/ newsed 默认只替换搜索字符串的第一次出现 , 利用 /g 可以替换搜索字符串所有$ sed s/test/mytest/g example-在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。$ sed s//&localhost/ example-&符号表示替换字符串中被找到的部份。所有以开头的行都会被替换成它自已加 localhost,变成localhost。$ sed s#10#100#g example-不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替换成100。如果需要对同一文件或行作多次修改,可以使用 -e 选项删除行:从某文件中删除包含 xxx 的所有行2、打印:p命令 sed /north/p datafile 默认输出所有行,找到north的行重复打印 sed n /north/p datafile 禁止默认输出,只打印找到north的行 3、删除:d命令 sed 3d datafile 删除第三行,其余行输出到屏幕 sed 3,$d datafile 从第3行到最后一行都删除,将剩余部分输出到屏幕 sed /north/d datafile 将含有north的行删除,其余输出到屏幕 这里主要介绍sed中有关s、p、d命令,其他相关命令和选项可以查阅相关文档。练习:1、使用grep 显示出/usr/share/dict/words 文件中所有含有fish 的行grep fish /usr/share/dict/words2、使用grep 输出任何包含fish 的所有行,还要输出紧接着这行的上下各两行的内容grep -B 2 -A 2 fish /usr/share/dict/words 或grep -C 2 fish /usr/share/dict/words3、使用grep 来显示出在words 文件中有多少行含有fishgrep c fish /usr/share/dict/words4、使用grep 显示出那些行含有fish,并将行号一块输出,看一看starfish 在哪行grep n fish /usr/share/dict/words5、想列出/usr/share/dict/words中包含先有字母t 然后有一个元音字母,之后是sh 的单词,命令为:grep taeioush /usr/share/dict/wordsfind命令:有时可能需要在系统中查找具有某一特征的文件(例如文件权限、文件属主、文件长度、文件类型等等)。这样做可能有很多原因。可能出于安全性的考虑,或是一般性的系统管理任务,或许只是为了找出一个不知保存在什么地方的文件。find是一个非常有效的工具,它可以遍历当前目录甚至于整个文件系统来查找某些文件或目录。在本文中,我们介绍以下内容: find命令选项。 使用find命令不同选项的例子。由于find具有如此强大的功能,所以它的选项也很多.即使系统中含有网络文件系统(NFS ),find命令在该文件系统中同样有效,只要你具有相应的权限。find命令的一般形式为:find pathname -options -print -exec -ok该命令的参数:pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。-print: find命令将匹配的文件输出到标准输出。(默认就是标准输出)-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为command ;,注意 和;之间的空格。-ok 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。find命令有很多选项或表达式,每一个选项前面跟随一个横杠-。-name 按照文件名查找文件。-perm 按照文件权限来查找文件。-empty 查找大小为0的目录或文件-user 按照文件属主来查找文件。-group 按照文件所属的组来查找文件。-mtime -n +n 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/group中不存在。-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。-type 查找某一类型的文件,诸如:b 块设备文件。块设备是可随机读写的设备,例如硬盘d 目录。c 字符设备文件。字符设备必须是顺序读写的,比如串口p 管道文件。管道文件是一种很特殊的文件,主要用于不同进程间的信息传递。当两个进程间需要进行数据或信息传递时,可以通过管道文件。一个进程将需传递的数据或信息写入管道的一端,另一进程则从管道的另一端取得所需的数据或信息。通常管道是建立在缓存中.l 符号链接文件。f 普通文件。-size 根据文件大小寻找文件。练习:1、如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是*.txt的文件:# find . -name “a-za-z0-90-9.txt” -print2、在当前目录下查找文件权限位为7 5 5的文件,即文件属主可以读、写、执行,属组可以读、执行,其他用户可以读、执行的文件:# find . -perm 755-perm mode 文件的权限位恰好是 mode -perm -mode 所有的权限位 mode 都被设置了的文件。 -perm +mode 任何权限位 mode 被设置了的文件例如:用760为例,760的权限位 mode = 111 110 000 这个样子find . -perm 760 是说恰好为760 , rwxrw-find . -perm -760 是说第一组满足7,第二组满足6就可以了,后一组无所谓,rwxrw-或rwxrwxr-等都满足。这就是 mode 中的那些 1 位必须全部满足find . -perm +760 是说3组中只要有一个满足就可以了,因此 r-x- 也会入选,范围又扩大很多,就是说 mode 中任何 1 位得到满足都会入选3、为了查找属主帐户已经被删除的文件,可以使用-nouser选项。这样就能够找到那些属主在/etc/passwd文件中没有有效帐户的文件。在使用-nouser选项时,不必给出用户名;find命令能够为你完成相应的工作。例如,希望在/ h o m e目录下查找所有的这类文件,可以用:# find /home -nouser4、希望在系统根目录下查找更改时间在5日以内的文件,可以用:# find / -mtime -5为了在/var目录下查找更改时间在3日以前的文件,可以用:# find /var/adm -mtime +35、查找系统中所有文件长度为0的普通文件,并列出它们的完整路径,可以用:# find / -type f -size 0 -exec ls -l ;或# find / -type f -empty -exec ls -l ;为了查找/var/log目录中更改时间在7日以前的普通文件,并删除它们,可以用:$ find /var/logs -type f -mtime +7 -exec rm ;6、找出所有用户 ira 拥有的文件,并且把它们拷贝到/root/findfiles 目录中#mkdir /root/findfiles#find / -user ira -exec cp /root/findfiles ;二、网络文件共享服务:1、NFS:Network File System在Linux下实现文件共享有多种方式,NFS就是其中之一。网络文件系统(NFS)协议是由Sun MicroSystem在20世纪80年代为了提供对共享文件的远程访问而设计和实现的。该协议采用Client/Server模型, 通过使用Sun开发的远程过程调用协议(RPC Protocol)来实现运行在一台计算机上的程序来调用在另一台远程机器上运行的子程序.NFS包含3个版本:NFSv2、NFSv3、NFSv4RHEL6是以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地址指定单一主机0使用IP地址指定范围主机/16使用IP地址指定范围主机192.168.1.*使用域名指定单一主机Test.ice.apple使用域名指定范围主机*.ice.apple使用通配符指定所有主机*参数:在诸多可以附带的参数中,使用最多的要数权限设置的参数了,常见参数如下表:参数说明ro设置共享权限为只读rw设置共享权限为读写root_squash当使用NFS服务器共享目录的使用者是root时,将被映射为匿名账号。即:NFS 主机使用共享目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个系统账号的身份no_root_squash当使用NFS服务器共享目录的使用者是root时,将不被映射为匿名账号。即:NFS 主机使用共享目录的使用者,如果是 root 的话,那么对于这个共享的目录来说,他就具有 root 的权限!这个项目极不安全,不建议使用!all_squash将所有使用NFS服务器共享目录的使用者都映射为匿名账号anonuid设置匿名账号的UIDanongid设置匿名账号的GIDsync保持数据同步,也就是将数据同步写入内存和硬盘。这可能导致效率降低async先将数据保存在内存中,而不是直接保存在硬盘注意:在发布共享目录的格式中除了共享目录是必跟参数外,其他参数都 是可选 的。而且共享目录和客户端1与客户端2之间都 需要使用空格符号,但客户端和参数之间不能有空格。如:在/etc/exports文件添加如配置:/media *(ro) 0(rw,no_root_squash)/NFS/test /24(ro)NFS服务的启动与停止:NFS服务脚本是NFSchkconfig -list将rpcbind和nfs都设为自动启动chkconfig rpcbind onchkconfig nfs on启动rpcbindservice rpcbind start之后才能成功启动nfsservice nfs start一定要先启动rpcbind,然后再启动nfs,不然NFS quotas和NFS daemon都将启动失败。service nfs start|stop|restart|reloadexportfs命令:用于维护当前主机中NFS服务器的输出目录列表exportfs rv使NFS服务器重新读取exports文件的设置,而不需重启NFS服务器exportfs auv 用于停止当前主机中NFS服务器的所有目录输出exportfs av 用于输出NFS服务器的所有共享目录exportfs v 显示输出列表同时,显示导出的设定参数 showmount -e 在NFS Server上执行此命令显示NFS Server上所有的共享卷格式:showmount e NFS服务器的IPshowmount -d NFS服务器IP 查看NFS服务器上哪些共享目录被客户端挂载了。showmount - a NFS服务器地址:显示指定NFS服务器的所有客户端主机和其所连接的目录客户端的使用:客户端可以先使用showmount e查看NFS服务器发布的共享目录挂载NFS文件系统Mount -t nfs NFS服务器IP地址(或主机名):共享目录 本地挂载点如:mount t nfs :/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 DROPiptables -P OUTPUT DROPiptables -P FORWARD DROPiptables I INPUT p tcp -dport 111 j ACCEPTiptables I INPUT p udp -dport 111 j ACCEPTiptables I INPUT p tcp -dport 2049 j ACCEPTiptables I INPUT p udp -dport 2049 j ACCEPTiptables I INPUT p tcp m multiport -dport 875,32803,32769,892,662 j ACCEPTiptables I INPUT p udp m multiport -dport 875,32803,32769,892,662 j ACCEPTservice iptables save三、组管理和访问控制列表管理(ACL)Linux的ACL主要是对标准的9位权限模型直接进行扩展,。读写和执行权限只是系统能够处理的权力。而像setuid和粘附位这样的功能还是通过传统的模式位专门处理。ACL可以按照用户和用户组的任意组合独立地设置rwx权限位。下表列出了ACL各组成项的样了:格式举例权限user:permsuser:rw-文件的属主user:username:permsuser:lisi:rw-某个特定的用户group:permsgroup:r-x文件的属组group:groupname:permsgroup:staff:rw-某个特定的组other:permsother:-所有其他人mask:permsmask:rwx除去属主和其他人之外的所有人user和group可以用名字或UID/GID来标识mask规定了ACL能够给单个用户和组访问权限的上限它类似于umaskgetfacl命令可以显示一个文件当前的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/sdb1mount 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 mountuser_xattr选项使用用户指定扩展文件属性,acl选项使用访问控制列表扩展文件权限可以使用tune2fs -l device_node检查文件系统参数#tune2fs l /dev/sda1现在新建一个redhat目录#mkdir /data/redhat#ls -ld redhatdrwxr-xr-x 2 root root 4096 Feb 26 21:56 redhat/可以看到,这个redhat目录的权限为755,这个目录的属主和属组都是root,也就是说其他人对这个目录是没有写入的权限的。su user1$ cd /data$ lslost+found redhat$ cd redhat/$ touch filetouch: cannot touch file: Permission denieduser1localhost redhat$ ls lddrwxr-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#lltotal 20drwx- 2 root root 12288 Feb 26 21:53 lost+founddrwxrwxr-x+ 2 root root 1024 Feb 26 22:11 redhat我们已经给redhat目录设置了ACL权限,通过ll(或ls -l )可以看到,redhat目录的权限位后面多了一个加号,这个加号就代表不要看表面的权限,说明还有更深的权限隐藏在里面。如何去查看这个文件的具体权限呢#Getfacl /data/redhatrootlocalhost mnt# getfacl /data/redhatgetfacl: Removing leading / from absolute path names# file: data/redhat# owner: root# group: rootuser:rwxuser:user1:rwxgroup:r-xmask:rwxother: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$ lsfile可以看到,刚才是不可以往里面写入的,但是现在就写入成功了。刚才我们对user1这个用户做了文件的ACL权限。现在对组来做文件的ACL权限。#setfacl -m g:user1:rwx /data/redhat/ rootlocalhost # getfacl /data/redhat/getfacl: Removing leading / from absolute path names# file: mnt/redhat# owner: root# group: rootuser:rwxuser:user1:rwxgroup:r-xgroup:user1:rwxmask:rwxother:r-x现在user1这个组里面的成员对/mnt/redhat目录也有rwx权限了刚才我们用user1在/mnt/redhat目录下面创建了一个file的文件夹,说明我们对redhat这个目录有rwx的权限,但是如果在redhat目录下面还有一个文件夹,我们是否对它有rwx的权限呢?# cd /mnt/redhat/# lsfile# mkdir file1# cd# su - user1$ cd /mnt/redhat/$ cd file1$ touch 1.txttouch: 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 file100mkdir: cannot create directory file100: Permission denied但是现在我们不可以往/data/redhat目录里面写入数据,就是因为多了一个d,这个d代表default(默认项)我们现在来看看它的用处是什么。# cd /data/redhat/# mkdir test# lltotal 4drwxrwxr-x 2 user1 user1 1024 Feb 26 22:44 filedrwxr-xr-x 2 root root 1024 Feb 26 22:46 file1drwxrwxr-x+ 2 root root 1024 Feb 26 22:58 test现在可以看到,test这个目录权限位上面多了一个加号,看下它的具体权限。rootlocalhost redhat# getfacl test/# file: test# owner: root# group: rootuser:rwxuser:user2:rwxgroup:r-xmask:rwxother:r-xdefault:user:rwxdefault:user:user2:rwxdefault:group:r-xdefault:mask:rwxdefault:other:r-x可以看到,user2这个用户对该目录有rwx的权限。尝试往test目录里面写入数据。# su - user2$ cd /data/redhat/$ cd test/$ touch 1.txt$ ls1.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权限给复制过去练习:项目组需要名为/opt/research目录,用于存储他们的项目文档。只有组profs和grads中的成员能够在该目录中创建新文件,并且新文件应具有以下属性目录应归root用户所有;新文件应归grads组所有;profs中的成员应自动拥有对新文件读写权限;组interns应自动拥有对新文件的只读权限;其他用户(不是组profs、grads、interns的成员)不能对该目录及其内容拥有任何权限。前三行创建了/opt/research目录,并确保其归用户root、组grads所有,所拥有用户和组具有读、写、和执行权行权限,并且grads将拥有该目录中创建的文件的sgid权限。接下来的两行则通过使用acl为组profs和interns授予对目录的适当权限,最后两行通过默认acl为组profs和interns授予对该目录中新创建文件的适当权限。用getfacl显示最终结果如下图:四、管理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策略使用它来确定某个进程是否能访问文件、目录或端口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值:rootlocalh

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论