微X公众号:计算机与网络安全
权限管理和掌控
1. 权限查看
Linux 系统中的每一个文件和目录都有拜访许可权限,经过其确定谁能够经过何种方式对文件和目录进行拜访和操作。
文件或目录的拜访权限分为只读、只写和可执行3种。以文件为例,只读权限暗示只准许读其内容,而禁止对其做任何的更改操作;只写权限准许对文件进行任何的修改操作;可执行权限暗示准许将该文件做为一个程序执行。
文件被创建时,文件所有者自动持有对该文件的读、写和可执行权限,以便于对文件的阅读和修改。用户亦可按照需要把拜访权限设置为需要的任何组合。
有3种区别类型的用户可对文件或目录进行拜访:文件所有者、同组用户、其他用户。所有者通常是文件的创建者,它能够准许同组用户有权拜访文件,还能够将文件的拜访权限赋予系统中的其他用户。在这种状况下,系统中的每一位用户都能拜访该用户持有的文件或目录。
每一个文件或目录的拜访权限都有3组,每组用3位暗示,分别为:文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。当用“ls-l”命令表示文件或目录的仔细信息时,最左边的一列为文件的拜访权限,如下:
-rwxrw-rw-1 root root 24064 1月1410:58 qq.exe
横线表率不拥有该权限,r表率只读,w表率写,x表率可执行。这儿共有10个位置。第1个字符指定了文件类型。在一般道理上,一个目录亦是一个文件。倘若第1个字符是横线,暗示是一个非目录的文件。倘若是d,暗示是一个目录。后面的9个字符每3个形成一组,依次暗示文件属主、组用户、其他用户对该文件的拜访权限。
从命令中能够得到,qq.exe 是一个普通文件。qq.exe 的属主有读写执行权限;与qq.exe属主同组的用户仅有读和写权限;其他用户亦仅有读和写权限。同期,qq.exe的所有者是Root用户,属于Root组用户。
确定了一个文件的拜访权限后,用户能够利用Linux系统供给的chmod命令来重新设定区别的拜访权限,亦能够利用chown命令来更改某个文件或目录的所有者。
2. 管理掌控
chown命令能够改变文件的所属用户和组,将指定文件的持有者改为指定的用户或组。用户能够是用户名或用户 ID。组能够是组名或组 ID。文件是以空格掰开的要改变权限的文件列表,支持通配符。该命令的运用形式为:chown[选项]用户或组文件,该命令的选项如下:
-R:递归地改变指定目录及其下面的所有子目录和文件的持有者。
-v:表示chown命令所做的工作。
运用chown命令修改用户和组的演示如下:
root@kail:~/temp# ls-l
-rw-r--r--1 root root 0 1月20 14:45 a
-rw-r--r--1 root root 0 1月2014:45 b
root@kali:~/temp# chown mysql:mysql a
root@kali:~/temp# ls-l
-rw-r--r--1 mysql mysql 0 1月20 14:45 a
-rw-r--r--1 root root 0 1月2014:45 b
运用chmod命令修改文件权限能够灵活得多,它支持数字设定权限,其中,读权限r对应数字4,写权限w对应数字2,执行权限x对应数字1。简单演示chmod的运用,如下所示:
root@kali:~/temp# chmod+x a
root@kali:~/temp# ls-l
-rwxr-xr-x 1 mysql mysql 0 1月20 14:45 a
-rw-r--r--1 root root 0 1月20 14:45 b
能够看到,运用+x,所有用户添加了执行权限,这等价于a+x参数,这针对w和r权限是同样的。
运用 u+x,指定文件所有者增多 x 执行权限,相对应,o+x 是其他人增多 x 权限,g+x是所属组增多执行权限,这针对w和r权限亦是同样的。
下面演示数字设定权限,如下:
root@kali:~/temp chmod 777 b
root@kali:~/temp ls-l
-rwxr-xr-x 1 mysql mysql 0 1月20 14:45 a
-rwxrwxrwx 1 root root 0 1月20 14:45 b
能够看出,777对应所有rwx的所有权限,444对应所有的r权限。
从安全的方向看,应该尽可能避免产生权限为777的文件,针对任何人都能够读、写、执行的文件,针对主机系统的安全威胁是很大的。
文件系统安全
Linux 针对文件权限管理是完善和全面的,然则用户一般会在权限的设置上产生纰漏,本文介绍文件系统的权限和安全。
1. 锁定系统重要文件
系统运维人员有时候可能会遇到经过Root用户都不可修改或删除某个文件的状况,产生这种状况的大部分原由可能是这个文件被锁定了。在Linux下锁定文件的命令是chattr,经过这个命令能够修改ext2、ext3、ext4文件系统下文件属性,然则这个命令必须有超级用户Root来执行。和这个命令对应的命令是lsattr,这个命令用来查找文件属性。
经过 chattr 命令修改文件或目录的文件属性能够加强系统的安全性,下面简单介绍下chattr和lsattr两个命令的用法。
lsattr用来查找文件属性,用法比较简单,其语法格式如下:
lsattr[-RVadlpv][文件]
常用参数如下所示:
-a:列出目录中的所有文件,包含以.开头的文件。
-d:表示指定目录的属性。
-R:以递归的方式列出目录下所有文件及子目录以及属性值。
-v:表示文件或目录版本。
chattr命令的语法格式如下:
chattr[-RV][-v version][mode]文件或目录。
重点参数含义如下:
-R:递归修改所有的文件及子目录。
-V:仔细表示修改内容,并打印输出。
其中,mode部分用来掌控文件的属性,常用参数如下所示:
+:在原有参数设定基本上,追加参数。
-:在原有参数设定基本上,移除参数。
=:更新为指定参数。
a:即 append,设定该参数后,只能向文件中添加数据,而不可删除。常用于服务器日志文件安全,仅有Root用户才可设置这个属性。
c:即compresse,设定文件是不是经压缩后再存储。读取时需要经过自动解压操作。
i:即 immutable,设定文件不可被修改、删除、重命名、设定链接等,同期不可写入或新增内容。这个参数针对文件系统的安全设置有很大帮忙。
s:安全删除文件或目录,即文件被删除后硬盘空间被所有收回。
u:与s参数相反,当设定为u时,系统会保存其数据块以便以后能够恢复删除这个文件。这些参数中,最常用到的是a和i,参数a常用于服务器日志文件安全设定,而参数i更为严格,不准许对文件进行任何操作,即使是Root用户。
在Linux系统中,倘若一个用户以Root的权限登录或某个进程以Root的权限运行,那样它的运用权限就再也不有任何的限制了。因此呢,攻击者经过远程或本地攻击手段得到了系统的Root权限将是一个劫难。在这种状况下,文件系统将是守护系统安全的最后一道防线,恰当的属性设置能够最大限度地减小攻击者对系统的破坏程度,经过chattr命令锁定系统有些重要的文件或目录,是守护文件系统安全最直接、最有效的手段。
对有些重要的目录和文件能够加上“i”属性,平常的文件和目录如下所示:
root@kali:~/chattr-R+i/bin/boot/lib/sbin
root@kali:~/chattr-R+I/usr/bin/usr/include/usr/lib/usr/sbin
root@kali:~/chattr+i/etc/passwd
root@kali:~/chattr+i/etc/shadow
root@kali:~/chattr+i/etc/hosts
root@kali:~/chattr+i/etc/resolv.conf
root@kali:~/chattr+i/etc/fstab
root@kaii:~/chattr+i/etc/sudoers
对有些重要的日志文件能够加上“a”属性,如下所示:
root@kali:~/chattr+a/var/log/messages
root@kali:~/chattr+a/var/log/wtmp
对重要的文件进行加锁,虽然能够加强服务器的安全性,然则亦会带来有些不方便。例如,在软件的安装、升级时可能需要去掉相关目录和文件的immutable属性和append-only属性,同期,对日志文件设置了append-only属性,可能会使日志轮换(logrotate)没法进行。因此呢,在运用chattr命令前,需要结合服务器的应用环境来权衡是不是需要设置immutable属性和append-only属性。
另一,虽然经过chattr命令修改文件属性能够加强文件系统的安全性,然则它并不适合所有的目录。chattr命令不可守护/、/dev、/tmp、/var等目录。
根目录不可有不可修改属性,由于倘若根目录拥有不可修改属性,那样系统基本没法工作:/dev在起步时,syslog需要删除并重新创立/dev/log套接字设备,倘若设置了不可修改属性,那样可能出问题;/tmp目录会有非常多应用程序和系统程序需要在这个目录下创立临时文件,亦不可设置不可修改属性;/var 是系统和程序的日志目录,倘若设置为不可修改属性,那样系统写日志将没法进行,因此亦不可经过chattr命令守护。
2. 文件权限检测和修改
系统中倘若有不正确的权限设置,可能会危及全部系统的安全,下面列举查询系统不安全权限的办法。
(1)查询系统中任何用户都有写权限的文件或目录,查询文件,如下所示:
root@kali:~# find/-type f-perm-2-o-perm-20 | xargs ls-al
查询目录,如下所示:
root@kali:~# find/-type d-perm-2-o-perm-20 |xargs ls-ld
(2)查询系统中所有含“s”位的程序。
find/-type f-perm-4000-o-perm-2000-print | xargs ls –al
含有“s”位权限的程序对系统安全威胁很大,经过查询系统中所有拥有“s”位权限的程序,能够把某些不必要的“s”位程序去掉,这般能够防止用户乱用权限或提高权限的可能性。
(3)检测系统中所有suid及sgid文件。
find/-user root-perm-2000-print-exec md5sum {} \;
find/-user root-perm-4000-print-exec md5sum {} \;
将检测的结果保留到文件中,可在以后的系统检测中做为参考。
(4)检测系统中无属主的文件
find/-nouser-o –nogroup
无属主的孤儿文件比较危险,常常作为黑客利用的工具,因此呢,找到这些文件后,要么删除掉,要么修改文件的属主,使其处在安全状态。
iptables配置
iptables是用来设置、守护和检测Linux内核的IP分组过滤规则的。做为Linux下的一款防火墙,它的功能非常强大,它有3个表,每一个表内有规则链。
(1)filter 是默认的表,包括了内建的链 INPUT(处理进入的分组)、FORWARD(处理经过的分组)和OUTPUT(处理本地生成的分组)。
(2)nat表被查找时暗示遇到了产生新的连接的分组,由3个内建的链形成:PREROUTING(修改到来的分组)、OUTPUT(修改路由之前本地的分组)、POSTROUTING(修改准备出去的分组)。
(3)mangle表用来对指定的分组进行修改。它有2个内建规则:PREROUTING(修改路由之前进入的分组)和OUTPUT(修改路由之前本地的分组)。下面简单介绍iptables的常用配置。
1. 查看iptables规则
查看当前的iptables策略,运用iptables-L命令,默认查看的是filter表的内容,如下:
root@kali:~# iptables-L
Chain INPUT(policy ACCEPT)
target prot opt source destination
f2b-sshd tcp – anywhere anywhere multiport dports ssh
Chain FORWARD(policy ACCEPT)
target prot opt source destination
Chain OUTPUT(policy ACCEPT)
target prot opt source destination
Chain f2b-sshd(1 references)
target prot opt source destination
RETURNall-anywhere anywhere
2. 设置chain策略
针对filter表,默认的chain策略为ACCEPT,能够经过以下命令修改chain的策略:
root@kali:~# iptables-P INPUT DROP
root@kali:~# iptables-P FORWARD DROP
root@kali:~# iptbales-P OUTPUT DROP
以上命令配置将接收、转发和发出分组均丢弃,施行比较严格的分组管理。因为接收和发分组均被设置为丢弃,当进一步配置其他规则的时候,需要重视针对 INPUT和OUTPUT分别配置。当然,倘若信任本设备往外发分组,上面第3条规则可不必配置。
3. 清空已有规则
能够用以下规则来清空已有的规则:
root@kali:~# iptables-F
4. 网口转发规则
针对用作防火墙或网关的服务器,一个网口连接到公网,其他网口的分组转发到该网口实现内网向公网通信,假设eth0连接内网,eth1连接公网,配置规则如下:
root@kali:~# iptables-A FORWARD-i eth0-o eth1-j ACCEPT
5. 端口转发规则
命令将888端口的分组转发到22端口,因而经过888端口亦可进行SSH连接:
root@kali:~# iptables-t nat-A PREROUTING-p tcp-d 192.168.1.1 –dport 888-j DNAT--to 192.168.1.1:22
6. DoS攻击防范
利用扩展模块limit,还能够配置iptables规则,实现DoS攻击防范,如下所示:
root@kali:~# iptables-A INPUT-p tcp –dport 80-m limit –limit 25/minute--limit-burst 100-j ACCEPT
--litmit 25/minute 指示每分钟限制最大连接数为25。
--litmit-burst 100 指示当总连接数超过100时,起步litmit/minute限制。
常用安全策略
Linux操作系统下有如下常用的安全策略:
秘码长度、session超时时间、删除不消的账号和组,限制Root用户直接Telnet或rlogin、SSHD登录。
检测是不是存在除Root之外UID为0的用户,保证Root用户的系统路径中不包括父目录,在非必要的状况下,不该包括组权限为777的目录。
检测操作系统Linux用户umask设置,检测重要目录和文件的权限,禁止除Root之外的用户su操作,查询系统中任何人都有写权限的目录。 查询系统中无属主的文件,查询系统中的隐匿文件,判断日志与审计是不是合规,登录超时设置,禁用不必要的服务。
|