一、
用户账号安全优化
1.删除不使用的账号,禁用暂时不使用的账号
passwd用户文件存放目录 gshadow用户密码存放目录 通过修改etc下的passwd以及gshadow可以达到目的
禁用暂时不使用的账号时修改etc/gshadow 将所要禁用的用户密码之前插入两个叹号即可锁定用户从而达到禁用用户的效果
linux中用户不设置密码会被默认锁定的
删除不使用的账号一般情况下普通用户直接删除账户即可
删除程序用户在图形界面下用userdel也可删除
2.检查用户的登陆shell是否异常
在/etc/passwd 中可以查看
普通用户登陆shell为/bin/bash
不允许登陆的用户shell为/sbin/nologin
一些程序的默认登陆shell为/sbin/nologin
3.强制用户定期修改密码
修改etc/login.defs文件中的时间设值
PASS_MIN_DAYS 密码最短有效期
PASS_MAX_DAYS 密码最长有效期
PASS_WARN_DAYS 密码更换前提醒天数
修改etc/default/useradd文件
INACTIVE 密码有效天数
EXPIRE 账号过期日期
chage命令修改用户密码的过期等信息
chage -m(密码最短有效期) -M(最长有效期) -w(修改密码警告天数) +用户名
chage -I(密码有效天数) -E(账号过期日期) +用户名
4.减少记录命令历史的条数 HISTSIZE
查看命令历史set |grep HI 运用管道查找命令历史的各项设置
查找后可直接修改
修改etc/profile 文件也可更改对于history的优化
所有执行过的命令历史都存放在.bash-history
5.set |grep PS 运用管道查看环境变量 ?????环境变量
6.在~/.bashrc 中定义的是别名 alias
alias 别名=“实际执行的命令”
unalias +别名 取消别名
unalias -a 取消所有别名
7.设置在命令行界面中超时自动注销防止在操作人员离开的情况下有人偷取信息
在etc/profile文件中添加一行 TMOUT=300
也可直接修改 set |grep TMOUT=300
修改自动注销时间为300秒
8.用户切换命令:su 切换新的用户身份
su - 用户名 - 是-l即--login的缩写 表示运用一个新的登陆shell并切换用户
加- 切换用户后会将当前工作目录切换至用户的主目录下
不加- 只切换用户不切换当前工作目录即登陆shell
普通用户默认情况下可以使用su来切换用户但是需要输入密码
etc/pam.d/su 规定用户的权限设置
将文件/etc/pam.d/中第六行前的#号去掉使其生效,只有加入到wheel组的用户可以使用su进行切换普通用户将不能使用su来进行用户切换从而提高系统安全性
9.sudo提升执行权限(sudo机制)
sudo -u 用户名 操作命令 root一某些用户的身份执行命令
sudo 加命令 未指定用户的默认为root用户
修改文件/etc/sudoers或者直接运行visudo,授权用户可以通过sudo在那些主机上执行哪些命令
普通用户登陆模式下默认是不可以用root身份来执行任何操作的
退出时需输入wq!或q!强制退出
在souders中修改文件的基本格式:
用户 主机列表 = 命令程序列表
被授权用户 允许那些主机使用 允许执行那些命令
可执行命令直接指定如/bin/bash 不可执行在命令前加!如!/sbin/ifconfig
sudo -l 产看允许执行的命令列表
sudo -k 清楚sudo的时间戳再次使用sudo是需要输入密码
%managers 表示组为组授权组名前加%组内成员具有组的权限与用户的格式一致
用户 主机名=NOPASSWD:命令列表
表示在执行这些命令式不需输入密码
为sudo配置项定义别名
User-Alias 用户别名
Host-Alias 主机别名
Cmnd-Alias 命令别名
与sudo机制结合灵活应用
10.bash 脚本 (shell 编程)
bash 是linux中默认的shell
用途:完成特定的较复杂的系统简单任务
格式:集中保存多条命令是一种普通文本文件
创建脚本:第一行#!/bin/bash
想要使脚本可执行要使用chmod进行提权
chmod ugoa +-= rwx/s/t 目标文件或文件夹
脚本想要自动执行的话要把脚本放在用户的$PATH下就可自动执行了
执行脚本:直接执行./repboot.sh
使用指定的解释器执行脚本内容bash aa.sh或sh aa.sh等
通过source命令或 点 读取脚本内容执行例如:source aa.sh或
. hello.sh
简单脚本例
示例1:
每周五17:30清理FTP服务器的公共共享目录
检查 /var/ftp/pub/ 目录,将其中所有子目录及文件的详细列表、当时的时间信息追加保存到 /var/log/pubdir.log 日志文件中,然后清空该目录[root@localhost ~]# vi /opt/ftpclean.sh
#!/bin/bash
date >> /var/log/pubdir.log
ls -lhR /var/ftp/pub >> /var/log/pubdir.log
rm -rf /var/ftp/pub/*
脚本写完后需用chmod提权
chmod 755 /opt/ftpclean.sh
按要求还需做计划任务
[root@localhost ~]# crontab -e
30 17 * * 5 /opt/ftpclean.sh
??shell变量、命令替换
A=apple
调用 $A
当调用多个变量时用逗号隔开时用小括号用空格隔开时用大括号如${ A B C }、$(A,B,C)??
引用和转义
弱引用“”保留特殊字符的扩展
强引用‘’禁用特殊字符的扩展
转义 \
调用结果 · ·(表示直接调用反引号之内命令的结果)
读取输入和位置参数
???read -p “” 参数 表示输入某个参数
变量名 含义
$# 表示位置参数的数量
$* 表示所有位置参数的内容
$? 表示命令执行后返回的状态,用于检查上一个命令的执行是否正确;在Linux中,命令退出状态为0表示命令正确执行,任何非0值表示命令执行错误
$$ 表示当前进程的进程号
$! 表示后台运行的最后一个进程号
$0 表示当前执行的进程名
$1 表示引用第一个位置参数
相对较复杂的脚本例:
示例2:
每隔3天对数据库目录做一次完整备份
统计 /var/lib/mysql 目录占用的空间大小、查看当前的日期,并记录到临时文件 /tmp/dbinfo.txt 中
将 /tmp/dbinfo.txt 文件、/var/lib/mysql 目录进行压缩归档,备份到/opt/dbbak/目录中
备份后的包文件名中要包含当天的日期信息
最后删除临时文件/tmp/dbinfo.txt
[root@localhost ~]# vi /opt/dbbak.sh
#!/bin/bash
DAY=`date +%Y%m%d`
SIZE=`du -sh /var/lib/mysql`
echo "Date: $DAY" >> /tmp/dbinfo.txt
echo "Data Size: $Size" >> /tmp/dbinfo.txt
cd /opt/dbbak
tar zcvf mysqlbak-${DAY}.tar.gz /var/lib/mysql /tmp/dbinfo.txt
rm -f /tmp/dbinfo.txt
对脚本进行提权chmod
计划任务
[root@localhost ~]# crontab -e
55 23 */3 * * /opt/dbbak.sh
du -hT 统计侧畔使用情况
du -sh 统计文件的大小
ls -lhR 查看***长格式、单位(M G KB)统计、递归查看
date 显示时间 date +%F 只显示日期
(date +%Y-m% -%d)只显示时间
/dev/null 黑洞
/dev/zero 清 0文件
???&> 将不需要的文件重定向到某地