LINUX安全与监控 6天 LINUX安全 3天 LINUX监控 3天 +++++++++++++++++++++++++ 什么安全? 保护维护的服务器不受到攻击和破坏
攻击和破坏手段? 技术性 非技术性 : 指定规章制度和工作流程
技术性的攻击: 本地安全:
网络安全:防火墙 (软件防火墙 firewalld iptables ) RHEL7 RHEL6
(硬件防火墙 独立的物理设备)
sshd服务的配置 *(密钥对认证登录)
数据安全:数据在网络中传输会受到哪些攻击? 劫获 篡改 数字签名(不可否认性) 加密
LINUX安全day01 本地安全: 1 用户管理: 相关的命令及命令选项 useradd -u -g -G -s 用户名 useradd -s /sbin/nologin jim (用户作为进程的执行者)
#useradd tom
echo 123456 | passwd --stdin tom
usermod -L -U -u -g -G -s 用户名 userdel -r 用户名 passwd -S -l -u 用户名 chage -l -d -E 用户名 #chage -l tom #chage -d 0 tom
chage -E 2018/01/31 jim
id 用户名 #id jim
相关的配置文件 /etc/passwd #grep tom /etc/passwd
/etc/shadow #grep tom /etc/shadow
/etc/login.defs
grep -v '^#' /etc/login.defs
#ls /etc/skel/ -a //用户系统环境模板文件 +++++++++++++++++++++++++++++++++++++++ 隐藏内核和操作系统信息。(修改文件内容) 本地登录 [root@host50 ~]# cat /etc/issue \S Kernel \r on an \m [root@host50 ~]#
网络连接 [root@host50 ~]# cat /etc/issue.net \S Kernel \r on an \m [root@host50 ~]# ++++++++++++++++++++++++++++++++ 文件系统安全: 修改记录历史命令的条目数量 默认1000 [root@host50 ~]# grep -n 1000 /etc/profile 45:HISTSIZE=1000 [root@host50 ~]# [root@host50 ~]# sed -i '45s/1000/500/' /etc/profile [root@host50 ~]# grep -n 500 /etc/profile 45:HISTSIZE=500 [root@host50 ~]# echo $HISTSIZE 1000 [root@host50 ~]# source /etc/profile [root@host50 ~]# echo $HISTSIZE 500 [root@host50 ~]# ls ~/.bash_history /root/.bash_history [root@host50 ~]# vim ~/.bash_history
记录历史命令执行的时间 HISTTIMEFORMAT #HISTTIMEFORMAT='%F %T ' [root@host50 ~]# history
#vim /etc/profile .... export HISTTIMEFORMAT='%F %T ' :wq
程序和服务控制(把不需要的服务设置不开启动) rhel7: systemctl disable 服务名 systemctl disable firewalld
rhel6: chkconfig 服务名 off
ntsysv
ls /etc/init.d/ 存放脚本文件
#chmod o-x /etc/init.d/* 撤销其他服务对脚本的执行权限
文件系统及挂载: 安装操作体系时,你的分区规划是怎么样的? / 根分区 没有单独分配存储空间的数据,都存放在根下(必须的) /home 建议单独分区 (LV) /var 建议单独分区 (LV) PV VG LV
/boot 引导分区 存放的是系统启动时的引导文件(可选) swap 交换分区 从物理磁盘划分出来 (可选)
格式化的文件系统类型: ext2/3/4 xfs /proc
挂载方式: 命令行挂载 mount -t 文件系统类型 选项 分区名 目录名 开机自动挂载 /etc/fstab defaults默认挂载 触发挂载 autofs服务
defaults默认挂载 包括哪些挂载项? #man mount 搜索defaults defaults Use default options: rw, suid, dev, exec, auto, nouser, and async.
suid 允许在挂载目录下执行suid 和sgid权限的文件
exec 允许在挂载目录下执行二进制文件
fdisk /dev/vdb fdisk -l /dev/vdb blkid /dev/vdb1 mkfs.ext4 /dev/vdb1 blkid /dev/vdb1 mkdir /disk1 mount -t ext4 /dev/vdb1 /disk1 cp /usr/sbin/useradd /disk1 chmod o+x /disk1/useradd chmod u+s /disk1/useradd
nosuid 不允许在挂载目录下执行suid 和sgid权限的文件
noexec 不允许在挂载目录下执行二进制文件
#cd / #umount /disk1 #mount -t ext4 -o nosuid,noexec /dev/vdb1 /disk1 ++++++++++++++++++++++++ 给文件加特殊属性(加锁 解锁)系统文件配置文件 服务配置文件 i 对文件没有移动 编辑 删除的权限 a 只能以追加的访问编辑文件 查看 lsattr 文件名 添加 chattr +属性 文件名 删除 chattr -属性 文件名 +++++++++++++++++++++++++++++++++++++++++ 用户切换 普通用户 ---------- > root 要输入对方的密码 普通用户 <----------- root 不输入对方密码 普通用户 <-----------> 普通用户 要输入对方的密码
#su //切换的root用户 #su - 用户 //既切换到用户的身份 ,又切换的用户的环境 #su 用户 //只切换到用户的身份 ,不会切换的用户的环境
#su - -c "命令" 用户 //切换到用户身份后执行命令 [jim@host50 ~]$ su - -c "touch /root/a.txt" root
++++++++++++++++++++++++++++++++++++++++++ 用户提权: 系统root用户让系统的普通用户可以执行自己可以使用的命令。 useradd webadmin ----> httpd useradd dbadmin ----> mysqld
echo 123456 | passwd --stdin webadmin echo 123456 | passwd --stdin dbadmin
/etc/sudoers 提权配置文件
用户名 主机名列表=命令列表 // 给单个用户提权 %用户组 主机名列表=命令列表 //给用户组用提权
*命令列表中的命令,必须要写命令的绝对路径 #which 命令名 #which systemctl
#vim /etc/sudoers
#webadmin localhost, host50=/usr/bin/systemctl * httpd, /usr/bin/vim /etc/httpd/conf/httpd.conf, NOPASSWD: ALL
mike localhost,host50=/sbin/*, !/sbin/ifconfig eth0 :wq!
%webgrp localhost, host50=/usr/bin/systemctl * httpd, /usr/bin/vim /etc/httpd/conf/httpd.conf
#useradd mike
#echo 123456 | passwd --stdin mike
#groupadd webgrp
#useradd webadmin2
#echo 123456 | passwd --stdin webadmin2
#usermod -G webgrp webadmin
#usermod -G webgrp webadmin2
提权时使用别名(别名名称必须使用大写字母表示)
定义用户别名
User_Alias 别名名称 = 用户名列表
User_Alias HTTPUSERS = webamdin, webadmin2
定义主机别名
Host_Alias 别名名称 = 主机名列表
Host_Alias MYPC=localhost, host50
定义命令别名 Cmnd_Alias 别名名称 = 命令列表 Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
+++++++++++++++++++++++ 使用别名提权 用户别名名称 主机别名=命令别名名称
HTTPUSERS MYPC=SOFTWARE,/usr/bin/systemctl * httpd, /usr/bin/vim /etc/httpd/conf/httpd.conf +++++++++++++++++++++++++++++++ 启用日志记录提权用户执行过命令 vim /etc/sudoers Defaults logfile="/var/log/sudo" :wq
#cat /var/log/sudo (提权用户执行过提权命令,系统自动创建此文件)
++++++++++++++++++++++++++
普通用测试提权?
查看可以使用的提权命令: sudo -l
执行提权命令: sudo 提权命令
++++++++++++++++++++++++++++++++++++++++++ ssh服务访问控制:
- 服务启动后, 默认允许所有客户端访问, 默认登录认证方式:密码认证登录。 [root@host50 ~]#systemctl sshd start [root@host50 ~]# netstat -utnalp | grep sshd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1412/sshd
设置服务运行的参数
vim /etc/ssh/sshd_config
Port 22022 ListenAddress 192.168.4.50
配置白名单 : 只有在白名单列表里的用户才可以访问 AllowUsers 用户名1 用户名2@客户端地址 AllowGroups 用户组名1 用户组名2
vim /etc/ssh/sshd_config AllowUsers jerry root@192.168.4.254
配置黑名单 : 只有在黑名单列表里的用户不可以访问 DenyUsers 用户名1 用户名2@客户端地址 DenyGroups 用户组名1 用户组名2
vim /etc/ssh/sshd_config DenyUsers bob
++++++++++++++++++++++++++++++++ 配置ssh服务仅允许密钥对认证登录 公钥 加密 私钥 解密
client 254: 1 创建密钥对: ls ~/.ssh/ [root@room9pc17 ~]#rm -rf ~/.ssh [root@room9pc17 ~]#ssh-keygen // 创建密钥对 [root@room9pc17 ~]# ls ~/.ssh/ id_rsa id_rsa.pub
ssh server 50 #rm -rf ~/.ssh
client 254: 把公钥上传给ssh服务器
ssh-copy-id root@192.168.4.50 //上传密钥对
ssh server 50 [root@host50 ~]# ls ~/.ssh authorized_keys
ssh server 50 禁用密码认证登录 vim /etc/ssh/sshd_config 81 PasswordAuthentication no //禁用密码认证登录 :wq #systemctl restart sshd
client 254: 测试秘钥对认证登录 #ssh root@192.168.4.50 //不用输入密码直接连接 #ssh jim@192.168.4.50 //不允许连接
++++++++++++++++++++++++++++++++ 在客户端连接ssh服务器 ssh 用户名@ssh_ip //默认连接目标服务器的22端口 ssh -X -p 端口号 用户名@ssh_ip //连接目标服务器指定端口号 -X 可以显示图形界面
++++++++++++++++++++++++++++++++++++++++++ 编写脚本 /root/autoadduser.sh 功能:批量添加系统用户,具体要求如下: 执行脚本时 可以自定义添加用户的个数 若没有指定个数的话默认只添加 1个 用户。 用户密码和用户名相同,强制用户首次登陆系统必须修改登录密码。用户添加后,在用户家目录下自动创建readme.txt文件。添加用户时若用户在系统内已经存在 给出提示信息: (jim 已经存在)。