Linux系统安全运维(含find的使用)

  1. 账号安全
  • 可删除的账号
    adm,lp,sync,shutdown,halt,news,uucp,operator,games,gopher等
  • 可删除的组
    adm,lp,news,uucp,games,dip,pppusers,popusers,slipusers等
userdel -r games
groupdel games
  • 禁止用户的登陆功能
usermod -s /sbin/nologin nagios
  1. 系统必须运行的服务
服务名称 服务内容
acpid 用于电源管理,对于笔记本电脑和台式电脑很重要,建议开启
apmd 高级电源能源管理服务,可以监控电池性能
kudzu 检测硬件是否变化的服务,建议开启
crond Linux计划任务服务,建议开启
atd 定时服务,建议开启
keytables 用于装载镜像键盘,可以选择启动
iptables 防火墙管理客户端,建议启动
xinetd 支持多种网络服务的托管程序,建议开启
xfs 使用X Window桌面的系统必须安装
network 网络服务,必须开启
sshd ssh的守护进程,必须开启
syslog 日志服务,建议开启
  1. sudo的使用
    配置文件/etc/sudoers
    配置命令visudo
user01 ALL = /bin/more /etc/shadow
命令的使用
[user01@node1 ~]$ sudo more /etc/shadow

user01输入完密码后即可获得一张默认存活期为5分钟的“入场券”。
设置让普通用户无需输入密码

certern ALL=NOPASSWD: /etc/init.d/nagios restart
user02 ALL=(ALL) NOPASSWD: ALL
  1. 删除banner

涉及文件

  • /etc/issue
    记录操作系统的名称和版本号,用户通过本地终端/控制台登陆时显示其内容。
  • /etc/issue.net
    记录操作系统的名称和版本号,用户通过ssh/telnet远程登陆时显示其内容。默认ssh登陆后不显示,要显示需要配置/etc/ssh/sshd_config:
Banner /etc/issue.net
  • /etc/redhat-release
    记录操作系统的名称和版本号(发行版)
  • /etc/motd
    系统的公告信息。每次用户登陆后,其内容就会显示在用户终端。通过该文件管理员可以发布一些信息。sshd的配置文件中PrintMotd yes可以控制显示/etc/motd中的内容。
  1. 禁止Ctrl + Alt + Del组合键
    该组合键默认会迫使系统重启。
    CentOS5.x系统修改/etc/inittab即可:
注释
ca::ctrlaltdel:/sbin/shutdown -t3 -r -now
然后执行
telinit q

CentOS6.x系统修改/etc/init/control-alt-delete.conf

注释
exec /sbin/shutdown -r now "Control-Alt-Delete pressed"

CentOS7.x系统有所不同

cat /etc/inittab
回显
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#
然而
$ ll /usr/lib/systemd/system/ctrl-alt-del.target
lrwxrwxrwx. 1 root root 13 Jul  6 17:33 /usr/lib/systemd/system/ctrl-alt-del.target -> reboot.target
软链接!

删除软链接ctrl-alt-del.target

rm /usr/lib/systemd/system/ctrl-alt-del.target
init q   #重新加载配置文件
  1. 调整history
    vim /etc/bashrc
HISTFILESIZE=4000  #.bash_history保存的命令数
HISTSIZE=4000   #history命令输出的记录数
HISTTIMEFORMAT='[%F %T] '  #为命令加上执行时间
export HISTTIMEFORMAT
  1. 加入简易操作审计功能(可用于排障)
    功能:
    将每个用户的shell命令执行历史以文件形式保存在/usr/share/.history/(可以定义得再隐蔽些)目录中。每个用户一个文件夹,并且文件夹下的每个文件以IP地址加shell命令操作时间的格式命名。
    实现:
    vim + /etc/profile,并加入
#history
USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`
HISTDIR=/usr/share/.history
if [ -z $USER_IP ]; then
        USER_IP=`hostname`
fi
if [ ! -d $HISTDIR ]; then
        mkdir -p $HISTDIR
        chmod 777 $HISTDIR
fi
if [ ! -d $HISTDIR/${LOGNAME} ]; then
        mkdir -p $HISTDIR/${LOGNAME}
        chmod 300 $HISTDIR/${LOGNAME}
fi
export HISTSIZE=4000
DT=`date +%Y%m%d_%H%M%S`
export HISTFILE="$HISTDIR/${LOGNAME}/${USER_IP}.history.$DT"
chmod 600 $HISTDIR/${LOGNAME}/*.history* 2>/dev/null

输出文件中每条命令前是#开头的时间戳:

#1563456636
history 
#1563456648
vim /etc/bashrc 

可以如下处理:

cat 192.168.30.1.history.20190718_220636 | sed "s/#\([0-9]\+\)/date -d @\1 '+[%Y-%m-%d %H:%M:%S]:'/e"

注意:在/etc/profile中设置环境变量

export TIME_STYLE='+%Y/%m/%d %H:%M:%S'

只能修改ls命令的输出日期格式。

  1. tcp_wrappers
    检查是否已经安装
[root@node0 ~]# rpm -qa tcp_wrappers
tcp_wrappers-7.6-77.el7.x86_64
或者
[root@node0 ~]# rpm -qa | grep tcp_
tcp_wrappers-libs-7.6-77.el7.x86_64
tcp_wrappers-7.6-77.el7.x86_64

应用服务一般通过引用libwrappered库文件启用tcp_wrappers功能。

[root@node0 ~]# ldd /sbin/sshd | grep libwrap
        libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fe9b4506000)

tcp_wrappers的配置
配置文件
/etc/hosts.allow
/etc/hosts.deny
配置格式:
service:hosts [:action]
~ service 服务名,如sshd,vsftpd等
~ hosts 主机名或IP。可多个。
~ action 动作
关键字:
~ ALL 所有服务或所有IP
~ ALL EXCEPT 从所有服务或IP中排除
配置使用 man HOSTS_ACCESS

  1. 设置文件属性
    命令:
    chattr 须由root执行
    命令常用参数
参数 含义
+ 在原有参数配置的基础上,追加参数
- 在原有参数配置的基础上,移除参数
= 修改为指定参数
a append,设定该参数后,只能向文件中添加数据,而不能删除。常用于保障日志文件的安全。只有root用户才可设置该属性。
c compress,设定文件是否经压缩后再存贮。读取时需要经过自动解压操作
i immutable,设定文件不能被修改,删除,重命名,设定链接等,同时不能写入或新增内容。root用户也不可修改文件。
s 安全地删除文件或目录,即文件删除后完全回收磁盘空间。
u 与s参数相反,系统会保留其数据块以便以后能恢复删除的文件。

lsattr 常用命令参数

参数 含义
-a 列出目录中的所有文件,包括点开头的隐藏文件
-d 显示指定目录的属性
-R 以递归的方式列出目录下所有文件及子目录及其属性
-v 显示文件和目录版本

对于一些重要的目录和文件可以加上“i”锁。常见的有如下情况:

chattr -R +i /bin /boot /lib /sbin
chattr -R +i /usr/bin /usr/include /usr/lib /usr/sbin
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/hosts
chattr +i /etc/resolv.conf
chattr +i /etc/fstab
chattr +i /etc/sudoers
chattr +a /var/log/messages
chattr +a /var/log/wtmp
  1. 查找文件属性及权限并修改
  • find的常见基本用法
查找当前目录下的可执行文件
find . -type f -executable
其他类似参数
-readable:文件可读。 
-writable:文件可写。

查找当前目录下u为 “指定权限(精确匹配)” 的文件或目录
find . -perm 700 -ls
等价命令
find . -perm u=rwx -ls

查找当前目录下 “包含读 ‘和’ 写” 权限的文件
find . -type f -perm -600 | xargs ls -l

查找当前目录下 “包含读 ‘或’ 写” 权限的文件
find . -type f -perm /600 | xargs ls -l

对于特殊权限,查找当前目录下包含SUID的文件
find . -perm -4000 | xargs ls -l

按文件名进行查找
-name filename:查找文件名为filename的文件。注意如果filename中包括*等特殊符号的时候,需要加引号。 
-iname:-name的忽略大小写版本。 
-lname filename:查找符号连接文件名为filename的文件。 
-ilname:lname的忽略大小写版本。 

在/目录下查找路径以/u开头并且以SS结尾的文件
find / -path "/u*SS"
-ipath:path的忽略大小写版本

其他查找参数:
-regex pattern:用正则表达式匹配文件名。 
-iregex:regex的忽略大小写版本。 
-empty:文件为空而且是一个普通文件或者目录。 
-size n[cwbkMG]:指定文件长度查找文件。单位选择位: 
1 . c:字节单位。 
2 . b:块为单位,块大小为512字节,这个是默认单位。 
3 . w:以words为单位,words表示两个字节。 
4 . k:以1024字节为单位。 
5 . M:以1048576字节为单位。 
6 . G:以1073741824字节为单位。
n的数字指定也可以使用 + - 号作为前缀,表示找到小于(-)指定长度的文件或者大于(+)指定长度的文件。

-type c:以文件类型查找文件: 
c可以选择的类型为: 
1 . b:块设备。 
2 . c:字符设备。 
3 . d:目录。 
4 . p:命名管道。 
5 . f:普通文件。 
6 . l:符号连接。 
7 . s:socket。

根据用户、组查找
-uid n:文件的所属用户uid为n。 
-user name:文件的所属用户为name。 
-gid n:文件的所属组gid为n。 
-group name:所属组为name的文件。 
-nogroup:没有所属组的文件。 
-nouser:没有所属用户的文件。

查找/var下一周内访问过的无属主无属组的文件,并列出
find /var -type f -atime -7 \( -nouser -o -nogroup \) -ls

按照时间进行查找
-amin:以分钟为单位通过文件的最后存取时间(access time)查找文件。 
-cmin:以分钟为单位通过文件的状态修改时间(change time)查找文件。 
-mmin:以分钟为单位通过文件的数据修改时间(modify time)查找文件。 
-atime:以天为单位通过文件的最后存取时间(access time)查找文件。 
-ctime:以天为单位通过文件的状态修改时间(change time)查找文件。 
-mtime:以天为单位通过文件的数据修改时间(change time)查找文件。 
-newer:查找比当前文件数据修改时间更加新一点的另外的文件。 
-anewer:查找比当前文件的最后存取时间更加新一点的另外的文件。 
-cnewer:查找比当前文件的状态时间更加新一点的另外的文件。 

+n:表示大于n。 
-n:表示小于n。 
n:表示等于n。

想找到文件修改时间比/etc/passwd文件的change time更新的文件
find /etc/ -newermc /etc/passwd
“-newerXY”用法,如:
-newermc就是拿待比较文件的modify time时间跟参数指定文件的change time进行比较。X和Y可以使用的字母为: 
a:文件access time。 
c:文件change time。 
m:文件modify time。

组合条件
-a 与
-o 或
-not 非
! 非

动作
-print:默认的处理动作,显示至屏幕;
-ls:类似于对查找到的文件执行“ls -l”命令
-delete:删除查找到的文件;
-flsfile:查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令;对于每个文件执行命令之前,都会交互式要求用户确认。
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令。{}: 占位符,用于引用查找到的文件名。用 “| xargs cmd” 代替效率更高。

删除当前目录下大小为零的文件
find . -size 0 -exec rm {} \; 不带确认
find . -size 0 -ok rm {} \; 带确认

-exec的\和+
对每个找到的文件执行一次命令
(因为有多条命令,所以要用;分割。\又对;转义)
$ find . -maxdepth 1 -type f -name "zero*" -exec echo {} \;    
./zero2
./zero1
./zero3
对所有找到的文件统一执行一次命令
$ find . -maxdepth 1 -type f -name "zero*" -exec echo {} +
./zero2 ./zero1 ./zero3
  • 利用find完成文件安全性处理
查找系统中任何用户都有写权限的文件或目录
文件
find / -type f -perm -2 -o -perm -20 | xargs ls -la
目录
find / -type d -perm -2 -o -perm -20 | xargs ls -ld

查找系统中所有设置了SUID/SGID的程序
find / -type f -perm -4000 -o -perm -2000 | xargs ls -la
find / -type f -perm /6000 | xargs ls -l
find / -user root -perm -2000 -print -exec md5sum {} \;
find / -user root -perm -4000 -print -exec md5sum {} \;

搜索没有属主及属组的文件
find / -nouser -o -nogroup -ls
  1. /tmp,/var/tmp,/dev/shm的安全

Linux中的临时目录主要是/tmp和/var/tmp。
上述目录的特点是所有用户可读写,可执行。但临时目录修改权限会引起系统及应用程序出错。
/dev/shm是共享内存设备。Linux启动时系统默认加载/dev/shm,被加载的/dev/shm使用的是tmpfs文件系统。存储在tmpfs上的数据会完全驻留内存。这样通过/dev/shm就可以直接操纵系统内存。

  • /tmp的安全加固

/tmp是独立分区:
修改/etc/fstab中/tmp分区的挂载属性为:nosuid,noexec,nodev

LABEL=/tmp /tmp ext3 rw,nosuid,noexec,nodev 0 0

注意:/boot也可以独立分区,大小取200M即可。

/tmp是分区下的目录:

dd if=/dev/zero of=/dev/tmpfs bs=1M count=10000
mke2fs -j /dev/tmpfs
cp -av /tmp /tmp.old
mount -o loop,noexec,nosuid,rw /dev/tmpfs /tmp
chmod 1777 /tmp
mv -f /tmp.old/* /tmp/
rm -rf /tmp.old

再编辑/etc/fstab,添加如下内容

/dev/tmpfs /tmp ext3 loop,nosuid,noexec,rw 0 0
  • /var/tmp的安全加固

对于/var/tmp,如果是独立分区,处理方法同/tmp。如果是目录可将/var/tmp目录下所有数据移动到/tmp分区下,然后制作/var/tmp到/tmp的软链接即可。

mv /var/tmp/* /tmp
ln -s /tmp /var/tmp
  • /dev/shm的安全加固

默认情况下,/dev/shm通过defaults选项来加载,需要修改挂载属性

tmpfs /dev/shm tmpfs defaults,nosuid,noexec,rw 0 0
  1. 系统软件安全管理
    主要是及时更新软件包。
    yum下载的软件包默认存放在/var/cache/yum目录下。
    常用命令
安装软件包
yum install dhcp
删除软件包
yum remove licq
检查可更新的RPM包
yum check-update
更新
yum update
yum upgrade  陈旧的包也会升级
更新内核
yum update kernel kernel-source
列出资源库中所有可安装或更新的RPM包信息
yum info
列出资源库中指定软件包信息
yum info vsftpd
yum info perl*
列出资源库中所有可更新包信息
yum info updates
列出已安装的所有RPM包信息
yum info installed
列出包含在extras资源库中RPM包的信息
yum info extras
列出资源库中可更新的包信息
yum list updates
列出资源库中的软件包
yum list gcc*
在资源库中搜索包
yum search wget
搜索包含特定文件名的RPM包
yum provides realplay
清除缓存的RPM包
yum clean packages
清除缓存的RPM头文件
yum clean headers
清除RPM包文件和头文件
yum clean
或
yum clean all

常用的YUM源

EPEL
https://fedoraproject.org/wiki/EPEL/zh-cn

RPMForge
http://repoforge.org
http://pkgs.repoforge.org/rpmforge-release
  1. 后门入侵检测工具

rootkit是LInux下最常见的木马后门工具。她可以通过替换系统文件来达到入侵和隐藏的目的。

  • 文件级别rootkit
    同行容易被rootkit替换的文件有:login,ls,ps,ifconfig,du,find,netstat等。
    一般可使用Tripwire,aide等工具定期文件系统的完整性,来判断系统是否已被rootkit入侵。
  • 内核级别的rootkit
    目前没有有效防御手段。
  • rootkit后门检测工具chkrootkit
    http://www.chkrootkit.org/
yum install -y gcc gcc-c++ make
tar xzvf chkrootkit.tar.gz
cd chkrootkit-*
make sense
cd ..
cp -r chkrootkit-* /usr/local/chkrootkit
rm -rf chkrootkit-*
显示chkrootkit详细用法
/usr/local/chkrootkit/chkrootkit -h
检测系统
/usr/local/chkrootkit/chkrootkit

chkrootkit命令参数

参数 含义
-l 显示测试内容
-d debug模式,显示检测过程中的相关命令
-q 只显示有问题的内容
-x 显示所有检测结果
-r 指定检测的根目录
-p dir1:dir2:dirN 检测时使用的系统命令目录
-n 跳过NFS连接的目录

被rootkit入侵的系统,最安全有效的方式是备份数据并重新安装系统。
当然需要备份rootkit使用到的系统命令:

mkdir /usr/share/.commands
cp `which --skip-alias awk cut echo find egrep id head ls netstat ps strings sed uname` /usr/share/.commands
/user/local/chkrootkit/chkrootkit -p /usr/share/.commands/
cd /usr/share/
tar czvf commands.tar.gz .commands
  • rootkit后门检测工具RKHunter
    RKHunter官网http://www.rootkit.nl/projects/rootkit_hunter.html
    安装
tar xzvf rkhunter-1.4.0.tar.gz
cd rkhunter-1.4.0
./installer.sh --layout default --install
安装将rkhunter命令安装到/usr/local/bin

使用

/usr/local/bin/rkhunter-help 获得帮助
开始检测
/usr/local/bin/rkhunter -c
关注Warning标识的地方和红色标注。

命令参数

参数 含义
-c, --check 必选,检测当前系统
–configfile file 使用特定的配置文件
–cronjob 作为cron任务定期运行
–sk, --skip-keypress 自动完成所有检测,跳过键盘输入
–summary 显示检测结果的统计信息
–update 检测更新内容
-V, --version 显示版本
–versioncheck 检测最新版本

可以在/etc/crontab中加入如下内容:

0 9 3 * * * root /usr/local/bin/rkhunter -c --cronjob

你可能感兴趣的:(运维及自动化,Linux,安全)