SECURITY:Linux基本防护,用户提权,SSH,selinux

用户账号安全

设置账号有效期

  • 使用chage工具
    – -d 0 , 强制修改密码
    – -E yyyy-mm-dd , 指定失效日期(-1)取消
    chage命令的语法格式:
    chage –l 账户名称 //查看账户信息
    chage –E 时间 账户名称 //修改账户有效期
  • 失效的用户将无法登录
    使用chage命令将用户zhangsan的账户设为当前已失效(比如已经过去的某个时间):
useradd zhangsan
chage -E 2019-12-31 zhangsan
chage -l zhangsan 
Last password change       : May 15, 2017
Password expires           : never
Password inactive          : never
Account expires            : Dec 31, 2019
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires         : 7
  • 定义默认有效期(扩展知识)
    /etc/login.defs这个配置文件,决定了账户密码的默认有效期。
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最大值

账号的锁定/解锁

  • 使用passwd命令
    – -l锁定、-u 解锁、-S看状态
  • 锁定用户账号
    使用passwd或usermod命令将用户zhangsan的账户锁定
passwd -l zhangsan      #锁定用户账号lock
锁定用户 zhangsan 的密码。
passwd: 操作成功
 passwd -S zhangsan     #查看状态status
zhangsan LK 2018-02-22 0 99999 7 -1 (密码已被锁定。)
  • 解除对用户zhangsan的锁定
passwd -u zhangsan      #解锁用户账号
解锁用户 zhangsan 的密码 。
passwd: 操作成功
passwd -S zhangsan      #查看状态
zhangsan PS 2018-08-14 0 99999 7 -1 (密码已设置,使用 SHA512 加密。)

伪装登录提示

  • 配置文件/etc/issue、/etc/issue.net
    – 分贝使用于本地、远程登录
    – 默认会提示内核、系统等版本信息
 cat /etc/issue     #确认原始文件
Red Hat Enterprise Linux Server release 6.5 (Santiago)
Kernel \r on an \m

cp /etc/issue /etc/issue.origin    #备份文件

vim /etc/issue      #修改文件内容
Windows Server 2012 Enterprise R2
NT 6.2 Hybrid

测试版本伪装效果
在这里插入图片描述

文件系统安全

  • 禁用非必要的系统服务
    – 使用systemctl、chkconfig工具

锁定/解锁保护文件

  • 语法格式:
命令说明
chattr +i 文件名锁定文件(无法修改、删除等)
chattr -i 文件名解锁文件
chattr +a 文件名锁定后文件仅可追加
chattr -a 文件名解锁文件
lsattr 文件名查看文件特殊属性
  • 使用+i锁定文件,使用lsattr查看属性
chattr +i /etc/resolv.conf 
lsattr /etc/resolv.conf 
----i---------- /etc/resolv.conf
  • 使用+a锁定文件(仅可追加),使用lsattr查看属性
chattr +a /etc/hosts
lsattr /etc/hosts
-----a---------- /etc/hosts
  • 测试文件锁定效果
rm -rf /etc/resolv.conf
rm: 无法删除"/etc/resolv.conf": 不允许的操作
echo xyz > /etc/resolv.conf
-bash: resolv.conf: 权限不够

rm -rf  /etc/hosts      #失败
echo "192.168.4.1  xyz" > /etc/hosts   #失败
echo "192.168.4.1  xyz" >> /etc/hosts  #成功

用户切换与提权

su切换用户身份

  • 格式如下:
    su - [账户名称]
    su - [账户名称] -c '命令'
  • 从普通用户切换为root账户身份(如果没有普通账户则需要先创建)
[zhangsan@proxy ~]$ whoami
zhangsan
su -      #切换账户,默认切换为root账户
密码:     #输入root的密码
[root@proxy ~]# whoami          #确认结果
root
  • 以普通身份创建文件(如果没有普通账户则需要先创建),以root身份重启服务
su - zhangsan  -c "touch /tmp/test.txt"    #管理员切换普通用户
ll  /tmp/test.txt

 su - -c "systemctl restart sshd"    #以管理员重启服务
密码:
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
active: active (running) since 五 2018-01-19 08:59:40 CST; 1 months 4 days ago
  • 安全日志/var/log/secure
    – 记录su验证、shell开启与关闭
  • 日志/var/log/sudo
    –专门看提权使用情况(后面将如何开启)

sudo提升执行权限

概述

  • Super or another Do , 超级执行
    – 管理员预先为用户设置执行许可
    – 被授权用户有权执行授权的命令,验证自己的口令
  • 执行提权命令
    – 用法:sudo 提权命令
  • 查看提权命令
    – 用法:sudo -l

配置sudo提权

  • 修改方法:
    – visudo
    – vim /etc/sudoers
  • 授权记录格式:
    – 用户 主机列表=命令列表
    grep ^root /etc/sudoers
    root ALL=(ALL) ALL 括号里的省略时代表root
    第一个ALL:指定的是用户所在的主机
    第二个ALL:指定以什么用户身份执行sudo,即使用sudo后可以享有所有账号下的权限。如果要排除个别用户,可以在括号内设置,比如ALL=(ALL,!root,!ops)
    第三个ALL:L指定的是执行的命令,可以执行所有的命令
  • 案例
vim /etc/sudoers
mike    localhost,zaclient1=/sbin/*,!/sbin/ifconfig eth1 
#用户mike可以在本机使用/sbin/下面所有的命令,除了不能使用ifconfig eth1
softadm ALL=/usr/bin/vim /etc/my.cnf,/usr/bin/systemctl * mariadb,/usr/bin/rpm,/usr/bin/yum
#用户softadm可以在任意主机使用vim 编辑/etc/my.cnf , 可以systemctl命令控制mariadb , 可以使用rpm,yum命令
  • whell组
    wheel组默认是使用的,权限太大,生产环境下慎用
vim /etc/sudoers
%wheel        ALL=(ALL)       NOPASSWD: ALL

分析sudo提权的使用情况

为sudo机制启用日志记录,以便跟踪sudo执行操作

  • 修改全局配置,启用日志
vim /etc/sudoers
Defaults  logfile="/var/log/sudo" #添加

SSH访问控制

SSH防护概述

  • 存在的安全隐患
    – 密码嗅探、键盘记录
    – 暴力枚举账号、猜解密码
  • 常见的防护措施
    – 用户限制、黑白名单
    – 更改验证方式(密码–>密钥对)
    – 防火墙…

配置基本安全策略

  • 调整sshd服务配置,并重载服务
vim /etc/ssh/sshd_config
.. ..
Protocol 2          #SSH协议
PermitRootLogin no  #禁止root用户登录
PermitEmptyPasswords no     #禁止密码为空的用户登录
UseDNS  no          #不解析客户机地址
LoginGraceTime  1m  #登录限时
MaxAuthTries  3     #每连接最多认证次数
.. ..
systemctl restart sshd
  • 测试基本安全策略
    尝试以root用户SSH登录,失败:
ssh root@192.168.4.5
root@192.168.4.5's password:
Permission denied, please try again.

将服务器上用户kate(如无该账户则先创建)的密码设为空,尝试SSH登录,也会失败:

passwd -d kate    #清空用户口令
清除用户的密码 kate。
passwd: 操作成功

ssh kate@192.168.4.5
kate@192.168.4.5's password:
Permission denied, please try again.

sshd黑白名单配置

  • 配置文件/etc/ssh/sshd_config
vim /etc/ssh/sshd_config
.. ..
AllowUsers zhangsan tom useradm@192.168.4.0/24    #定义账户白名单
##DenyUsers  USER1  USER2     //定义账户黑名单
##DenyGroups  GROUP1 GROUP2   //定义组黑名单
##AllowGroups  GROUP1 GROUP2  //定义组白名单
systemctl restart sshd

验证SSH访问控制,未授权的用户将拒绝登录。

ssh useradm@192.168.4.5    #已授权的用户允许登录
useradm@192.168.4.5's password:
exit
ssh root@192.168.4.5       #未授权的用户被拒绝登录
root@192.168.4.5's password:
Permission denied, please try again.

SSH密钥对验证

  • 口令验证
    – 检查登录用户的口令是否一致
  • 密钥验证
    – 检查客户端私钥与服务器上的公钥是否匹配

创建SSH密钥对

  • 使用工具ssh-keygen
    – 可以手动指定加密算法(-t rsa 或 -t dsa)
    – 若不指定,默认采用RSA加密
  • 交互式:
ssh-keygen
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      |
+-----------------+
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

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.

非交互式:

ssh-keygen -f /root/.ssh/id_rsa -N ''

SELinux安全防护

什么是SELinux

  • Security-Enhanced Linux
    – 一套强化Linux安全的扩展模块
    – 美国国家安全局主导开发
  • SELinux的运作机制
    – 集成到Linux内核(2.6及以上)
    – 操作系统提供可制定的策略、管理工具

红帽的SELinux策略集

  • SELINUXTYPE=targeted
    – 推荐,仅保护最常见/关键的网络服务,其他不限制
    – 主要软件包:
    selinux-policy、selinux-policy-targeted、libselinux-utils、
    coreutils、policycoreutils
]$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31
vim /etc/selinux/config
SELINUX=enforcing     #设置SELinux为强制模式
SELINUXTYPE=targeted  #保护策略为保护主要的网络服务安全

从disabled变enforcing或permissive,需要该配置文件,之后再在/root/,touch /.autorelabel,再重启系统即可.

  • 临时调整
    使用setenforce 0|1
    0:代表宽松模式
    1:代表强制模式
    getenforce #看当前状态

SELinux策略设置

安全上下文

  • Security Context,安全上下文
    – 为文件/目录/设备标记访问控制属性
  • 属性构成
    – 用户:角色:访问类型:选型
ls -Z /bin/ls
-rwxr-xr-x. root root system_u:object_r:bin_t:s0       /bin/ls

修改安全上下文

  • 使用chcon工具
    – -t,指定访问类型
    – -R,递归修改
    – --reference=参看文档 操作文档
chcon -t public_content_t /var/ftp/d2.tar.gz
restorecon /var/ftp/log2.tar.gz
chcon --reference=/var/ftp/log1.tar.gz /var/ftp/log2.tar.gz
  • 一般操作规律
    – 移动的文件,原有的上下文属性不变
    – 复制的文件,自动继承目标位置的上下文

重置安全上下文

  • 使用restorecon工具
    – 恢复为所在位置的默认上下文属性
    restorecon /var/ftp/log2.tar.gz
    – -R.递归修改
  • /.autorelabel文件
    – 下次重启后全部重置

调整SELinux布尔值

  • 使用getsebool查看
    – -a ,列出所有布尔值
  • 使用setsebool设置
    – -P,永久更改,重启后任然有效

案例

实现在selinux开启时,ftp能上传和新建目录功能

  • 配置一个允许匿名上传的vsftpd服务作为测试环境
setenforce 1
yum -y install vsftpd
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES     #开启匿名访问
anon_upload_enable=YES   #允许上传文件
anon_mkdir_write_enable=YES  #允许上传目录

systemctl start vsftpd
#默认Vsftpd共享目录为/var/ftp/
  • 从/root目录下移动2个包文件到FTP下载目录,调整文件的安全上下文
    由root用户创建两个测试压缩包,一个直接建立到/var/ftp/目录下,另一个先在/root/下建立,然后移动至/var/ftp/目录。
//测试文件1,直接在ftp目录下创建文件
tar -czf  /var/ftp/log1.tar  /var/log
ls -Z /var/ftp/log1.tar
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 log1.tar

//测试文件2,在/root下建立,然后移动至/var/ftp目录
tar -czf  log2.tar  /var/log
mv log2.tar /var/ftp/
ls -Z /var/ftp/log2.tar
-rw-r--r--. 1 root root unconfined_u:object_r:admin_home_t:s0 log2.tar
  • 通过FTP方式测试下载
    使用wget命令分别下载这两个包文件,第二个包将会下载失败(看不到文件)
wget ftp://192.168.4.5/log1.tar   #下载第一个文件,成功
wget ftp://192.168.4.5/log2.tar   #下载第二个文件,失败

使用ftp工具

yum -y install ftp
ftp 192.168.2.100
Connected to 192.168.2.100 (192.168.2.100).
220 (vsFTPd 3.0.2)
Name (192.168.2.100:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>ls  #显示
ftp>get 文件名  #下载文件
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值