linux基本防护措施,权限分配和提高防护安全
设置用户失效
1、失效的用户将无法登录
使用chage命令将用户zhangsan的账户设为当前已失效(比如已经过去的某个时间):
- [root@proxy ~]# useradd zhangsan
- [root@proxy ~]# chage -E 2015-05-15 zhangsan #设置账户过期时间
尝试以用户zhangsan重新登录,输入正确的用户名、密码后直接闪退,返回登录页,说明此帐号已失效。
2、重设用户zhangsan的属性,将失效时间设为2019-12-31
- [root@proxy ~]# chage -E 2019-12-31 zhangsan //修改失效日期
- [root@proxy ~]# chage -l zhangsan //查看账户年龄信息
3、定义默认有效期(扩展知识)
/etc/login.defs这个配置文件,决定了账户密码的默认有效期。
- [root@proxy ~]# cat /etc/login.defs
- PASS_MAX_DAYS 99999 //密码最长有效期
- PASS_MIN_DAYS 0 //密码最短有效期
- PASS_MIN_LEN 5 //密码最短长度
- PASS_WARN_AGE 7 //密码过期前几天提示警告信息
- UID_MIN 1000 //UID最小值
- UID_MAX 60000 //UID最大值
临时锁定用户zhangsan的账户,使其无法登录,验证效果后解除锁定
1)锁定用户账号
使用passwd或usermod命令将用户zhangsan的账户锁定。
- [root@proxy ~]# passwd -l zhangsan //锁定用户账号lock
- 锁定用户 zhangsan 的密码。
- passwd: 操作成功
- [root@proxy ~]# passwd -S zhangsan //查看状态status
- zhangsan LK 2018-02-22 0 99999 7 -1 (密码已被锁定。)
2)验证用户zhangsan已无法登录,说明锁定生效
输入正确的用户名、密码,始终提示“Login incorrect”,无法登录。
3)解除对用户zhangsan的锁定
- [root@proxy ~]# passwd -u zhangsan //解锁用户账号
- 解锁用户 zhangsan 的密码 。
- passwd: 操作成功
- [root@proxy ~]# passwd -S zhangsan //查看状态
- zhangsan PS 2018-08-14 0 99999 7 -1 (密码已设置,使用 SHA512 加密。)
锁定文件/etc/resolv.conf、/etc/hosts
1)语法格式:
- # chattr +i 文件名 //锁定文件(无法修改、删除等)
- # chattr -i 文件名 //解锁文件
- # chattr +a 文件名 //锁定后文件仅可追加
- # chattr -a 文件名 //解锁文件
- # lsattr 文件名 //查看文件特殊属性
2) 使用+i锁定文件,使用lsattr查看属性
- [root@proxy ~]# chattr +i /etc/resolv.conf
- [root@proxy ~]# lsattr /etc/resolv.conf
- ----i---------- /etc/resolv.conf
3)使用+a锁定文件(仅可追加),使用lsattr查看属性
- [root@proxy ~]# chattr +a /etc/hosts
- [root@proxy ~]# lsattr /etc/hosts
- -----a---------- /etc/hosts
4)测试文件锁定效果
- [root@proxy ~]# rm -rf /etc/resolv.conf
- rm: 无法删除"/etc/resolv.conf": 不允许的操作
- [root@proxy ~]# echo xyz > /etc/resolv.conf
- -bash: resolv.conf: 权限不够
- [root@proxy ~]# rm -rf /etc/hosts //失败
- [root@proxy ~]# echo "192.168.4.1 xyz" > /etc/hosts //失败
- [root@proxy ~]# echo "192.168.4.1 xyz" >> /etc/hosts //成功
5)恢复这两个文件原有的属性
- [root@proxy ~]# chattr -i /etc/resolv.conf
- [root@proxy ~]# chattr -i /etc/hosts
- [root@proxy ~]# lsattr /etc/resolv.conf /etc/hosts
- --------------- /etc/resolv.conf
- --------------- /etc/hosts
使用sudo分配管理权限
允许softadm用户管理系统服务的权限
1)修改/etc/sudoers配置
修改/etc/sudoers可以直接使用vim编辑该文件,或使用visudo命令修改该文件。
为softadm授予相关脚本的执行权限,允许通过systemctl工具来管理系统服务。
如果没有softadm账户可以先创建该账户。
- [root@proxy ~]# vim /etc/sudoers //修改文件后,需要使用wq强制保存
- .. ..
- softadm ALL=(ALL) /usr/bin/systemctl
- //授权softadm以root身份执行systemctl命令
2)切换为softadm用户,并验证sudo执行权限
- [root@proxy ~]# su - softadm
- [softadm@proxy ~]$ sudo -l
- … …
- [sudo] password for softadm: //输入softadm的口令
- .. ..
- 用户 softadm 可以在该主机上运行以下命令:
- (ALL) /usr/bin/systemctl
- [softadm@proxy ~]$ systemctl start httpd //不用sudo时启动服务失败
- Authentication is required
- .. ..
- [softadm@proxy ~]$ sudo systemctl restart httpd //通过sudo启动服务成功
允许用户useradm通过sudo方式添加/删除/修改除root以外的用户账号
1)修改/etc/sudoers配置
为useradm授予用户管理相关命令的执行权限,例外程序以!符号取反,放在后面。在执行相关程序时,可以利用通配符*。
- [root@proxy ~]# vim /etc/sudoers
- .. ..
- useradm ALL=(ALL) /usr/bin/passwd,!/usr/bin/passwd root,/usr/sbin/user*,
- !/usr/sbin/user* * root
2)切换为useradm用户,验证sudo权限
可以通过sudo方式来添加/删除/修改普通用户:
- [useradm@proxy ~]$ sudo -l
- .. ..
- 用户useradm可以在该主机上运行以下命令:
- (root) /usr/bin/passwd, !/usr/bin/passwd root, /usr/sbin/user*,
- !/usr/sbin/user* * root
- [useradm@proxy ~]$ sudo useradd newuser01 //可以添加用户
- [useradm@proxy ~]$ sudo passwd newuser01 //可以修改普通用户的口令
- 更改用户 newuser01 的密码 。
- 新的 密码:
- 重新输入新的 密码:
- passwd: 所有的身份验证令牌已经成功更新。
但是不能修改root用户的密码:
- [useradm@proxy ~]$ sudo passwd root
- 对不起,用户 useradm 无权以 root 的身份在 localhost 上
- 执行 /usr/bin/passwd root。
允许wheel组成员以特权执行/bin/下的所有命令
此案例用来展示sudo的便利性及设置不当带来的危险性,生产环境下慎用。
实现时参考下列操作(如果没有普通用户则先创建该账户):
- [root@proxy ~]# vim /etc/sudoers
- .. ..
- %wheel ALL=(ALL) /bin/*
- [root@proxy ~]# usermod -a -G wheel zengye
- [zengye@proxy ~]$ sudo -l
- .. ..
- 用户 zengye 可以在该主机上运行以下命令:
- (root) /bin/*
为sudo机制启用日志记录,以便跟踪sudo执行操作
1)修改/etc/sudoers配置,添加日志设置
- [root@proxy ~]# visudo
- Defaults logfile="/var/log/sudo"
- .. ..
2)以root(默认有所有权限)执行sudo操作
- [root@proxy ~]# sudo -l //查看授权的sudo操作
- [softadm@proxy ~]# sudo systemctl status httpd //查看授权的sudo操作
3)确认日志记录已生效
- [root@proxy ~]# tail /var/log/sudo
- .. ..
- May 16 22:14:49 : root : TTY=pts/1 ; PWD=/root ; USER=root ; COMMAND=list
- Feb 22 22:35:43 : softadm : TTY=pts/11 ; PWD=/home/softadm ; USER=root ;
- COMMAND=/bin/systemctl status httpd
提高ssh服务安全
配置基本安全策略
1)调整sshd服务配置,并重载服务
- [root@proxy ~]# vim /etc/ssh/sshd_config
- .. ..
- Protocol 2 //去掉SSH协议V1
- PermitRootLogin no //禁止root用户登录
- PermitEmptyPasswords no //禁止密码为空的用户登录
- UseDNS no //不解析客户机地址
- LoginGraceTime 1m //登录限时
- MaxAuthTries 3 //每连接最多认证次数
- .. ..
- [root@proxy ~]# systemctl restart sshd
2)测试基本安全策略
尝试以root用户SSH登录,失败:
- [root@proxy ~]# ssh root@192.168.4.5
- root@192.168.4.5's password:
- Permission denied, please try again.
将服务器上用户kate(如无该账户则先创建)的密码设为空,尝试SSH登录,也会失败:
- [root@proxy ~]# passwd -d kate //清空用户口令
- 清除用户的密码 kate。
- passwd: 操作成功
- [root@proxy ~]# ssh kate@192.168.4.5
- kate@192.168.4.5's password:
- Permission denied, please try again.
针对SSH访问采用仅允许的策略,未明确列出的用户一概拒绝登录
1)调整sshd服务配置,添加AllowUsers策略,仅允许用户zengye、john、useradm,其中useradm只能从网段192.168.4.0/24登录。
注意:如果没有这些用户,需要提前创建用户并设置密码。
- [root@proxy ~]# vim /etc/ssh/sshd_config
- .. ..
- AllowUsers zengye john useradm@192.168.4.0/24 //定义账户白名单
- ##DenyUsers USER1 USER2 //定义账户黑名单
- ##DenyGroups GROUP1 GROUP2 //定义组黑名单
- ##AllowGroups GROUP1 GROUP2 //定义组白名单
- [root@proxy ~]# systemctl restart sshd
2)验证SSH访问控制,未授权的用户将拒绝登录。
- [root@proxy ~]# ssh useradm@192.168.4.5 //已授权的用户允许登录
- useradm@192.168.4.5's password:
- [useradm@proxy ~]$ exit
- [root@proxy ~]# ssh zhangsan@192.168.4.5 //未授权的用户被拒绝登录
- zhangsan@192.168.4.5's password:
- Permission denied, please try again.
实现密钥对验证登录(私钥口令)、免密码登入
1)准备客户机测试环境
为客户机的用户root建立SSH密钥对
使用ssh-keygen创建密钥对,将私钥口令设为空(直接回车):
- [root@client ~]$ ssh-keygen -t rsa
- Generating public/private rsa key pair.
- Enter file in which to save the key (/root/.ssh/id_rsa):
- Created directory '/root/.ssh'.
- Enter passphrase (empty for no passphrase): //直接回车将口令设为空
- Enter same passphrase again: //再次回车确认
- Your identification has been saved in /root/.ssh/id_rsa.
- Your public key has been saved in /root/.ssh/id_rsa.pub.
- The key fingerprint is:
- 63:6e:cf:45:f0:56:e2:89:6f:62:64:5a:5e:fd:68:d2
- The key's randomart image is:
- +--[ RSA 2048]----+
- | |
- | |
- | . . . |
- | = = |
- | S = B . |
- | o B = . o |
- | + + = E .|
- | . + + o |
- | o |
- +-----------------+
- [root@client ~]$ ls -lh ~/.ssh/id_rsa* //确认密钥对文件
- -rw-------. 1 root root 1.8K 8月 15 10:35 /root/.ssh/id_rsa
- -rw-r--r--. 1 root root 403 8月 15 10:35 /root/.ssh/id_rsa.pub
2)将客户机上用户root的公钥部署到SSH服务器
以用户root登入客户机,使用ssh-copy-id命令将自己的公钥部署到服务器:
- [root@client ~]$ ssh-copy-id root@192.168.4.5
- root@192.168.4.5's password:
- Now try logging into the machine, with "ssh 'root@192.168.4.5'", and check in:
- .ssh/authorized_keys
- to make sure we haven't added extra keys that you weren't expecting.
3)在服务器上确认客户机用户root上传的公钥信息
默认部署位置为目标用户的家目录下 ~/.ssh/authorized_keys文件:
- [root@proxy ~]# tail -2 ~/.ssh/authorized_keys
- ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzz+5AiFMGQ7LfuiV7eBnOcmRO9JRTcqRoynGO2y5
- RyFL+LxR1IpEbkNrUyIZDk5uaX1Y8rwsf+pa7UZ2NyqmUEvNSUo0hQyDGsU9SPyAdzRCCvDgwpOFhaHi/OFnT+zqjAqXH2M9fFYEVUU4PIVL8HT19zCQRVZ/q3acQA34UsQUR0PpLJAobsf1BLe2EDM8BsSHckDGsNoDT9vk+u3e83RaehBMuy1cVEN5sLAaIrIeyM8Q0WxQNlqknL908HRkTlTeKrRoHbMnOBFj8StwlnscKHlkrsKkhUf8A9WWz/vL4GDwGND5jdca3I2hdITAySjMdfL1HMHnMYOgMjPM0Q== root@192.168.4.100
4)在客户机上测试SSH密钥对验证
在客户机用户root的环境中,以远程用户root登入192.168.4.5主机时,无需验证口令即可登入(因为私钥口令为空):
- [root@client ~]$ ssh root@192.168.4.5 //免交互直接登入
- Last login: Thu Aug 15 10:48:09 2013 from 192.168.4.100
步骤四:确认密钥验证使用正常后,禁用口令验证
1)调整sshd服务配置,将PasswordAuthentication设为no
- [root@proxy ~]# vim /etc/ssh/sshd_config
- .. ..
- PasswordAuthentication no //将此行yes改成no
- [root@proxy ~]# systemctl restart sshd
SELinux
将Linux服务器的SELinux设为enforcing强制模式
1)固定配置:修改/etc/selinux/config文件
确认或修改SELINUX为enforcing模式:
- [root@proxy ~]# vim /etc/selinux/config
- SELINUX=enforcing //设置SELinux为强制模式
- SELINUXTYPE=targeted //保护策略为保护主要的网络服务安全
2)临时配置:使用setenforce命令
查看当前SELinux状态,如果是disabled则需要根据第1)步的配置重启系统;如果是permissive则使用setenforce命令修改为enforcing即可:
- [root@proxy ~]# getenforce //查看当前状态为警告模式
- Permissive
- [root@proxy ~]# setenforce 1 //设置SELinux为强制模式
- [root@proxy ~]# getenforce //查看当前模式为强制模式
- Enforcing
- [root@proxy ~]# setenforce 0 //设置SELinux为强制模式
- [root@proxy ~]# getenforce //查看当前模式为警告模式
- Permissive
linux基本防护措施,权限分配和提高防护安全的更多相关文章
- Linux用户及权限分配
一.用户分类 所有者 u; 所属组 g; 其它用户 o; 所有用户 a; 二.用户管理 //查看用户 id user //添加用户 useradd user //设置密码 passwd user // ...
- Security基础(一):Linux基本防护措施、使用sudo分配管理权限、提高SSH服务安全
一.Linux基本防护措施 目标: 本案例要求练习Linux系统的基本防护措施,完成以下任务: 修改用户zhangsan的账号属性,设置为2015-12-31日失效(禁止登录) 锁定用户lisi的账户 ...
- linux 用户创建、管理、权限分配
(1)su与sudo su:通过su可以在用户之间切换,如果超级权限用户root向普通或虚拟用户切换不需要密码,什么是权力?这就是!而普通用户切换到其它任何用户都需要密码验证: sudo: sudo扮 ...
- Linux 服务器用户权限管理改造方案与实施项目
Linux 服务器用户权限管理改造方案与实施项目 在了解公司业务流程后,提出权限整改方案改进公司超级权限root泛滥的现状. 我首先撰写方案后,给boss看,取得boss的支持后,召集大家开会讨论. ...
- mysql 5.7中的用户权限分配相关解读!
这篇文章主要介绍了MySQL中基本的用户和权限管理方法,包括各个权限所能操作的事务以及操作权限的一些常用命令语句,是MySQL入门学习中的基础知识,需要的朋友可以参考下 一.简介 各大帖子及文章都会讲 ...
- 简单的Linux的用户权限管理
企业生产环境用户权限集中管理方案案例 建立中要添加如下的项目经验: 在了解公司业务流程后,提出权限整改解决方案,改进公司超级用户Root权限泛滥的问题. 我首先写好方案后,给老大看,取得老大的支持后, ...
- linux:ACL权限
ACL权限是为了防止权限不够用的情况,一般的权限有所有者.所属组.其他人这三种,当这三种满足不了我们的需求的时候就可以使用ACL权限: 比如:一个网络老师,给一个班的学员上课,他在linux的根目录下 ...
- 【转】Centos系统文件与用户权限分配详解ftp,nginx,php
linux系统中权限是非常完善的一个功能了,我们如果设置不正确文件就无法使用了,像我们以一般情况需要把文件权限设置为777或644了,对于用户权 限就更加了,像素ftp,nginx,php这些我们都可 ...
- Linux 文件属性及权限_007
Linux一切皆文件: Llinux系统的文件或目录的属性主要包括:索引节点.文件类型.文件权限.链接数.所属的用户和用户组.最近修改时间等. Llinux文件属性及权限图形说明: Linux文件属性 ...
随机推荐
- jmeter接口测试-使用rsa加密解密算法
本篇介绍jmeter 使用rsa算法进行加密参数 如果测试过程中,部分接口采用了rsa加密算法,我们的jmeter 也是可以直接拿来调用的,不需要开发配合去掉加密代码! 直接上代码 import or ...
- 可嵌入的脚本引擎 Jx9
Jx9是一个可嵌入的脚本引擎,基于JSON实现了图灵完备(Turing complete)的编程语言. Jx9 是那些需要流行和高效率脚本支持应用程序(比如:游戏.数据库系统,文本编辑器,网络应用程序 ...
- ValueError: Expecting property name: line 1 column 2 (char 1)
代码: import json str2 = '{"domain":"456"}' str1 = "{'domain':'123'}" pr ...
- BZOJ 2095 [Poi2010]Bridges (二分+最大流判断混合图的欧拉回路)
题面 nnn个点,mmm条双向边(正向与反向权值不同),求经过最大边权最小的欧拉回路的权值 分析 见 commonc大佬博客 精髓就是通过最大流调整无向边的方向使得所有点的入度等于出度 CODE #i ...
- stl常数测试
如图: 数组的常数约为9.
- 006_FreeRTOS其他API函数
(一)FreeRTOS其他API函数是在调试中使用的,具体使用的看书本,贴出来为了方便查找 (二)FreeRTOS其他API函数 (三)常用 1. uxTaskGetSystemState() 获取信 ...
- VSCode 插件和快捷键(MAC)
1. 插件 1. JSON 格式优化--- JSON Tools 快捷键: 1). 格式化json字符串 Mac: Cmd+Option+M win: Ctrl+Alt+M 2).压缩json Ma ...
- WSDL的学习
1.WSDL是什么? 2.wsdl说明书结构 拿到说明书,从下往上看, 图2-1 port:为端点 binding:绑定 图2-2 type属性----->找到portType标签 operat ...
- 51Nod 1701 最后的机会
1701 最后的机会 给定一字符串S,S非空,由小写字母组成,设v为S中元音字母的个数,c为辅音字母的个数."a", "e", "i", & ...
- Fltiss项目的架构、包名的定义和类的划分
这是项目的一览 首先Web根目录. 除了WEB-INF以外,还有css,img,js,lib目录,这四者都是静态资源. 由于客户端无法访问WEB-INF下的内容,所以将它们放置在了Web根目录下. 而 ...