赞
踩
目录
usermod -s /sbin/nologin 用户名
- usermod -L 用户名
- passwd -l 用户名`
userdel [-r] 用户名
- [root@localhost ~]# chattr +i /etc/passwd /etc/shadow `##锁定账号文件`
- [root@localhost ~]# lsattr /etc/passwd /etc/shadow `##锁定文件并查看状态`
- ----i----------- /etc/passwd
- ----i----------- /etc/shadow
- [root@localhost ~]# chattr -i /etc/passwd /etc/shadow `##解锁文件`
- [root@localhost ~]# lsattr /etc/passwd /etc/shadow `##锁定文件并查看状态`
- ---------------- /etc/passwd
- ---------------- /etc/shadow
- `这两个文件被锁了以后用户也会无法创建`
法一
[root@localhost ~]# vim /etc/login.defs `##修改密码配置文件,适用于新建用户`
法二
- [root@localhost ~]# chage -M 30 zhangsan `##适用于已有的用户`
- [root@localhost ~]# cat /etc/shadow | grep zhangsan `##查看shadow文件的zhnagsan的那一行`
- chage ##修改账号和密码有效期限
- 语法:chage [参数] [数值] username
常用参数
选项 | 说明 |
---|---|
l | 列出当前用户过期时间设置信息 |
m | 密码可以更改的最小天数,为0时任何时候都能更改 |
M | 密码保持有效的最大天数 |
E | 设置用户的过期时间 过了这些天账号将不可用 0表示马上过期 -1表示永不过期 |
d | 上一次更改的日期 |
[root@localhost ~]# chage -d 0 zhangsan `##下次登录时强制请求修改密码`
- /etc/profile
- 系统环境变量得配置文件(全局有效) 环境变量 PATH HISTSIZE
- 开机时,用户登录会自动加载
-
- /etc/bashrc
- 全局有效,用户在切换shell环境时也会自动加载此文件中的配置
- source 刷新
-
- ~/.bash_profile
- 只针对当前用户有效
- echo ''> ~/.bash_history放在当前文件夹中
- 当前用户开机后首次登录系统时会执行一次这个命令
-
- ~/ . bashrc
- 只针对当前用户有效
- echo ' ' > ~/ .bash_ history
- 当前用户每次登录或者切换shell环境时都会执行一次命令
-
[root@localhost ~]# history -c `##临时清空历史命令`
- [root@localhost ~]# vim /etc/profile
- export HISTSI本E=200 `##减少记录的命令条数`
- [root@localhost ~]# source /etc/profile
- [root@localhost ~]# vim ~/.bashre
- echo " " > -/.bash_ history `##添加这一行后登录时自动清空命令历史`
[root@localhost ~]# vim /etc/profile
[root@localhost ~]# source /etc/proflie `##刷新配置文件`
格式 su [-] 目标用户
- [root@localhost ~]# pwd
- /root
- [root@localhost ~]# su wangwu `##该方法切换用户不会改变目录`
- [wangwu@localhost root]$ pwd
- /root
- [root@localhost ~]# su - wangwu `##该方法切换用户会进入当前用户的家目录,并自动加载shell环境`
- 上一次登录:二 8月 9 17:12:30 CST 2022pts/0 上
- [wangwu@localhost ~]$ pwd
- /home/wangwu
-
root→任意用户,不验证密码
- [root@localhost ~]# su wangwu
- [wangwu@localhost root]$
普通用户→其他用户,验证目标用户的密码
- [wangwu@localhost ~]$ su - root
- 密码:
- 上一次登录:二 8月 9 14:11:59 CST 2022tty2 上
- [root@localhost ~]# whoami
- root
将允许使用su命令的用户加入wheel组
- [root@localhost ~]# gpasswd -a wangwu wheel
- 正在将用户“wangwu”加入到“wheel”组中
- [root@localhost ~]# id wangwu
- uid=1003(wangwu) gid=1003(wangwu) 组=1003(wangwu),`10(wheel) ##已经将用户加入到wheel组中`
启用pam_ wheel认证模块
[root@localhost ~]# vim /etc/pam.d/su
su命令的安全隐患
PAM(Pluggable Authentication Modules)可插拔式认证模块
一般遵循的顺序
Service (服务) → PAM (配置文件) → +pam_ *.so
首先要确定哪-项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于 /lib64/security下)进行安全认证
用户访问服务器时,服务器的某-个服务程序把用户的请求发送到PAM模块进行认证
不同的应用程序所对应的PAM模块是不同的
- 示例:查看su是否支持PAM模块认证
- [root@localhost ~]# ls /etc/pam.d | grep su
- su
- sudo
- sudo-i
- su-l
- [root@localhost ~]# cat /etc/pam.d/su
- #%PAM-1.0
- auth sufficient pam_rootok.so
- # Uncomment the following line to implicitly trust users in the "wheel" group.
- #auth sufficient pam_wheel.so trust use_uid
- # Uncomment the following line to require a user to be in the "wheel" group.
- auth required pam_wheel.so use_uid
- auth substack system-auth
- auth include postlogin
- account sufficient pam_succeed_if.so uid = 0 use_uid quiet
- account include system-auth
- password include system-auth
- session include system-auth
- session include postlogin
- session optional pam_xauth.so
-
- `每一行都是一个独立的认证过程`
- `每行可以区分为三个子段
- 认证类型
- auth:对用户身份进行识别。如提示输入密码,判断是否为root
- account:对账号各项属性进行检查。如是否允许登录系统。帐号是否已经过期。是否达到最大用户数等。
- password:使用用户信息来更新数据,如修改用户密码。
- session:定义登录前以及退出后所要进行的会话操作管理。如登录连接信息。用户数据的打开和关闭,挂载文件系统。
-
- 控制类型
- required:表示需要返回一个成功值。如果返回失败,不会立刻将失败结果返回,而是堆继续进行同类型的下一验证。所有此类型的模块都执行完成后,再返回失败。
- reqpuintae:与required相似。但如果此模块返回失败,则立刻返回失败并表示此类型失败
- sufficient:如果此模快返回成功,则直接向程序退回成功,表示此类成功,如果失败,也不影响这类型的返回值。
- optional:不进行成功与否的返回。一般不用于验证。只是显示信息(通常用于session类型)
- include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/ect/pam. d/system-auth(主要负责用户登录系统的认证工作) 来实现认证而不需要重新逐去写配置项。
-
- PAM模块及其参数
- 默认路径在/lib64/security目录下,如果不在此默认路径下。要填写绝对路径。
- 同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。`
用途: 以其他用户身份(如root) 执行授权的命令
- 用法 :sudo 授权命令
- 复制代码
- [root@localhost opt]# touch 1.txt
- [root@localhost opt]# ls
- 1.txt
- [root@localhost opt]# su wangwu
- [wangwu@localhost opt]$ ll
- 总用量 0
- -rw-r--r-- 1 root root 0 8月 9 18:46 1.txt
- [wangwu@localhost opt]$ rm 1.txt
- rm:是否删除有写保护的普通空文件 "1.txt"?y
- rm: 无法删除"1.txt": 权限不够
- [wangwu@localhost opt]$ sudo rm 1.txt
-
- 我们信任您已经从系统管理员那里了解了日常注意事项。
- 总结起来无外乎这三点:
-
- #1) 尊重别人的隐私。
- #2) 输入前要先考虑(后果和风险)。
- #3) 权力越大,责任越大。
-
- [sudo] wangwu 的密码:
- [wangwu@localhost opt]$ ls
- [wangwu@localhost opt]$
- visudo 或 vim /etc/sudoors(此文件的默认权限为440. 保存退出时必领执行" :wq! "命令来强制操作)
- 语法格式:
- 用户 主机名 = 命令程序列表
- 用户 主机名 (用户) = 命令程序列表
-
- 用户:直接授权指定的用户名。或采用"%组名"的形式(授权一个组的所有用户)。
- 主机名:使用此规则的主机名。没配置过主机名时可用localhoat.有配过主机名则用实际的主机名。ALL则代表所有主机
- (用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令
- 命令程序列表:允许授权的用户通过sudo方式执行的特权命令。需填写命令程序的完整路径。多个命令之间以逗号","进行分隔。ALL则代表系统中的所有命令
- 使用关键字User_ Alias Host_Alias Cmnd_ Alias 来进行设置别名(别名必须为大写)
-
- User_Alias USERS=zhangan, lisi,wangwu
- Host_Alias HOSTS = localhost
- Cmnd_Alias CMNDS = /sbin/ifconfig,/usr/sbin/usradd,/usr/sbin/userdel
- USERS HOSTS=CMNDS
- 启用audo操作日志
- vigudo
- Defaults logfile ="/var/log/sudo"
通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
定义每个菜单项的所有脚本都存放在/etc/grub.d目录中,这些脚本的名称必须有两位的数字前缀,其目的是构建GRUB 2菜单时定义脚本的执行顺序以及相应菜单项的顺序,比如00_header文件首先被读取。
文件 | 描述 |
---|---|
00_header | 设置grub默认参数 |
10_linux | 系统中存在多个linux版本 |
20_ppc_terminfo | 设置tty控制台 |
30_os_prober | 设置其他分区中的系统(硬盘中有多个操作系统时设置) |
40_custom和41_custom | 用户自定义的配置 |
由于GRUB 2负责引导linux系统,其作为系统中的第一道屏障的安全性非常重要,对GRUB 2进行加密可以实现安全性。
在默认情况下,GRUB 2对所有可以在物理上进入控制台的人都是可访问的。任何人都可以选择并编辑任意菜单项,并且可以直接访问GRUB命令行。要启用认真支持,必须将环境变量超级用户设置为一组用户名(可以使用空格、逗号、分号作为分隔符)这样就只允许超级用户使用GRUB命令行、编辑菜单项以及执行任意菜单项。
GRUB 2密码支持以下两种格式:
为GRUB菜单设置密码的两种方式:
方法一:
CentOS 7系统中,直接使用 “grub2-setpasswd” 命令设置grub密码。
[root@localhost ~]# grub2-setpassword //使用命令直接设置GRUB密码
CentOS 6系统中,先要使用grub2-mkpasswd-pbkdf2命令生成PBKDF2加密口令, 然后在/etc/grub.d/00_header文件中添加超级用户和PBKDF2加密口令, 最后使用grub2-mkconfig命令生成grub配置文件。
- # 步骤1.备份两个配置文件
- [root@localhost ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
- [root@localhost ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
-
- # 步骤2.生成PBKDF2加密口令
- [root@localhost ~]# grub2-mkpasswd-pbkdf2 //使用哈希算法生成密码
- 输入口令:
- Reenter password:
- PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.D9BDDD44312FD353436E03F2F73F643A0DD6FB59D989ECAAADB911E95846A477137A73DCEA248BFD6FF02BE2D52052E3790AEE175B10AA7634C6B66D1D9173C7.B15B5DC77367D1960086506C3E39A718477F1D326B6548577D992BB383DBA0E3AF7EFD3E67DD768E33B391C6AC1FAC1C6BB4CFF492D2046A651DF5986ACAE35A
-
- # 步骤3.编辑配置文件/etc/grub.d/00_header,将加密口令添加进文件。注意复制口令时不要有空格。
- [root@localhost ~]# vim /etc/grub.d/00_header
- -------------------------------
- cat <<EOF
- set superusers="root" //设置登录用户
- password_pbkdf2 root grub.pbkdf2.sha512.10000.D9BDDD44312FD353436E03F2F73F643A0DD6FB59D989ECAAADB911E95846A477137A73DCEA248BFD6FF02BE2D52052E3790AEE175B10AA7634C6B66D1D9173C7.B15B5DC77367D1960086506C3E39A718477F1D326B6548577D992BB383DBA0E3AF7EFD3E67DD768E33B391C6AC1FAC1C6BB4CFF492D2046A651DF5986ACAE35A
- EOF
-
- # 步骤4.使用 grub2-mkconfig 命令生成新的 grub.cfg 配置文件。
- [root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
- Generating grub configuration file ...
- Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
- Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
- Found linux image: /boot/vmlinuz-0-rescue-869778d6675742a5968d2ea8c0e087b2
- Found initrd image: /boot/initramfs-0-rescue-869778d6675742a5968d2ea8c0e087b2.img
- done
-
示例:
将终端tty5、tty6注释掉,禁止root用户从这两个终端登录。
- [root@localhost ~]# vi /etc/securetty //编辑配置文件,将终端tty5、tty6注释掉
- ----------------------
- #tty5
- #tty6
- [root@localhost ~]# touch /etc/nologin //禁止普通用户登录
- [root@localhost ~]# rm -rf /etc/nologin //取消普通用户登录限制
控制位 | 描述 |
---|---|
SYN | 建立链接 |
ACK | 确认 |
FIN | 结束断开 |
PSH | 传送 0 数据缓存,上层应用协议 |
RST | 重置 |
URG | 紧急 |
服务 | 端口号 |
---|---|
HTTP | 80 |
HTTPS | 443 |
Telnet | 23 |
FTP | 21 |
SSH(安全登录)、SCP(文件传输)、端口重定向 | 22 |
SMTP | 25 |
POP3 | 110 |
WebLogic | 7001 |
TOMCAT | 8080 |
WIN2003远程登录 | 3389 |
Oracle数据库 | 1521 |
MS SQL* SEVER数据库sever | 1433 |
MySQL 数据库sever | 3306 |
- [root@localhost ~]# rpm -qa|grep nmap //查看nmap
- [root@localhost ~]# yum install -y nmap //安装nmap
- 复制代码
- 复制代码
- nmap [扫描类型] [选项] <扫描目标>
- 复制代码
- 复制代码
扫描类型和选项 | 作用 |
---|---|
-p | 指定扫描的端口。 |
-n | 禁用反向DNS解析(以加快扫描速度) |
-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用于端口扫描的一些用法
示例:
- # 分别查看本机开放的TCP端口、UDP端口
- [root@localhost ~]# nmap -sT 127.0.0.1
- [root@localhost ~]# nmap -sU 127.0.0.1
-
- # 检测192.168.80.0/24网段有哪些主机提供HTTP服务
- [root@localhost ~]# nmap -p 80 192.168.80.0/24
- [root@localhost ~]# nmap -p 80 192.168.91.100/24
-
- # 检测192.168.80.0/24网段有哪些存活主机
- [root@localhost ~]# nmap -n -sP 192.168.80.0/24
-netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。
命令格式: netstat [选项]
选项 | 作用 |
---|---|
-a | 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)。 |
-n | 拒绝显示别名,以数字的形式显示相关的主机地址、端口等信息。 |
-t | 查看TCP协议相关的信息。 |
-u | 显示UDP协议相关的信息。 |
-p | 显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限) |
-r | 显示路由表信息。 |
-l | 显示处于监听状态(Listen)的网络连接及端口信息。 |
- netstat -a //列出所有端口
-
- netstat -at //列出所有TCP端口
-
- netstat -au //列出所有UDP端口
-
- netstat -ax //列出所有unix端口
-
- netstat -lt //列出处于监听状态的TCP端口
-
- netstat -tnlp //直接使用ip地址列出所有处于监听状态的TCP端口,且加上程序名
-
1)netstat -lt,列出处于监听状态的TCP端口。
- [root@localhost ~]# netstat -lt //列出处于监听状态的TCP端口
- Active Internet connections (only servers)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN
- tcp 0 0 localhost.locald:domain 0.0.0.0:* LISTEN
- tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
- tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
- tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
- tcp 0 0 0.0.0.0:shell 0.0.0.0:* LISTEN
- tcp6 0 0 [::]:sunrpc [::]:* LISTEN
- tcp6 0 0 [::]:ssh [::]:* LISTEN
- tcp6 0 0 localhost:ipp [::]:* LISTEN
- tcp6 0 0 localhost:smtp [::]:* LISTEN
- tcp6 0 0 [::]:shell [::]:* LISTEN
-
2)netstat -tnlp,直接使用ip地址列出所有处于监听状态的TCP端口,且加上程序名。
- [root@localhost ~]# netstat -tnlp
- Active Internet connections (only servers)
- Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
- tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
- tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1462/dnsmasq
- tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1113/sshd
- tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1111/cupsd
- tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1394/master
- tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 798/rsyslogd
- tcp6 0 0 :::111 :::* LISTEN 1/systemd
- tcp6 0 0 :::22 :::* LISTEN 1113/sshd
- tcp6 0 0 ::1:631 :::* LISTEN 1111/cupsd
- tcp6 0 0 ::1:25 :::* LISTEN 1394/master
- tcp6 0 0 :::514 :::* LISTEN 798/rsyslogd
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。