如何在 Linux 为系统用户设置密码复杂度策略

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在 Linux 为系统用户设置密码复杂度策略相关的知识,希望对你有一定的参考价值。

参考技术A md5.....存到文本,自己记下来
然后用密钥登录,密码这种东西太容易破了

系统安全概述

系统安全概述

主要简单介绍Linux,Windows,Android以及软件系统的安全,了解常见的系统安全常识,会进行简单的安全配置,对各类的系统安全有一个了解。

Linux 系统安全概述

Linux操作系统诞生于1991年,它是UNIX的一种典型的克隆系统。它是一个基于POSIX和UNIX的多用户,多任务,支持多线程和多CPU的操作系统,同时Linux也继承了UNIX以网络为核心的设计思想,也是一个性能稳定的多用户网络操作系统。

开源,开放,免费是Linux的魅力所在。Linux还具有良好的可移植性,Linux编译后可以在大量处理器和具有不同体系结构约束和需求的平台上运行。经过20年的发展,Linux操作系统成为在服务器,嵌入式系统和个人计算机等多个方面得到广泛应用的操作系统。

内核简介

内核指的是一个提供硬件抽象层,磁盘文件及文件系统控制,多任务等功能的系统软件。一个内核并不似一个完整的操作系统。一套基于Linux内核的完整操作系统叫做Linux操作系统,或者是GNU/Linux。设备驱动程序可以完全访问硬件。Linux内的设备驱动可以方便的以模块化的形式设置,并在系统运行期间直接装载或卸载。

Linux是一个一体化内核系统。

Linux内核编号方式为: 主版本号.次版本号.修订版本号

常用内核命令
查看内核信息:uname -a
查看已加载模块:lsmod
加载内核模块:insmod filename
删除内核模块:rmmod filename

OpenSSH安全配置

OpenSSH是SSH协议的免费开源实现。SSH协议族可以用来进行远程控制,或在计算机之间传文件。而实现该功能的传统方式,如Telnet(终端仿真协议),rcpftp,rsh都是极不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输中的数据,并由此来替代原来的类似服务。OpenSSH是使用SSH透过计算机网络加密通讯的实现。

Linux中的SSH服务可以通过/etc/ssh/sshd_config文件进行配置

常用配置命令

  • 禁止root用户登录:

    #Authentication:
    LoginGraceTime 120
    PermitRootLogin no
    StrictModes yes

  • 限制SSH验证次数:

    MaxAuthTries 6

  • 禁止证书登录

    PubkeyAuthenticationno

  • 使用证书认证代替密码认证

    PasswordAuthenticationno

  • 禁止使用客户端的密码记忆功能

    ChallengeResponseAuthentication yes

  • 禁止SSH端口映射

    AllowTcpForwarding no

  • IP地址限制

    可以通过对/etc/host.allow修改来设置允许登录的IP地址
    sshd:<IP地址> <IP地址>
    通过修改/etc/hosts.deny来设置禁止访问的IP地址
    sshd:<IPd地址>

Shell安全

Shell(壳层)在计算机科学中是指“提供用户使用界面”的软件,通常指的是命令行界面的解释器。一般来说,Shell是指操作系统中,提供访问内核所提供的服务的程序。

常用配置命令

  • 记录系统管理员的操作记录

    (1)以root用户登录,在/etc/profile.d/下新建保存命令的文件history_command文件
    (2)编辑history_command文件
    export HISFILE=$HOME/.bash_history
    export HISTSIZE=1200
    export HISTFILESIZE=1200
    export HISTCONTROL=ignoredups
    export HISTTIMEFORMAT=“‘whoami’%F %T”
    shopt -s histappend
    typeset -r HISTTIMEFORMAT

权限管理和控制

  • 查看文件的详细信息

    ls -l

  • 改变文件所属用户和组

    chown <要授予的权限>

  • 修改文件的权限

    chmod <要授予的权限>

iptables(防火墙)配置

iptables是用来设置,维护和检查Linux内核的IP分组过滤规则的,它功能强大,主要分为三个表,每个表内有对应的规则链:

  1. filter是默认表,包含了内建的链INPUT(处理进入的分组),FORWARD(处理转发的分组)和OUTPUT(处理本地生成的分组)

  2. nat表被查询时表明遇到了产生新的连接的分组,由三个内建的链构成。PREROUTING(修改到来的分组),OUTPUT(修改路由之前本地的分组),POSTROUTING(修改准备出去的分组)

  3. mangle表用来对指定的分组进行修改。由两个内建规则。PREROUTING(修改路由之前进入的分组),OUTPUT(修改路由之前本地的分组)

常用配置命令

  • 查看iptables规则

    iptables -L

  • 设置chain策略

    iptables -P INPUT DROP

  • 清空全部规则

    iptables -F

  • 网口转发规则

    iptables -A FORWARD -i eth1 -j ACCEPT

  • 端口转发规则

    iptables -t nat -A PREROUTING -p tcp -d <本地IP地址> -dport <要转发的端口> -j DNAT --to <目的地址IP:端口号>

常用安全策略

Linux操作系统下有如下常用安全策略:

密码长度,session超时时间,删除不用的账号和组,限制Root用户直接Telnet或者rlogin,sshd登录

检查是否存在除root之外UID为0的用户,确保root用户的系统路径中不包含父目录

查找系统中没有属主的文件,查找系统中的隐藏文件,判断日志与审计是否合规,登录超时设置,禁用不必要的服务

Window安全综述

端口安全

常用端口
20端口:FTP数据传输,FTP服务器使用TCP20端口连接客户端进行数据的传输

21端口:FTP消息控制,在被动模式下,FTP客户端连接FTP服务器时先连接服务器的21端口进行协商,协商完成后根据协商的内容进行数据传输

22端口:SSH连接,一般默认使用TCP22端口进行系统的远程管理

23端口:Telnet使用的端口,在Windows下可以用“Telnet+服务器IP+端口”的方式来进入远程主机的指定端口。也可以用来探测目的主机是否开放指定端口

25端口:SMTP服务的传输邮件端口,客户端及邮件服务器默认都是用25端口作为邮件发送端口

53端口:DNS服务器开放这个端口为客户端提供域名解析服务

80端口:WEB服务,一般提供网页服务

110端口:POP3服务,用于收取邮件的端口

135端口:远程过程调用(RPC)服务,很多服务都依赖于这个服务

139端口:Windows文件和打印机共享,可以用于共享文件

143端口:IMAP服务,也是用来接收邮件的服务,与POP3相比能提供更丰富的功能

389端口:LADP协议的端口,这是一个轻量级的目录访问协议

443端口:用于HTTPS(加密的HTTP连接),提供安全的网站服务

995端口:加密的POP3服务端口

3389端口:远程桌面服务,默认情况下系统管理员有远程桌面登录的权限

3306端口:MySQL数据库默认的端口,容易被暴力破解导致泄密

27017端口:MongoDB数据库默认端口,也容易导致泄密发生

修改默认端口

如何修改远程桌面默认端口

账户安全

修改默认用户名,设置复杂密码

设置的密码长度最好在8位以上,并且有大小写字母和特殊字符的混合,Windows Server默认的密码有效期为90天。

删除多余用户

删除系统中不需要的多余用户,减少被黑客利用的可能性

启用密码策略

在本地安全策略中启用密码策略,强制使用高强度的密码

Android系统安全

Android是一种基于Linux的,自由的,开源的操作系统。它主要使用与移动设备以及现在比较流行的IoT设备,由Google和开放手机联盟开发。Android系统机构可分为四层,从下到上依次为:内核层,系统运行库层,应用程序框架层,应用层。

Android将安全设计贯穿整个个系统架构的各个层面,覆盖系统内核,虚拟机,应用程序框架层及应用程序层的各个环节。

系统安全机制

Android进程沙箱隔离机制

Android应用在安装时会被赋予独特的用户标识(UID),每一个Android应用程序都运行在一个独立的Dalivik虚拟机中,而每个虚拟机都位于单独的一个Linux进程中,彼此之间只能通过进程间通讯来交换数据。这样保证了单独程序的崩溃或者是恶意行为不会对其他的程序产生太大的影响。

应用程序签名机制

每个应用程序在被安装之前都会被检查是否进行了数字签名。数字签名由开发者在开发完成之后使用自己的私钥进行完成。当应用升级时需要检查新版应用的数字签名是否与已安装的应用相同,否则会被当成一个新的应用程序。通过数字签名可以有效的防止恶意软件替换已安装的应用。

权限声明机制

Android应用想要进行一些操作,就需要提前先获取相应的系统权限,例如需要进行网络连接就需要先获取网络连接的权限才可以执行操作。不同级别要求应用程序使用权限的认证方式也不一样,Normal级别申请即可使用,Dangerous级需要安装时由用户确认,Signature和SignatureOrSystem级则必须是系统用户才可以。在Android 6.0的版本之后又引入了动态权限管理机制,程序不仅仅在安装时需要用户确认所需权限,在运行时也需要用户确认,这样进一步的保证了整个系统的权限安全。

进程通讯机制

Android的跨进程通讯通过基于内存共享的Binder实现,提供轻量级的远程调用,通过接口描述语言(AIDL)定义接口和交换数据的类型,确保进程间通讯的数据不会溢出越界。

内存管理机制

基于Linux的低内存管理机制,设计实现了独特的LMK,将进程重要性分级,分组,当内存不足时,自动清理低级别进程所占用的内存。同时引入Ashmem内存机制,使Android具备清理不再使用共享内存区域的能力。

Root

在Android系统上获取超级用户权限的过程叫做root,超级用户拥有全部文件的与程序的权限,因此手机厂商出于安全考虑会在出厂时关闭手机的root权限,手机系统运行在普通用户权限下,用户无法操作系统中的文件和数据。

Root的作用及危害

作用:

  1. 卸载手机自带的软件
  2. 安装一些特殊的软件
  3. 启用或禁用自启动程序
  4. 好奇

危害:

  1. 硬件危害:root后可能导致一些文件丢失,影响手机电流或照明功率,进而烧坏硬件
  2. 系统危害:root后可能导致系统不稳定,出现无法开机或者频繁自动重启的现象
  3. 软件危害:root后可能导致一些软件运行异常,产生充电缓慢,待机缩短等情况
  4. 信息泄露风险:手机root后会导致恶意软件容易入侵到手机,同时由于处于root状态,容易被恶意软件获取到个人机密信息

Root原理

Android获取root其实和Linux获取root用户是一样的。在Linux系统下输入su root并输入密码即可切换到root用户,其实就是将uid(用户id)和gid(组id)设置为0。

在Android系统中,获得root权限比没有root权限多了两个东西,一个是su二进制文件,一个是superuser.apk,su用来获取root权限的命令,superuser.apk是一个管理工具,可以对root权限进行管理和提示。

Root的过程其实就是把su文件放到/system/bin/Superuser.apk放到system/app下面,还需要设置/system/bin/su可以让任意用户执行。

Root思路

Linux文件权限:

-rwxr-xr-x:r表示该文件可读,w表示该文件可写,x代表该文件可执行,-表示没有权限。第一组rwx表示文件所有者的权限,第二组rwx表示和文件所有者同一组的人的权限,第三组rwx表示其他用户对该文件的权限

rsw他的执行权限标识位是一个s,s表示任何一个用户执行该文件都拥有文件所有者的权限。若文件所有者是root用户,则任何用户都可以以root用户的权限执行该文件。

其实实现Android的root主要是将所有者是root的su命令文件放到指定位置即可。

cp /data/temp/su/system/bin/#copy su 到 /system/分区
chown root:root su #su 的所有者设置成root
chmod 4775 /system/bin/su #把su 设置成-rwsr-xr-x

但是上边的三行命令都需要在root权限下才能执行成功,也就是说只有在root权限下才能执行上边的三条命令,但这三条命令是为了获得root权限,因此这是一个逻辑闭环。

目前实现root有两种思路:

  1. 找到一个已经有root权限的进程来完成上述命令,一般多为利用系统漏洞进行提权,常见的如adbd,rild,mtpd,vold等进程都是有root权限的。

  2. 另一种就是通过系统外植入,例如通过Recovery刷机的形式刷入su

以上是关于如何在 Linux 为系统用户设置密码复杂度策略的主要内容,如果未能解决你的问题,请参考以下文章

mysql怎么配置密码复杂度配置策略

怎么修改linux密码策略

Linux账户密码过期安全策略设置

如何在 Linux 上设置密码策略

配置用户SUSE linux操作系统口令复杂度

CentOS7设置系统密码复杂度和有效期