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检测硬件是否变化的服务,建议开启
crondLinux计划任务服务,建议开启
atd定时服务,建议开启
keytables用于装载镜像键盘,可以选择启动
iptables防火墙管理客户端,建议启动
xinetd支持多种网络服务的托管程序,建议开启
xfs使用X Window桌面的系统必须安装
network网络服务,必须开启
sshdssh的守护进程,必须开启
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执行
    命令常用参数
参数含义
+在原有参数配置的基础上,追加参数
-在原有参数配置的基础上,移除参数
=修改为指定参数
aappend,设定该参数后,只能向文件中添加数据,而不能删除。常用于保障日志文件的安全。只有root用户才可设置该属性。
ccompress,设定文件是否经压缩后再存贮。读取时需要经过自动解压操作
iimmutable,设定文件不能被修改,删除,重命名,设定链接等,同时不能写入或新增内容。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显示测试内容
-ddebug模式,显示检测过程中的相关命令
-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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值