Linux系统安全及应用(账号安全,切换,提权,系统引导,登录控制,加固,弱口令扫描,网络扫描工具)

系统安全

系统安全和数据防护,数据备份的资质

系统安全是计算机系统中非常重要的一个方面,它涉及到保护系统免受未经授权访问、恶意软件、数据泄露等威胁的影响。

工信部是有要求的,组织必须保证处理的个人数据的安全性。

基于Linux的安全加固措施

账号安全控制

账号安全

1.将非登录用户的Shell设为nologin usermod -s nologin 用户名 #禁止登录

2.锁定长期不使用的账号(含解锁方式) usermod -L lisi #锁定账户 usermod -U lisi #解锁账户

passwd -l lisi #锁定账户方 passwd -u lisi #解锁账户

3.删除无用的账号 userdel -r 用户名 #删除用户

4.chattr锁定重要文件(如passwd、shadow、fstab等) lsattr /etc/passwd /etc/shadow #查看文件的状态 chattr +i /etc/passwd /etc/shadow #锁定文件 chattr -i /etc/passwd /etc/shadow #解锁文件

账号管理

系统无用账号清理:

userdel -r 用户名

/sbin/nologin的系统用户无需登录,也不能登录

不确定用途账户的登录锁定:usermod -L 账户名 (锁定密码操作);解锁:usermod -U 账户名

查看是否被锁定:passwd -S 账户名

锁定文件:

chattr +i 文件路径 不只是可以锁定账户文件,普通文件也可以;

锁定/etc/passwd就无法新增或更改删除用户;

锁定/etc/shadow就无法对账户的密码进行更改,用户密码都在shadow;

锁定/etc/group就无法进行组的相关操作。可以用lsattr文件路径 来查看文件是否被锁定。

锁定/etc/fstab,自动挂载的文件

chattr -i 文件路径 可以解锁被锁定的的账户文件。

密码安全控制

1.设置新用户的默认密码自动过期时间:vi/etc/login.defs 修改配置项(命令行:set nu 25): PASS_MAX——DAYS 30

修改老用户(已有用户)的密码过期时间:chage -M 天数 用户名

强制用户下次登录后后必须修改密码 :chage -d 0 用户名 (-d 1 :一天后修改密码)

命令历史限制

history可以查看历史记录,但有可能泄露密码等,可以再/etc/profile中配置HISYSIZE=100来将行数缩减到100行;

也可以修改~/.bash_logout 文件,在其中 history -c clear 指定在用户登出时清空历史记录history -c 命令只可以临时清除记录,重启后记录还在。

实例

1.临时修改当前用户的历史命令条数 export HISTSIZE=200

//临时修改历史命令条数为200条

[root@localhost ~]# echo $HISTSIZE 200

2.进入配置文件永久修改历史命令条数 vim /etc/profile

//进入配置文件

HISTSIZE=300

//将全局历史命令条数由1000改为300

source /etc/profile

//刷新配置文件,使文件立即生效

3.退出当前终端将命令清除 vim .bashlogout echo " " > ~/.bashhistory source .bash_logout

4.开机后当前终端将命令清除 vim .bashrc echo " " > ~/.bash_history

每次登录和退出都会清空历史记录

自动注销退出登录

自动退出登录,可以设置超时时间,当超过一定时间,终端没有任何输入,终端没有任何输入,则自动退出登录

vim /etc/profile #进入配置文件

export TMOUT=600 #超时时间设置为十分钟

可以用unset TMOUT来取消超时设置。

source /etc/profile #更新配置文件

一定要在末行添加

限制su命令切换用户

wheel组:是一个页数的组,加入了wheel组之后,可以和root用户使用管理员的命令,需要配合sudo。

把一些特殊需要的账户加入到wheel,让他们可以使用管理员的命令。方便操作。wheel组默认为空,需要管理员手动添加。

配置wheel组权限,注意权限最小化。仅设置用户需要的使用的命令即可。任务所需的最小权限。

  1. 使用文本编辑器(比如vinano)打开/etc/pam.d/su文件:
sudo vi /etc/pam.d/sudoers 
///etc/sudoers 文件中的配置定义了哪些用户或组可以以超级用户权限执行特定的命令。
  1. 在文件中找到或添加以下行,这些行通常在文件的开头部分:

    ```Plain Text auth required pam_wheel.so

  这一行的作用是启用`pam_wheel`认证模块来限制`su`命令切换用户。

3. 默认情况下,只有在组`wheel`中的用户才能使用`su`切换到其他用户。因此,需要确保只有特定的用户属于`wheel`组。可以通过以下命令将用户添加到`wheel`组:

Shell sudo usermod -aG wheel username //-a: 这个选项表示附加(append),它用于向用户的组成员资格列表中添加新组。如果省略 -a,则会覆盖用户的当前组成员资格,只保留新指定的组。 -G: 这个选项用于指定要添加用户到的组(在这种情况下是 wheel 组)。你可以在 -G 后面提供一个或多个组名,用逗号分隔。

  将 `username` 替换为你要允许使用`su`的普通用户的用户名。

4. 保存并关闭文件。

现在,只有属于`wheel`组的用户才能使用`su`命令切换到其他用户,包括超级用户(root)。其他普通用户将无法使用`su`来切换用户。

请注意,这个方法需要小心谨慎地管理`wheel`组,以确保只有授权用户可以切换用户,从而保护系统的安全。

#### 从wheel中移除

**使用 `gpasswd` 命令:**

5. 打开终端并以超级用户(root)权限登录或使用 `sudo` 权限。

6. 使用以下命令来从 `wheel` 组中移除用户:

Shell sudo gpasswd -d username wheel

  其中 `username` 是要移除的用户的用户名。这将从 `wheel` 组中删除指定的用户。

**手动编辑 `/etc/group` 文件:**

7. 打开终端并以超级用户(root)权限登录或使用 `sudo` 权限。

8. 使用文本编辑器(比如 `vi` 或 `nano`)打开 `/etc/group` 文件:

Shell sudo nano /etc/group

9. 在文件中找到 `wheel` 组的行,通常是这样的:

MakeFile wheel:x:10:username1,username2,username3

  这里的 `username1`, `username2`, `username3` 是属于 `wheel` 组的用户列表。删除想要移除的用户名。

10. 保存并关闭文件。

这两种方法都可以从 `wheel` 组中移除用户。使用 `gpasswd` 命令更方便,但手动编辑 `/etc/group` 文件也是有效的。请确保在执行这些操作时小心谨慎,以防止误操作。

#### 其他su修改

`dn ALL=(root) /sbin/ifconfig, /bin/rm` 属于 `/etc/sudoers` 文件的一部分,这个文件用于配置 `sudo` 命令的权限。下面是对这行文本的解析:

- `dn`: 这可能是一个用户名或者用户组名。这行文本表示对用户 `dn` 的权限设置。

- `ALL`: 表示对所有主机允许用户 `dn` 执行 `sudo` 命令。

- `(root)`: 表示用户 `dn` 可以以 `root` 用户的身份执行后面列出的命令。

- `/sbin/ifconfig, /bin/rm`: 这部分表示允许用户 `dn` 使用 `sudo` 权限执行两个不同的命令:`/sbin/ifconfig` 和 `/bin/rm`。

综合起来,这行文本的含义是用户 `dn` 可以在所有主机上使用 `sudo` 命令以 `root` 用户的身份执行 `/sbin/ifconfig` 和 `/bin/rm` 这两个命令。这通常表示用户 `dn` 具有权限来配置网络接口(ifconfig)和删除文件(rm)等任务,而且这些任务可以以超级用户(root)的权限执行,因此需要输入用户密码才能执行这些命令。

### 关键字控制用户

在 `/etc/sudoers` 文件中,你可以使用不同的关键字和配置选项来控制用户对 `sudo` 命令的访问权限。以下是一些常见的关键字和配置选项,以便在 `/etc/sudoers` 中控制用户:

11. **User Specification (用户规定)**: 你可以指定哪些用户可以使用 `sudo` 命令,以及他们可以使用 `sudo` 执行哪些命令。这通常在文件中以如下形式表示:

SQL username ALL=(ALL:ALL) ALL

  这个规则允许用户 `username` 在任何主机上以任何用户身份执行任何命令。

12. **Host Specification (主机规定)**: 你可以限制用户在哪些主机上可以使用 `sudo`。例如,你可以允许用户只在特定主机上使用 `sudo`,或者在任何主机上使用 `sudo`。这可以通过在用户规定中的主机字段中指定主机名或IP地址来实现。

SQL username hostname=(ALL:ALL) ALL

13. **Command Specification (命令规定)**: 你可以指定用户可以使用 `sudo` 执行哪些命令。这可以通过在用户规定中的命令字段中指定命令的路径来实现。

SQL username ALL=(ALL:ALL) /path/to/command

14. **Run as Specific User (以特定用户身份运行)**: 你可以指定用户可以使用 `sudo` 以另一个用户的身份来执行命令。

Shell username ALL=(otheruser) /path/to/command

15. **Command Aliases (命令别名)**: 你可以定义命令别名,以简化 `sudoers` 文件的管理。这允许你为一组相关的命令定义别名,并在用户规定中引用这些别名。

JavaScript Cmnd_Alias MYCOMMANDS = /path/to/command1, /path/to/command2 username ALL=(ALL:ALL) MYCOMMANDS

16. **User and Host Aliases (用户和主机别名)**: 你还可以定义用户和主机别名,以简化 `sudoers` 文件中的规则。这允许你为一组相关的用户或主机定义别名,然后在用户规定中引用这些别名。

SQL UserAlias ADMINS = user1, user2 HostAlias SERVERS = server1, server2 ADMINS SERVERS=(ALL:ALL) ALL

请注意,对 `/etc/sudoers` 文件的更改应该谨慎进行,因为不正确的配置可能导致系统安全问题。通常情况下,你应该使用 `visudo` 命令来编辑 `/etc/sudoers` 文件,因为它会在保存文件时检查语法错误,以避免配置问题。



`visudo` 命令是一个用于编辑 `/etc/sudoers` 文件的工具,它旨在提供一种安全的方式来编辑此文件,以管理 `sudo` 命令的权限。`/etc/sudoers` 文件包含有关哪些用户可以以超级用户权限执行哪些命令的配置信息。

`visudo` 的主要特点如下:

17. **语法检查**:`visudo` 命令会在你保存并退出编辑器之前检查 `/etc/sudoers` 文件的语法。这有助于防止你在文件中引入语法错误,这些错误可能导致 `sudo` 命令无法正常工作或者安全问题。

18. **使用默认编辑器**:`visudo` 默认会使用系统中配置的文本编辑器来打开 `/etc/sudoers` 文件。这可以确保编辑文件时使用了你熟悉的编辑器。

19. **锁定文件**:`visudo` 在编辑 `/etc/sudoers` 文件时会锁定文件,以防止其他用户同时编辑它。这有助于避免编辑冲突。

20. **访问控制**:只有具有管理员权限的用户(通常是`root`用户)才能运行`visudo`命令来编辑 `/etc/sudoers` 文件。这样可以确保只有授权的用户可以更改 `sudo` 权限。

使用 `visudo` 命令的基本语法如下:

Shell visudo ```

这会打开 /etc/sudoers 文件以供编辑。一旦你编辑完文件并保存退出编辑器,visudo 将会检查文件的语法,并在没有错误的情况下保存更改。


用户切换与提权

查看su操作记录

安全日志:/var/log/secure

su 切换用户

su默认可以切换用户,从root用户切换到任意用户,不需要输入密码,可以直接切换,从普通用户切换到任意用户。需要输入密码验证

可以开启密码验证的权限

vi/etc/pam.d/su 在文件中将 auth required pam wheel.so use_uid的注释放开

则在wheel组中的用户才可以执行su命令,否则没有权限

auth required pam wheel.s.o use_uid.

auth对应认证类型:

认证管理(auth):接受用户名及密码,从来对用户的密码进行认证。

账户管理(account):检查账户是否允许登录,账户是否过期,账户的登录时间限制等。

密码管理(password):主要检查账户是否有修改密码的权限

会话管理(session):提供会话管理的记录

required对应控制类型:用于PAM验证类型的返回结果

required验证失败时也仍然继续,但返回错误。

requisite验证失败时立即结束整个过程,也返回错误。

sufficient验证成功则立即返回成功,否则忽略结果并继续

optional不验证,只显示信息(通常只用于session会话) 

sudo 提升执行权限

执行visudo命令或者vi /etc/sudoers.在其中配置:用户 端口 = 允许执行的命令

可以批量给用户或者应用来允许sudo权限:应该将其加入wheel组中,默认首次使用sudo时需要输入当前用户的登录密码,之后与前一次sudo不超过5分钟,不需要再次输入密码

user_alias users=jerry,tom,lu

host_alias hosts=master,slave

cmd_alias cmds=/bin/rpm,/bin/yum

users hosts=cmds

可以在visudo命令执行中添加Defaults logfile=“具体路径”来指定sudo命令的记录位置。

配置sudo授权 使用vim /etc/sudoers进行配置(此文件默认权限为440,保存时必须 wq!强制执行操作) 权限生效后,输入密码后5分钟可以不用重新输入密码

[root@localhost pam.d]# vim /etc/sudoers 91 ## Allow root to run any commands anywhere 92 root ALL=(ALL) ALL 使用命令的用户 主机列表=代表谁去执行命令 可以执行哪些命令

用户: 直接授权指定的用户名,或采用“&组名"的形式(授权一个组的所有用户)。

主机名:使用此规则的主机名。没配置过主机名时可用localhost, 有配过主机名则用实际的主机名,ALL则代表所有主机。

(用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令。

命令程序列表:允许授权的用户通过sudo方式执行的特权命令, 需填写命令程序的完整路径, 多个命令之间以逗号“,"进行分隔。ALL则代表系统中的所有命令。

查看当前sudo配置文件,启用sudo操作日志 启用sudo操作日志

需启用Defaults logfile配置 默认日志文件:/var/log/sudo 操作:在/etc/sudoers末尾添加 Defaults logfile="/var/log/sudo"

示例

示例1:配置文件使dn可以通过sudo命令使用ifconfig

第一步:切换至用户dn进行测试 [dn@localhost ~]$ ifconfig ens33:1 192.168.233.21/24 SIOCSIFADDR: 不允许的操作 SIOCSIFFLAGS: 不允许的操作 SIOCSIFNETMASK: 不允许的操作 [dn@localhost ~]$ sudo ifconfig ens33:1 192.168.168.12/24

我们信任您已经从系统管理员那里了解了日常注意事项。 总结起来无外乎这三点:

#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。

[sudo] dn 的密码: 提示要输入密码

第一步:vim /etc/sudoers

99和102行注释掉!!! 98 ## Allows people in group wheel to run all commands 99 #%wheel ALL=(ALL) ALL 100 101 ## Same thing without a password 102 # %wheel ALL=(ALL) NOPASSWD: ALL

第二步:在/etc/sudoers末尾插入相关配置,然后强制保存退出 91 ## Allow root to run any commands anywhere 92 root ALL=(ALL) ALL 93 dn ALL=(root) /sbin/ifconfig #配置文件

[root@localhost pam.d]# su - dn 上一次登录:日 2月 19 19:53:15 CST 2023pts/2 上

[root@localhost ~]# gpasswd -a dn wheel #必须添加到wheel组中才能直接生效。否则还会提示输密码

[dn@localhost ~]$ sudo ifconfig ens33:1 192.168.233.12/24 #直接生效,必须添加到wheel组中才能直接生效。 否则还会提示输密码

示例2:使用关键字来进行设置别名,批量控制用户 要求:控制用户进行sudo操作时无法使用重启(reboot)、关机(poweroff)、 切换init和无法删除

第一步:vim /etc/sudoers 98 ## Allows people in group wheel to run all commands 99 #%wheel ALL=(ALL) ALL #注释掉

在底行添加: Host_Alias MYHOSTS = localhost #设置主机名

User_Alias MYUSERS = dn #设置限制的用户名

Cmnd_Alias MYCMNDS = /sbin*, !/sbin/reboot, !/sbin/poweroff, !/sbin/init, !/usr/bin/rm

包含/sbin* 下的所有命令,但排除了 /sbin/reboot、/sbin/poweroff、/sbin/init

和 /usr/bin/rm

MYUSERS MYHOSTS=MYCMNDS

MYUSERS MYHOSTS=MYCMNDS: 这是授权的部分,它告诉系统,在主机 localhost 上, 用户 dn 可以运行 MYCMNDS 中定义的命令。 这个配置将允许用户 dn 在 localhost 主机上运行除了被排除的命令之外的任何 /sbin* 命令。

[dn@localhost ~]$ sudo reboot [sudo] dn 的密码: 对不起,用户 dn 无权以 root 的身份在 localhost.localdomain 上执行 /sbin/reboot。

系统引导和登录控制

开关机安全控制

1.调整BIOS引导设置 将第一引导设备设为当前系统所在硬盘 禁止从其他设备(光盘、U盘、网络)引导系统 将安全级别设为setup,并设置管理员密码

grub加密方法(为GRUB菜单设置密码) 按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。 可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。

第一步:按e键查看未设置之前的状态 重启之后按e,查看配置,不建议修改

第二步:设置GRUB密码并重启 [root@localhost ~]# grub2-setpassword Enter password: Confirm password: [root@localhost ~]# reboot 在重启界面按e,输入账号密码才可以登录

1、调整BIOS的引导过程,将当前系统硬盘设为第一优先引导设备,其他项禁用,并设置管理密码,BlOS的安全级别设为SETUP。

终端登录安全控制

限制root只在安全终端登录 安全终端配置:/etc/securetty tty1~ 6是文本型控制台,tty7 是X Window图形显示管理器。 可以通过CtrI+Alt+F1 (F1-F7键) 切换到对应的登录控制台。

示例:禁止root在tty2和tty3终端登录 第一步:更改安全终端配置文件 vim /etc/securetty 把tty2和tty3注释掉

禁止普通用户登录 建立/etc/nologin文件 删除nologin文件或者重启后即恢复正常

touch /etc/nologin

//禁止普通用户登录,只对图形化界面生效

rm -rf /etc/nologin

//取消上述登录限制,删除后即可恢复


系统安全加固的措施

1、将非登录用户的shell设置为nologin 2、锁定账号 usermod -L 锁定账户 passwd -l 锁定密码 3、删除无用的账号 4、chattr +i 锁定重要文件 /etc/passwd /etc/shadow /etc/fstab 5、设置密码,密码设置复杂一些。 6、修改历史命令的记录 7、禁止用户切换 wheel组,可以和root一样执行管理员命令 sudo 权限最小化。 8、给GURB菜单设置密码第一步:按e键查看未设置之前的状态 重启之后按e,查看配置,不建议修改 第二步:设置GRUB密码并重启 grub2-setpassword 9、设置sudo的权限。 10、改掉一些大家都知道的服务端口号 ssh 22 http 80 mysql 3306

弱口令检测工具john

cd /opt tar -zxvf john-1.8.0.tar.gz #解压工具包 yum -y install gcc gcc-c++ make #安装软件编译工具

cd /opt/john-1.8.0/src make clean linux-x86-64 #切换到src子目录,进行编译安装

cp /etc/shadow /opt/shadow.txt #准备待破解的密码文件

cd /opt/john-1.8.0/run ./john /opt/shadow.txt #切换到run子目录,执行暴力破解

./john --show /opt/shadow.txt #查看已破解出的账户列表

网络扫描根据NMAP

一款强大的网络扫描、安全 检测工具 官方网站:Nmap: the Network Mapper - Free Security Scanner CentOS 7.3光盘中安装包 nmap-6.40-7.el7.x86_64.rpm

nmap [扫描类型] [选项]

netstat natp #查看正在运行的使用TCP协议的网络状态信息 netstat -natp | grep httpd #实际操作(httpd换成80也可以)

netstat -naup #查看正在运行的使用UDP协议的网络状态信息

nmap常见选项:

选项 功能 -p 指定扫描的端口。

-n 禁用反向DNS解析(以加快扫描速度) ip转换成 域名 12222 2www.baidu.com

-sS TCP的SYN扫描 (半开扫描),只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。

-sT TCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放。

-sF TCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对sYN数据包进行简单过滤,而忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性。

-sU UDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢。

-sP ICMP 扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描。

-P0 跳过ping检测, 这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描。

 安装nmap [root@localhost yum.repos.d]# rpm -q nmap #检测是否安装 [root@localhost yum.repos.d]# yum -y install nmap

 nmap -p 端口 网段 :指定扫描的端口 [root@localhost yum.repos.d]# nmap -p 80 192.168.233.0/24

nmap -n -sP:查看网段有哪些存活主机 [root@localhost yum.repos.d]# nmap -n -sP 192.168.233.0/24

查看本机开放的TCP端口、UDP端口 [root@localhost yum.repos.d]# nmap -sT 127.0.0.1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值