shell——/sbin/nologin却比较特殊,所谓“无法登陆”指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源。举例来说,各个系统账号中,打印作业有lp这个账号管理,www服务器有apache这个账号管理,他们都可以进行系统程序的工作,但就是无法登陆主机而已。
[root@localhost ~]# tail /etc/passwd
#查看lisi的属性
[root@localhost ~]# chsh -s /sbin/nologin lisi
#修改lisi的shell属性
Changing shell for lisi.
Shell changed.
[root@localhost ~]# tail -1 /etc/passwd
#查看lisi的属性
lisi:x:1001:1001::/home/lisi:/sbin/nologin
usermod
[root@localhost ~]# passwd -l zhaosi
锁定用户 zhaosi 的密码 。
passwd: 操作成功
[root@localhost ~]# su zhangsan
[zhangsan@localhost root]$ su zhaosi
密码:
su: 鉴定故障
[root@localhost ~]# passwd -u zhaosi
解锁用户 zhaosi 的密码。
passwd: 操作成功
[root@localhost ~]# passwd -u zhaosi
解锁用户 zhaosi 的密码。
passwd: 操作成功
[root@localhost ~]# su zhangsan
[zhangsan@localhost root]$ su zhaosi
密码:
[zhaosi@localhost root]$
userdel -r 用户名
家目录
家目录 无主文件 前主人的uid
chattr
-a 让文件或目录仅供附加用途。只能追加
-i 不得任意更动文件或目录。
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow
#加i
[root@localhost ~]# useradd liqi
useradd:无法打开 /etc/passwd
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
----i----------- /etc/passwd
----i----------- /etc/shadow
chattr -i /etc/passwd /etc/shadow
对于新建用户
可以修改 /etc/login.defs 文件里的内容来设置密码规则
[root@localhost ~]# vim /etc/login.defs
#适用于修改后生效后修改的用户
--------------------------------
25 PASS_MAX_DAYS 99999
26 PASS_MIN_DAYS 0
27 PASS_MIN_LEN 5
28 PASS_WARN_AGE 7
[root@localhost ~]# tail -5 /etc/shadow
#修改密码有效期限
对于已有用户可以使用chage命令
chage
chage [选项] 用户名
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
[root@localhost ~]# chage -d 0 zhangsan
#强制张三下一次登录一定修改密码(密码符合复杂性要求)
[root@localhost ~]#chage -M 30 lisi
#设置密码有效期为30天
[root@localhost ~]#cat /etc/shadow|tail -1
lisi:!!:19055:0:30:7:::
第5字段
man 5 shadow
Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在 的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在 命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。 Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通 过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。例如,可以设 置最多只记录 200 条历史命令。
#可以使用以下命令临时清除历史命令
history -c
clear
[root@localhost ~]#vim /etc/profile
.............................
export HISTSIZE=200
###退出清空密码#############
[root@localhost ~]#vim .bash_logout
#退出后清除
# ~/.bash_logout
echo " " >~/.bash_history
#一定要加空格
[root@localhost ~]#vim .bashrc
#开机后清除
echo " " >~/.bash_history
bash windows 桌面
bash
#设置超时时间
[root@localhost ~]# vi /etc/profile
.................................
export TMOUT=60s
su [options...] [-] [user [args...]]
切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换
su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换
说明:root su至其他用户无须密码;非root用户切换时需要密码
注意:su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。
su 与 su-
即有 - 选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令)。
[zhangsan@localhost ~]$ pwd
/home/zhangsan
[zhangsan@localhost ~]$ su
密码:
[root@localhost zhangsan]# pwd
/home/zhangsan
[zhangsan@localhost ~]$ su -
密码:
上一次登录:二 7月 13 10:24:14 CST 2021pts/1 上
[root@localhost ~]# pwd
/root
[root@localhost ~]# gpasswd -a lisi wheel
#将用户加入 wheel组 root
[root@localhost ~]#vim /etc/pam.d/su
#开启服务
#auth required pam_wheel.so use_uid
vim /etc/pam.d/su
2 # auth sufficient pam_ rootok.so
6 #auth required pam_ wheel.so use_ _uid
a)以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。
b)两行都注释也是运行所有用户都能使用su命令,但root'下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。)
c)如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令
d)如果注释第一行,开启第二行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令。
su
PAM:Pluggable Authentication Modules,插件式的验证模块,Sun公司于1995 年开发的一种与认证相关的通用框架机制。PAM 只关注如何为服务验证用户的 API,通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序一种认证框架,自身不做认证。
http://www.linux-pam.org/
#官网
[root@localhost ~]#rpm -qi pam
#查看当前系统pam
[root@localhost ~]#rpm -ql pam
#查看模块
[root@localhost ~]#ls /usr/lib64/security/*.so|wc -l
#60个模块是二进制文件,不会直接修改
60
[root@localhost ~]#ls /etc/security/
#和上面的模块配合使用,有些比较简单的模块没有配置文件
access.conf console.perms.d namespace.d sepermit.conf
chroot.conf group.conf namespace.init time.conf
console.apps limits.conf opasswd
console.handlers limits.d pam_env.conf
console.perms namespace.conf pwquality.conf
我们会去修改配置文件
/etc/security
/etc/pam.d/*
[root@localhost ~]#cd /etc/pam.d/
#这里的文件是应用程序怎么调用模块的
[root@localhost pam.d]#ls
atd login smtp
chfn other smtp.postfix
chsh passwd sshd
config-util password-auth sssd-shadowutils
crond password-auth-ac su
cups pluto sudo
fingerprint-auth polkit-1 sudo-i
fingerprint-auth-ac postlogin su-l
gdm-autologin postlogin-ac system-auth
gdm-fingerprint ppp system-auth-ac
gdm-launch-environment remote systemd-user
gdm-password runuser vlock
gdm-pin runuser-l vmtoolsd
gdm-smartcard setup vsftpd
ksu smartcard-auth xserver
liveinst smartcard-auth-ac
[root@localhost pam.d]#cat /etc/pam.d/sshd
#文件类型
#%PAM-1.0
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
# Used with polkit to reauthorize users in remote sessions
-auth optional pam_reauthorize.so prepare
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include password-auth
session include postlogin
# Used with polkit to reauthorize users in remote sessions
-session optional pam_reauthorize.so prepare
type:指模块类型,即功能
control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
module-path: 用来指明本模块对应的程序文件的路径名
Arguments: 用来传递给该模块的参数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ZS7y0YO-1648388741040)(10系统安全及应用.assets/image-20220305012658912.png)]
PAM提供了对所有服务进行认证的中央机制,适用于本地登录,远程登录,如:telnet,rlogin,fsh,ftp,点对点协议PPP,su等应用程序中,系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略;应用程序开发者通过在服务程序中使用PAM API(pam_xxxx( ))来实现对认证方法的调用;而PAM服务模块的开发者则利用PAM SPI来编写模块(主要调用函数pam_sm_xxxx( )供PAM接口库调用,将不同的认证机制加入到系统中;PAM接口库(libpam)则读取配置文件,将应用程序和相应的PAM服务模块联系起来。重复利用别人的开发的功能,不必自己开发,会话,密码验证等功能,已经做好了调用下就可以了未来通用性,所以有了pam框架,类似淘宝 一边普通买家,一边卖家,淘宝上既是买家也是卖家
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qxmQETLZ-1648388741044)(10系统安全及应用.assets/image-20220305012919549.png)]
PAM认证过程示例:
1.使用者执行/usr/bin/passwd 程序,并输入密码
2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passwd此设置文件
3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证
4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)
专用配置文件/etc/pam.d/ 格式
type control module-path arguments
application:指服务名,如:telnet、login、ftp等,服务名字“OTHER”代表所有没有在该文件中明确
配置的其它服务
type:指模块类型,即功能
control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
module-path: 用来指明本模块对应的程序文件的路径名
Arguments: 用来传递给该模块的参数
type:指模块类型,即功能
control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
module-path: 用来指明本模块对应的程序文件的路径名
Arguments: 用来传递给该模块的参数
模块类型(module-type)
Control:
第三列代表PAM模块,
默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。
同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。
每一行都是一个独立的认证过程;
每一行可以区分为三个字段:
认证类型 控制类型 PAM 模块及其参数
PAM 认证类型包括四种:
认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证;
帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过 期,帐号的登录是否有时间段的限制等;
密码管理(password management):主要是用来修改用户的密码;
会话管理(session management):主要是提供对会话的管理和记账。 控制类型也可以称做 Control Flags,用于 PAM 验证类型的返回结果。
1)required 验证失败时仍然继续,但返回 Fail
2)requisite 验证失败则立即结束整个验证过程,返回 Fail
3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
4)optional 不用于验证,只是显示信息(通常用于 session 类型)
superuser do
sudo 即superuser do,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性在最早之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码。sudo于1980年前后推出,sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例如Ubuntu、Mac OS X等。
sudo特性:
[root@localhost ~]#vim /etc/sudoers
[root@localhost ~]#visudo
#语法检查
visudo -c
#检查语法
配置文件格式说明:/etc/sudoers, /etc/sudoers.d/
配置文件中支持使用通配符 glob
/bin/mount /dev/cdrom /mnt
/usr/bin/mount /dev/cdrom /mnt/
#用户 登入主机 = (代表用户) 命令
#user host = (runas) command
root ALL= ALL(绝对路径)
user: 运行命令者的身份
host: 通过哪些主机 多个 192.168.91.100 - 110
(runas):以哪个用户的身份
command: 运行哪些命令
User和runas:
username(用户名)
#uid(id号)
%group_name(组名)
%#gid(组id)
user_alias|runas_alias(别名) MYUSER=zhangsan,lisi
host:
ip或hostname(IP地址或主机名)
host_alias(别名) localhost
command:
command name (命令)
directory (文件夹里的命令)
sudoedit (可以编辑sudoers这个文件,变相变成管理员)
Cmnd_Alias (命令别名)
范例:
root ALL=(ALL) ALL
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
lisi ALL=(root) /usr/bin/mount /dev/cdrom /mnt/
#可以跟多个命令
lisi ALL=(root) /usr/bin/mount /dev/cdrom /mnt/,/usr/bin/mount /mnt/
#也可以对组进行操作
%在前表示组
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
[root@localhost ~]#gpasswd -a liwu wheel
正在将用户“liwu”加入到“wheel”组中
wheel组表示管理员组是比较特殊的一个组,在wheel组中的成员可以使用任何命令
#思考这个设置有意义么?
root ALL=(ALL) ALL
[root@localhost ~]#vim /etc/passwd
#修改passwd文件中root的uid
[root@localhost ~]$sudo -ulisi cat /etc/shadow
#-u指定用户的意思
####密码问题
[root@localhost ~]#sudo -V
#可以查看相关配置信息
#67 Defaults env_reset,timestamp_timeout=2
#启用sudo操作日志
visudo
Defaults logfile = "/var/log/sudo"
sudo别名有四种类型:
###别名
Host_Alias MYHOSTS = kgc,localhost
User_Alias MYUSERS = zhangsan,wangwu,lisi
Cmnd_Alias MYCMNDS = /sbin/*,!/sbin/reboot,!/sbin/poweroff,!/sbin/init,!/usr/bin/rm
MYUSERS MYHOSTS=NOPASSWD:MYCMNDS
root ALL=(ALL) ALL
用户 主机名ip= 命令
[root@localhost sudoers.d]#vim /etc/sudoers.d/test
lisi ALL= sudoedit
#lisi 变相管理员
lisi vim sudoers
[root@localhost sudoers.d]#chmod 440 test
#设置权限,加固安全
[root@localhost ~]#su lisi
[lisi@localhost root]$ sudoedit /etc/sudoers
#李四使用sudoedit 可以修改sudo配置文件
通配符
? 任意单一字符
* 匹配任意长度字符
[wxc] 匹配其中一个字符
[!wxc] 除了这三个字符的其它字符
\x 转义
[[alpha]] 字母
[root@localhost sudoers.d]#vim /etc/sudoers.d/test
liliu ALL= /bin/cat /var/log/vmware*
/etc/grub.d目录
定义每个菜单项的所有脚本都存放在/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密码支持以下两种格式
先要使用grub2-mkpasswd-pbkdf2命令生成PBKDF2加密口令,然后在/etc/grub.d/00_header文件中添加超级用户和PBKDF2加密口令,最后使用grub2-mkconfig命令生成grub配置文件。
在/etc/grub.d/00_header文件中添加用户和PBKDF2加密口令的格式如下。
[root@kgc ~]# grub2-mkpasswd-pbkdf2 #根据提示设置GRUB菜单的密码
输入口令:
Reenter password: 123456
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.E96097D1B1E470345D9FB62759335832B4A0F39CD4C9A57B502BD59CF1B8C393EEA37847984E242AAD4BFBB72E4BDC2196E6A7495CE7C86BF3D2498A34CAC2B7.B2EB99ED40267AE9496357B78C0DC04CE79957980A4A3FFA577B7502D70A5412D2EAD5CE4DAAC0FE068621CB29B76E44A7645EDCC7784FF20E113AF0B95E3467i
[root@kgc ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
[root@kgc ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
#备份文件
[root@kgc ~]# vim /etc/grub.d/00_header
#最后
cat << EOF
set superusers="root"
#设置登录用户
password_pbkdf2 root
#设置密码
grub.pbkdf2.sha512.10000.E96097D1B1E470345D9FB62759335832B4A0F39CD4C9A57B502BD59CF1B8C393EEA37847984E242AAD4BFBB72E4BDC2196E6A7495CE7C86BF3D2498A34CAC2B7.B2EB99ED40267AE9496357B78C0DC04CE79957980A4A3FFA577B7502D70A5412D2EAD5CE4DAAC0FE068621CB29B76E44A7645EDCC7784FF20E113AF0B95E3467i
EOF
使用 grub2-mkconfig 命令生成新的 grub.cfg 配置文件。
[root@kgc ~]# grub2-mkconfig -o /boot/grub2/grub.cfg //生成新的 grub.cfg 文件
重启系统进入GRUB菜单时,按e键将需要输入账号密码才能修改引导参数。
cat << EOF
set superusers="root"
password_pbkdf2 root grub.pbkdf2.sha512.10000.4F3CD9383616C3AAFB1E98A289CB707A6FEEDAE7BEFB10A59642FE641C8F13AD9A27EAD43DEB07D9F4228149C716FA40C8C04E13E98FFAC45EF7AA2AD76C96B9.49CEC46B324DC9A94D0B461C711569ADB79213708929B1891232DB5FE31EC6F5A0A4E4D0A4AA0EAA64E38A6876EEB3B5EBF8991D0FB04537E1F39D1AA40D1AD5
EOF
cat << EOF
set superusers="用户"
password_pbkdf2 用户 加密密码
EOF
[root@localhost ~]#grub2-setpassword
#直接设置密码
弱口令检测一 -John the Ripper.
John the Ripper是一-款开源的密码破解工具,可使用密码字典(包含各种密码组合的列表文件)来进行暴力破解。
./configre 安装路径和选择功能
make .c .py 高级语言 机器 make(编译) 高级编译二进制 0 1 让机器课读懂
make install 将程序 存起来
cd /opt
tar. zxf john-1.8.0.tar.gz
#解压工具包
yum install -y gcc gcc-c++ make
#安装软件编译工具
cd /opt/john-1.8.0/src
#切换到src子目录
make clean linux-x86-64
#进行编译安装
cp /etc/shadow /opt/shadow.txt
#准备待破解的密码文件
cd /opt/john-1.8.0/run
./john /opt/shadow.txt
#执行暴力破解
./john --show /opt/shadow.txt
#查看已破解出的账户列表
> john. pot
#使用密码字典文件
#清空已破解出的账户列表,以便重新分析
./john --wordlist=./password.1st /opt/shadow.txt
#使用指定的字典文件进行破解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ibCLirNS-1648388741045)(10系统安全及应用.assets/image-20220306025633184.png)]
===============网络端口扫描============
控制位
SYN 建立链接
ACK 确认
FIN 结束断开
PSH 传送 0 数据缓存 上层应用协议
RST 重置
URG 紧急
紧急URG(URGent) 当URG等于1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不要按照原来的排队顺序来传送。
当URG置为1的时,发松应用进程就告诉发送方的TCP的有紧急数据要传传送,于是发送方TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据,这时要与首部的紧急指针配合来使用。
确认ACK(ACKnowledgment) 仅当ACK = 1 时确认号字段才有效,当ACK = 0时,确认号无效。TCP规定,在连接建立之后所有的传送的报文段都必须把ACK置为1;
推送PSH(PuSH) 当两个应用进程进行交互式的通信时,有时在一端的应用进程希望键入一个命令后立即就能够收到对方的响应,在这种情况下,TCP就可以使用推送PSH操作,发送方的TCP把PSH置为1,并立即创建一个报文段发送出去。接收方收到PSH = 1的报文段,就尽快地(即“推送”向前)交付接受应用进程,而不再等到整个缓存都填满了再向上交付;
复位RST(ReSeT)当RST = 1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接。RST置1还用来拒绝一个非法的报文段或拒绝一个打开一个连接。RST也称为重建位或重置位;
同步SYN(SYNchronization) 在连接建立时用来同步序号。当SYN = 1时而ACK = 1时表示这是一个连接请求报文段。对方若同意连接,则应在响应的报文段中是SYN = 1 和ACK = 1,因此SYN = 1就表示这是以恶搞连接请求或连接接受报文;
终止FIN(FINis) 用来释放一个连接,当FIN = 1时,表示次报文段的发送方的数据已经发送完毕,并要求释放运输连接
#安装
rpm -qa|grep nmap 查看nmap
yum install -y 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通而放弃扫描。
用于主机发现的一些用法
-sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现。
-sn: Ping Scan 只进行主机发现,不进行端口扫描。
-Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。
-PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。
-PE/PP/PM: 使用ICMP echo, timestamp, and netmask 请求包发现主机。-PO[protocollist]: 使用IP协议包探测对方主机是否开启。
-n/-R: -n表示不进行DNS解析;-R表示总是进行DNS解析。
--dns-servers <serv1[,serv2],...>: 指定DNS服务器。
--system-dns: 指定使用系统的DNS服务器
--traceroute: 追踪每个路由节点
Nmap用于端口扫描的一些用法
-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描。
-sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况。
-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态。
--scanflags <flags>: 定制TCP包的flags。
-sI <zombiehost[:probeport]>: 指定使用idle scan方式来扫描目标主机(前提需要找到合适的zombie host)
-sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况。
-sO: 使用IP protocol 扫描确定目标机支持的协议类型。
-b <FTP relay host>: 使用FTP bounce scan扫描方式
示例:
#分别查看本机开放的TCP端口、UDP端口
nmap -sT 127.0.0.1
nmap -sU 127.0.0.1
#检测192.168.80.0/24网段有哪些主机提供HTTP服务
nmap -p 80 192.168.80.0/24
nmap -p 80 192.168.91.100/24
#检测192.168.80.0/24网段有哪些存活主机
nmap -n -sP 192.168.80.0/24
80 http
443 https 加密与否
ssh 22
httpd 服务名程序
apache nginx tomcat 软件名
服务 | 端口号 |
---|---|
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 |
| 端口号 |
| -------------------------------------------- | ------ |
| 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 |