Linux系统安全及应用

193 阅读14分钟

账号安全基本措施

系统账号清理

将非登录用户的Shell设为/sbin/nologin

usermod -s /sbin/nologin 用户名
 [root@localhost ~]# grep "lucas" /etc/passwd    //查看用户lucas的登录shell,为bash
 lucas:x:2001:2001::/tmp/test:/bin/bash
 [root@localhost ~]# usermod -s /sbin/nologin lucas   //将lucas的登录shell修改为/sbin/nologin
 [root@localhost ~]# grep "lucas" /etc/passwd 
 lucas:x:2001:2001::/tmp/test:/sbin/nologin

将用户设置为无法登录

[root@localhost ~]# tail /etc/passwd
#查看lucas的属性
lucas:x:1000:1000:lucas:/home/lucas:/bin/bash

chsh -s /sbin/nologin lucas
Changing shell for lucas.
Shell changed.
#修改lucas的shell属性

[root@localhost ~]# tail /etc/passwd
#查看lucas的属性

锁定用户

 passwd -l 用户名      //锁定用户
 usermod -L 用户名     //锁定用户    

 passwd -u 用户名      //解锁用户
 usermod -U 用户名     //解锁用户
[root@localhost ~]# passwd -l lucas
锁定用户 lucas 的密码 。
passwd: 操作成功

[root@localhost ~]# su lucas
[lucas@localhost root]$ su lisi
密码:
su: 鉴定故障
[root@localhost ~]# passwd -u lisi
解锁用户 lisi 的密码。
passwd: 操作成功
[root@localhost ~]# passwd -u lisi
解锁用户 lisi 的密码。
passwd: 操作成功
[root@localhost ~]# su lucas
[lucas@localhost root]$ su lisi
密码:
[lisi@localhost root]$ 

删除账户

userdel 用户名       //删除用户,但不删除用户的家目录
userdel -r 用户名    //删除用户的同时,删除他的家目录

锁定账号文件(passwd、shadow)

  • -a 让文件或目录仅供附加用途。只能追加
  • -i 不得任意更改文件或目录。
 chattr +a 文件或目录     //只允许对文件进行追加操作(适用于日志文件)
 chattr +i 文件或目录     //不能更改、重命名或删除这个文件
  • -R:递归处理,将指定目录下的所有文件及子目录一并处理。
  • -V:显示指令执行过程。
 chattr [-RV]  [+/-/=<属性>]  文件或目录   //改变文件属性
 lsattr  文件或目录     //查看文件底层属性

密码安全控制

一般通过设置密码规则来控制密码安全,主要设置以下两点:

  • 设置密码有效期
  • 要求用户下次登录时修改密码

对于新建用户

[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  [选项]  用户名
选项作用
-m密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M密码保持有效的最大天数。
-w用户密码到期前,提前收到警告信息的天数。
-E帐号到期的日期。过了这天,此帐号将不可用。
-d上一次更改的日期。
-i停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
[root@localhost ~]#chage -M 30 km
#设置密码有效期为30天
[root@localhost ~]#cat /etc/shadow|tail -1
km:!!:19065:0:30:7:::

对于新建用户修改/etc/login.defs文件

查看/etc/login.defs文件:

[root@localhost ~]# vim /etc/login.defs
 [root@localhost ~]# vim /etc/login.defs    //修改配置文件

 PASS_MAX_DAYS   30    //将密码最大有效期修改为30天
 PASS_MIN_DAYS   0
 PASS_MIN_LEN    5
 PASS_WARN_AGE   7
 
 [root@localhost ~]# useradd lisi    //创建新用户lisi
 [root@localhost ~]# grep "liisi" /etc/shadow
 lucy:!!:19056:0:30:7:::         //密码有效期默认30天

命令历史

Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在 的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在 命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。 Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通 过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。例如,可以设 置最多只记录 200 条历史命令。

一般使用两种方式控制命令历史:

  • 减少记录的命令条数。
  • 注销时自动清空命令历史,或登录时自动清空命令历史。

家目录下有 .bash_history 文件,用于记录历史命令。清空该文件即清空了命令历史。

减少记录命令的条数:
[root@localhost ~]# vim /etc/profile   //进入配置文件修改限制命令条数。适合新用户
   HISTSIZE=200          //修改限制命令为200条,系统默认是1000条profile 
   [root@localhost ~]# source /etc/profile   //刷新配置文件,使文件立即生效
 
[root@localhost ~]# export HISTSIZE=200  //适用于当前用户1. 临时修改历史命令条数。只针对当前用户,退出登录后失效。 
   [root@localhost ~]# source /etc/profile  //刷新配置文件,使文件立即生效  
   
注销时自动清空命令:
 [root@localhost ~]# vim ~/.bashrc
  echo "" > ~/.bash_history
     
登录时自动清空历史命令:
[root@localhost ~]# vim ~/.bashrc 
  echo "" > ~/.bash_history

自动注销

闲置600秒后自动注销:
[root@localhost ~]#vim .bash_profile    //进入配置文件
    export TMOUT=600    //全局声明超过600秒闲置后自动注销终端
[root@localhost ~]# source .bash_profile   //刷新配置文件
[root@localhost ~]# echo $TMOUT            //查看自动注销时间

解除自动注销:
[root@localhost ~]#vim .bash_profile       //进入配置文件
  # export TMOUT=600  注释掉这条命令,就不会自动注销了

[root@localhost ~]# export TMOUT=600   
#如果不在配置文件输入这条命令,那么是对当前用户生效

切换用户

用户切换—— su 命令

su命令即 switch user,命令可以切换用户身份,并且以指定用户的身份执行命令

su [options...] [-] [user [args...]]

切换用户的方式:

su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换

su - UserName:登录式切换,会读取目标用户的配置文件,切换至自己的家目录,即完全切换

即有 - 选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令)。

密码验证:

  • root 切换到任意用户,不验证密码。
  • 普通用户切换到其他用户,需要验证目标用户的密码。
[km@localhost ~]$ pwd
/home/km
[km@localhost ~]$ su 
密码:
[root@localhost km]# pwd
/home/km
[km@localhost ~]$ su -
密码:
上一次登录:二 713 18:24:45 CST 2022pts/1 上
[root@localhost ~]# pwd
/root

限制使用su命令的用户

su 命令的安全隐患

  • 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险。
  • 为了加强su 命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su 命令进行切换。

查看 /etc/pam.d/su 文件:

[root@localhost ~]# vim /etc/pam.d/su 


  1 #%PAM-1.0
  2 auth            sufficient      pam_rootok.so
  3 # Uncomment the following line to implicitly trust users in the "wheel" group.
  4 #auth           sufficient      pam_wheel.so trust use_uid
  5 # Uncomment the following line to require a user to be in the "wheel" group.
  6 #auth           required        pam_wheel.so use_uid
  7 auth            substack        system-auth
  8 auth            include         postlogin
  9 account         sufficient      pam_succeed_if.so uid = 0 use_uid quiet
 10 account         include         system-auth
 11 password        include         system-auth
 12 session         include         system-auth
 13 session         include         postlogin
 14 session         optional        pam_xauth.so

注意第二行和第六行:

 2 auth            sufficient      pam_rootok.so
 6 #auth           required        pam_wheel.so use_uid

1)以上两行是默认状态(即开启第二行,注释第六行),这种状态下是允许所有用户间使用su命令进行切换的。

2)两行都注释也是允许所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码;如果第二行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。)

3)如果开启第六行,表示只有root用户和wheel组内的用户才可以使用su命令

4)如果注释第二行,开启第六行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令。

: 1.编辑 /etc/pam.d/su 文件,将第二行和第六行都开启,则只有root和wheel组内的用户才能使用 su 命令。

 [root@localhost ~]# vim /etc/pam.d/su      //开启第二行和第六行

 2 auth sufficient pam_ rootok.so
 6 auth required pam_ wheel.so use_ _uid

2.km用户不在wheel组内,使用su命令时拒绝权限。

 [km@localhost ~]$ whoami        //当前为km用户
 km
 [km@localhost ~]$ id km      //查看km用户,不在wheel组内 
 uid=1006(km) gid=1007(km) 组=1007(km)
 [nancy@localhost ~]$ su - lisi     //su命令拒绝权限
 密码:
 su: 拒绝权限

3.将km用户加入wheel组内,则可以成功使用su 命令。

 [root@localhost ~]# gpasswd -a km wheel   //将km加入wheel组内
 正在将用户“nancy”加入到“wheel”组中
 [root@localhost ~]# su - km
 上一次登录:一 10月  10 18:32:05 CST 2022pts/0 上
 [km@localhost ~]$ whoami
 km
 [km@localhost ~]$ su - lisi        //nancy成功使用su命令切换用户
 密码:
 上一次登录:一 10月  10 18:30:39 CST 2022pts/0 上
 最后一次失败的登录:一 10月  10 18:31:34 CST 2022pts/0 上
 最有一次成功登录后有 1 次失败的登录尝试。

sudo(用户提权)

sudo 即superuser do,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。在最早之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码。

sudo特性:

  • sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
  • sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
  • sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
  • sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440
#用户   登入主机 = (代表用户)     命令  
#user     host=(username)     command   
root       ALL=(ALL)         ALL   
%wheel      ALL=(ALL)         NOPASSWD:ALL    


#root表示允许哪个用户。%wheel表示wheel组。 
#第一个ALL表示通过哪些主机登入。  
#第二个ALL表示以哪个用户身份。  
#最后一个ALL表示允许运行哪些命令。  
#NOPASSWD表示使用sudo命令不需要验证密码。

sudo基本语法

 sudo  [-u username]  [command]     //-u:以哪个用户的身份运行命令
 
 sudo -V    //查看相关配置信息          

例:允许普通用户km以root身份运行mount命令

 # 1.普通用户nancy不允许使用mount命令。
 [km@localhost ~]$ whoami
 km
 [km@localhost ~]$ mount /dev/sr0 /mnt
 mount: 只有 root 能执行该操作
 
 # 2.编辑配置文件,将lisi用户和km用户加入文件。
 [root@localhost ~]# visudo            //编辑配置文件/etc/sudoers
 
 lisi    ALL=(ALL)       ALL
 km      ALL=(root)      /bin/mount
 
 # 3.允许km用户以roo身份运行mount命令。
 [km@localhost ~]$ whoami
 km
 [km@localhost ~]$ sudo mount /dev/sr0 /mnt
 [sudo] km 的密码:
 mount: /dev/sr0 写保护,将以只读方式挂载
 
 # 4.lisi用户以root身份创建文件,文件属主是root。
 [lisi@localhost ~]$ whoami
 lisi
 [lisi@localhost ~]$ sudo touch 1.txt
 [sudo] lisi 的密码:
 [lisi@localhost ~]$ ll 1.txt
 -rw-r--r-- 1 root root 0 10月   10 18:52 1.txt

sudo 别名

sudo别名有四种类型:

  • User_Alias(用户)
  • Runas_Alias(代表用户)
  • Host_Alias(登录主机)
  • Cmnd_Alias(命令)
 [root@localhost ~]# visudo
 ----------------------------------
 User_Alias MYUSERS = km,zhangsan
 Host_Alias MYHOSTS = localhost
 Cmnd_Alias MYCMNDS = /sbin/*,!/sbin/reboot,!/sbin/poweroff,!/sbin/init,!/usr/bin/rm
 
 MYUSERS  MYHOSTS=(root)  NOPASSWD:MYCMNDS

注意:

如果配置文件内有语法错误,visudo命令会进行提示。

[root@localhost ~]# visudo
>>> /etc/sudoers: 语法错误 near line 89 <<<
现在做什么?

sudo 子目录

如果对所有用户进行提权都放在/etc/sudoers 一个文件中,非常不便于管理。这时可以在/etc/sudoers.d/ 下创建子目录。例如针对 测试部门的员工进行授权,可以创建/etc/sudoers.d/test;针对hr部门的员工进行授权,可以创建/etc/sudoers.d/hr。便于分类管理。

 [root@localhost ~]# vim /etc/sudoers.d/test          //创建子目录
 zhangsan  ALL=(root)  /bin/mount
 [root@localhost ~]# chmod 440 /etc/sudoers.d/test    //设置权限,加固安全
 [root@localhost ~]# ll /etc/sudoers.d/test
 -r--r----- 1 root root 33 10月   10 18:51 /etc/sudoers.d/test

如果允许用户使用sudoedit命令,则该用户能够修改配置文件/etc/sudoers。变相变成管理员,十分危险,建议不要设置该命令。

 [root@localhost sudoers.d]#vim /etc/sudoers.d/hr
 lisi ALL=(root)  sudoedit
 [root@localhost ~]#su lisi
 [lisi@localhost root]$ sudoedit /etc/sudoers   

查看sudo操作记录

  • 需要启用 Default logfile 配置
  • 默认日志文件:/var/log/sudo
[root@localhost log]# visudo          //修改配置文件

Default logfile="/var/log/sudo"       //在最后一行添加 Default logfile 配置

查看日志是否正常记录:

[root@localhost ~]# sudo -u km touch /tmp/2.txt     //以km用户的身份创建文件
[root@localhost ~]# tail -4 /var/log/sudo               //日志成功记录sudo操作
Oct 10 19:11:06 : root : TTY=pts/0 ; PWD=/root ; USER=km ; 
COMMAND=/bin/touch
    /tmp/f1.txt
Mar 12 23:13:49 : root : TTY=pts/0 ; PWD=/root ; USER=km ; 
COMMAND=/bin/touch
    /tmp/2.txt

PAM安全认证

PAM:Pluggable Authentication Modules,插件式的验证模块,Sun公司于1995 年开发的一种与认证相关的通用框架机制。PAM 只关注如何为服务验证用户的 API,通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序一种认证框架,自身不做认证。

 [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

PAM相关文件

  • 包名: pam
  • 模块文件目录:/lib64/security/*.so
  • 特定模块相关的设置文件:/etc/security/
  • 应用程序调用PAM模块的配置文件
  1. 主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
  2. 为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
  3. 注意:如/etc/pam.d存在,/etc/pam.conf将失效

PAM工作原理

PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so

PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证。

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: 用来传递给该模块的参数

配置文件/etc/pam.d/每一行都是一个独立的认证过程。

每一行可以区分为三个字段: 认证类型 、控制类型 、PAM 模块及其参数 。具体如下:

认证类型(module-type):

  • 认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证;

  • 帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等;

  • 密码管理(password management):用户修改密码时密码复杂度检查机制等功能;

  • 会话管理(session management):主要是提供对会话的管理和记账。

  • -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用。 控制类型:

  • required 验证失败时仍然继续,但返回 Fail。

  • requisite 验证失败则立即结束整个验证过程,返回 Fail 。

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

  • optional 不用于验证,只是显示信息(通常用于 session 类型)。

PAM 模块及其参数:

  • 默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。 同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。

系统引导和登录控制

开关机安全控制

调整BIOS引导设置原则

  • 将第一引导设备设为当前系统所在硬盘;
  • 禁止从其他设备(光盘、 U盘、网络)引导系统;
  • 将安全级别设为setup,并设置管理员密码。
  • 禁用重启热键:Ctrl+Alt+Delete 避免因用户误操作重启

GRUB限制

  • 未经授权禁止修改启动参数
  • 未经授权禁止进入指定系统 通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。

GRUB菜单加密的实现

文件描述
00_header设置grub默认参数
10_linux系统中存在多个linux版本
20_ppc_terminfo设置tty控制台
30_os_prober设置其他分区中的系统(硬盘中有多个操作系统时设置)
40_custom和41_custom用户自定义的配置

设置GRUB 2加密

由于GRUB 2负责引导linux系统,其作为系统中的第一道屏障的安全性非常重要,对GRUB 2进行加密可以实现安全性。

在默认情况下,GRUB 2对所有可以在物理上进入控制台的人都是可访问的。任何人都可以选择并编辑任意菜单项,并且可以直接访问GRUB命令行。要启用认真支持,必须将环境变量超级用户设置为一组用户名(可以使用空格、逗号、分号作为分隔符)这样就只允许超级用户使用GRUB命令行、编辑菜单项以及执行任意菜单项。

GRUB 2密码支持以下两种格式:

  • 明文密码:密码数据没有经过加密,安全性差。
  • PBKDF2加密密码:密码经过PBKDF2哈希算法进行加密,在文件中存储的是加密后的密码数据,安全性较高。

为GRUB菜单设置密码的两种方式:

  • CentOS 7系统中,直接使用 “grub2-setpasswd” 命令设置grub密码;

  • CentOS 6系统中,先要使用grub2-mkpasswd-pbkdf2命令生成PBKDF2加密口令,然后在/etc/grub.d/00_header文件中添加超级用户和PBKDF2加密口令,最后使用grub2-mkconfig命令生成grub配置文件。(/etc/grub.d/00_header是开机时第一个启动的文件)

终端登录安全控制

限制root只在安全终端登录

 [root@localhost ~]# vi /etc/securetty   //编辑配置文件,将终端tty5、tty6注释掉

 #tty5
 #tty6

禁止普通用户登录

 [root@localhost ~]# touch /etc/nologin     //禁止普通用户登录

 [root@localhost ~]# rm -rf /etc/nologin    //取消普通用户登录限制

网络端口扫描——nmap工具

nmap工具

 nmap [扫描类型]  [选项]  <扫描目标>
扫描类型和选项作用
-p指定扫描的端口。
-n禁用反向DNS解析(以加快扫描速度)
-sSTCP的SYN扫描 (半开扫描),只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。
-sTTCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放。
-sFTCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对sYN数据包进行简单过滤,而忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性。
-sUUDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢。
-sPICMP 扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描。
-P0跳过ping检测, 这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描。

网络端口扫描:

Snipaste_2022-09-06_16-35-52.png

网络端口扫描:

控制位描述
SYN建立链接
ACK确认
FIN结束断开
PSH传送 0 数据缓存,上层应用协议
RST重置
URG紧急

服务和端口号:

服务端口号
HTTP80
HTTPS443
Telnet23
FTP21
SSH(安全登录)、SCP(文件传输)、端口重定向22
SMTP25
POP3110
WebLogic7001
TOMCAT8080
WIN2003远程登录3389
Oracle数据库1521
MS SQL* SEVER数据库sever1433
MySQL 数据库sever3306

netstat

 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端口,且加上程序名