Linux 系統安全相關

来源:https://www.cnblogs.com/llife/archive/2019/09/05/11467000.html
-Advertisement-
Play Games

本篇關於 Linux 的一些安全知識,主要就是與賬號相關的安全。 ...


CentOS-Logo

本篇關於Linux的一些安全知識,主要就是與賬號相關的安全。


賬戶文件鎖定

當伺服器中的用戶賬號已經固定,不在進行更改,可鎖定賬戶文件。鎖定後,無法添加、刪除賬號,也無法更改密碼等。

  • 鎖定賬戶文件
chattr +i /etc/passwd /etc/shadow
  • 解鎖賬戶文件
chattr -i /etc/passwd /etc/shadow
  • 查看賬戶文件是否鎖定
lsattr /etc/passwd /etc/shadow

Demo

1.查看允許登錄的賬戶。

[root@localhost ~]# grep "/bin/bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash

2.添加一個名為zhangsan用戶。

[root@localhost ~]# useradd zhangsan && echo "000000" | passwd --stdin zhangsan
Changing password for user zhangsan.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# grep "/bin/bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
zhangsan:x:1000:1000::/home/zhangsan:/bin/bash

3.鎖定賬號文件。

[root@localhost ~]# lsattr /etc/passwd /etc/shadow
---------------- /etc/passwd
---------------- /etc/shadow
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
----i----------- /etc/passwd
----i----------- /etc/shadow

4.嘗試添加名為lisi的用戶,添加失敗。

[root@localhost ~]# useradd lisi && echo "000000" | passwd --stdin lisi
useradd: cannot open /etc/passwd
[root@localhost ~]# grep "/bin/bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
zhangsan:x:1000:1000::/home/zhangsan:/bin/bash

5.解鎖賬號文件。

[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

6.嘗試添加名為lisi的用戶,添加成功。

[root@localhost ~]# useradd lisi && echo "000000" | passwd --stdin lisi
Changing password for user lisi.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# grep "/bin/bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
zhangsan:x:1000:1000::/home/zhangsan:/bin/bash
lisi:x:1001:1001::/home/lisi:/bin/bash

密碼有效期

為了避免用戶長時間使用同一個密碼,管理員可以設置密碼有效期。密碼過期後,只有重新設置密碼,否則無法登錄。

  • 對於新建的用戶,修改配置文件
# vi /etc/login.defs
PASS_MAX_DAYS   99999
  • 對於已有的用戶,使用chage命令修改密碼時限
chage -M 30 lisi
  • 強制用戶下次登陸必須更改密碼
chage -d 0 zhangsan

Demo

1.查看/etc/shadow發現用戶密碼有效期為99999天。

[root@localhost ~]# cat /etc/shadow
root:$6$4/ne8o5V38hiA2jr$6SclA1hllj8FPXqyMtfof5T4NMH1gJeDQ31AfoR4wapYPBQWlbZQKKPkuUBWoqgwA1GsuHW.1lTg59tyfrwvC/::0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
lp:*:17110:0:99999:7:::
sync:*:17110:0:99999:7:::
shutdown:*:17110:0:99999:7:::
halt:*:17110:0:99999:7:::
mail:*:17110:0:99999:7:::
operator:*:17110:0:99999:7:::
games:*:17110:0:99999:7:::
ftp:*:17110:0:99999:7:::
nobody:*:17110:0:99999:7:::
systemd-network:!!:18124::::::
dbus:!!:18124::::::
polkitd:!!:18124::::::
postfix:!!:18124::::::
sshd:!!:18124::::::
chrony:!!:18124::::::
zhangsan:$6$MWTXL8Jt$rEFwO.UoAmoKmxczVgiJtOWCHtdYwRbW1G.drbEFrWuKYCAvfEByRN7eohVxonsVZCtqJ.oV3c1sLaVGUVIk9.:18136:0:99999:7:::
lisi:$6$VLsvfMkO$aNnVeB1wWspXnD.4QErik1iLRw80jI7qqosbn9RgtGA9di5QFYh5ZWe3sUtLyshADukCH9vdZ55DZghDu4c.K.:18136:0:99999:7:::

2.修改/etc/login.defs配置文件,更改最大有效期為30天。

[root@localhost ~]# vim /etc/login.defs
# PASS_MAX_DAYS   99999
PASS_MAX_DAYS   30

3.新創建wangwu用戶,並查看密碼有效期為30天。

[root@localhost ~]# useradd wangwu && echo "000000" | passwd --stdin wangwu
Changing password for user wangwu.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# cat /etc/shadow | grep wangwu
wangwu:$6$qTt8ruAd$PbgMJlgjO6.Bp4YpQwN60oTyZyPloMxTjOUBJ0aYEBAjzg/opw4Ci6LZG5/RtBJW/YJ7QbJaMUEFbkLl9XTG8/:18136:0:30:7:::

4.更改已存在的用戶lisi密碼有效期為30天。

[root@localhost ~]# chage -M 30 lisi
[root@localhost ~]# cat /etc/shadow | grep lisi
lisi:$6$VLsvfMkO$aNnVeB1wWspXnD.4QErik1iLRw80jI7qqosbn9RgtGA9di5QFYh5ZWe3sUtLyshADukCH9vdZ55DZghDu4c.K.:18136:0:30:7:::

5.強制zhangsan用戶下次登錄必須修改密碼。

[root@localhost ~]# chage -d 0 zhangsan
[root@localhost ~]# cat /etc/shadow | grep zhangsan
zhangsan:$6$MWTXL8Jt$rEFwO.UoAmoKmxczVgiJtOWCHtdYwRbW1G.drbEFrWuKYCAvfEByRN7eohVxonsVZCtqJ.oV3c1sLaVGUVIk9.:0:0:99999:7:::

6.使用zhangsan用戶登錄發現必須要修改密碼,註意密碼複雜性要求,示例密碼:asdf1928

login as: zhangsan
[email protected]'s password:
You are required to change your password immediately (root enforced)
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user zhangsan.
Changing password for zhangsan.
(current) UNIX password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

history 命令歷史

命令歷史記錄在帶來便利的同時,也存在著潛在的風險,比如曾經輸入的明文密碼等。

  • 對所有用戶生效,修改系統環境變數,可修改能查看最近歷史記錄的條數。
# vi /etc/profile
HISTSIZE=1000
  • ~/.bash_logout在用戶註銷時會自動執行,可實現自動清除命令記錄,下次登錄將無法查看以前的命令記錄。
# vi ~/.bash_logout
history -c
clear

Demo

1.查看命令歷史記錄。

[root@localhost ~]# history
    1  grep "/bin/bash$" /etc/passwd
    2  useradd zhangsan && echo "000000" | passwd --stdin zhangsan
    3  grep "/bin/bash$" /etc/passwd
    4  lsattr /etc/passwd /etc/shadow
    5  chattr +i /etc/passwd /etc/shadow
    6  lsattr /etc/passwd /etc/shadow
    7  useradd lisi && echo "000000" | passwd --stdin lisi
    8  grep "/bin/bash$" /etc/passwd
    9  lsattr /etc/passwd /etc/shadow
   10  chattr -i /etc/passwd /etc/shadow
   11  lsattr /etc/passwd /etc/shadow
   12  useradd lisi && echo "000000" | passwd --stdin lisi
   13  grep "/bin/bash$" /etc/passwd
   14  cat /etc/shadow
   15  yum install vim -y
   16  vim /etc/login.defs
   17  useradd wangwu && echo "000000" | passwd --stdin wangwu
   18  cat /etc/shadow | grep wangwu
   19  chage -M 30 lisi
   20  cat /etc/shadow | grep lisi
   21  chage -d 0 zhangsan
   22  cat /etc/shadow | grep zhangsan
   23  history

2.修改配置文件記錄的歷史為20條,並立即生效。

[root@localhost ~]# vim /etc/profile
#HISTSIZE=1000
HISTSIZE=20
[root@localhost ~]# source /etc/profile

3.再次查看命令歷史記錄。

[root@localhost ~]# history
    6  useradd lisi && echo "000000" | passwd --stdin lisi
    7  grep "/bin/bash$" /etc/passwd
    8  lsattr /etc/passwd /etc/shadow
    9  chattr -i /etc/passwd /etc/shadow
   10  lsattr /etc/passwd /etc/shadow
   11  useradd lisi && echo "000000" | passwd --stdin lisi
   12  grep "/bin/bash$" /etc/passwd
   13  cat /etc/shadow
   14  yum install vim -y
   15  vim /etc/login.defs
   16  useradd wangwu && echo "000000" | passwd --stdin wangwu
   17  cat /etc/shadow | grep wangwu
   18  chage -M 30 lisi
   19  cat /etc/shadow | grep lisi
   20  chage -d 0 zhangsan
   21  cat /etc/shadow | grep zhangsan
   22  history
   23  vim /etc/profile
   24  source /etc/profile
   25  history

4.配置註銷時自動清除歷史記錄,並註銷登錄。

[root@localhost ~]# vim ~/.bash_logout
# ~/.bash_logout
history -c
clear
[root@localhost ~]# logout

5.再次登錄,無法查看以前的命令歷史記錄。

[root@localhost ~]# history
    1  history

TMOUT 自動註銷

BASH終端環境中,可以設置一個閑置超時時間,當超過指定時間沒有執行任何命令時,將自動註銷終端。

  • 添加系統環境變數TMOUT,對所有用戶生效
# vi /etc/profile
export TMOUT=600

Demo

1.添加TMOUT系統環境變數。

[root@localhost ~]# vim /etc/profile
export TMOUT=600

2.設置生效,並查看是否生效。

[root@localhost ~]# echo $TMOUT

[root@localhost ~]# source /etc/profile
[root@localhost ~]# echo $TMOUT
600

3.執行一些長時間的操作時,應使用unset取消超時。

[root@localhost ~]# unset TMOUT
[root@localhost ~]# echo $TMOUT

su 用戶安全切換

一般Linux系統不建議直接使用root用戶直接登錄,但在必要時可以使用su命令用來切換用戶。預設情況下,所有用戶都可以使用su命令,這樣必然會帶來安全風險。所以需要對su的使用做控制。

  • su - root

-:等同於--login-l,表示切換用戶後進入目標用戶的登錄shell環境。

  • 開啟pam_wheel認證,配置文件/etc/pam.d/su,去掉pam_wheel條目開頭註釋。
auth            required        pam_wheel.so use_uid

Demo

1.正常情況下zhangsan用戶可以切換root用戶。

[zhangsan@localhost ~]$ su - root
Password:
Last login: Wed Aug 28 13:33:12 CST 2019 from 192.168.128.1 on pts/0
[root@localhost ~]#

2.修改/etc/pam.d/su認證配置,去掉開頭#註釋,以啟用pam_wheel認證。

[root@localhost ~]# vim /etc/pam.d/su
auth            required        pam_wheel.so use_uid

3.查看wheel組,其中沒有已添加的用戶。(只有在wheel組中的用戶可以正常切換root用戶)

[root@localhost ~]# grep "^wheel" /etc/group
wheel:x:10:

4.再次嘗試切換root用戶,許可權拒絕。

[zhangsan@localhost ~]$ su - root
Password:
su: Permission denied

5.將zhangsan加入wheel組。

[root@localhost ~]# gpasswd -a zhangsan wheel
Adding user zhangsan to group wheel
[root@localhost ~]# grep "^wheel" /etc/group
wheel:x:10:zhangsan

6.再次嘗試切換root用戶,成功切換。

[zhangsan@localhost ~]$ su - root
Password:
Last login: Wed Aug 28 13:52:17 CST 2019 on pts/1
Last failed login: Wed Aug 28 14:01:26 CST 2019 on pts/1
There was 1 failed login attempt since the last successful login.

sudo 用戶提權

通過su可以切換root用戶,但是必須要知道密碼。若是給普通用戶一部分管理許可權,就可以不切換用戶,必要時使用sudo提升執行許可權。

  • 配置文件/etc/sudoers,可使用專門的工具visudo編輯,也可使用vi編輯器,但需要強制保存。基本配置格式如下。
user MACHINE=COMMANDS

user:授權的用戶名,或%組名,表示組內所有用戶。
MACHINE:使用此配置文件的主機名稱,一般設為localhost或者實際主機名。
COMMANDS:允許授權用戶通過sudo執行的特權命令,需要命令的完整路徑,多個以,分隔。

  • 集中定義別名:User_AliasHost_AliasCmnd_Alias,別名必須大寫。

例子:允許用戶jerrytomkcce在主機smtppop中執行rpmyum命令。

User_Alias OPERATORS=jerry,tom,kcce
Host_Alias MAILSVRS=smtp,pop
Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum
OPERATORS MAILSVRS=PKGTOOLS
  • 通配符*、取反符號!,一般授權某個目錄下所有命令,但取消其中個別命令時使用。
zhangsan localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route
  • 啟用日誌,配置文件添加以下參數。
Defaults logfile="/var/log/sudo"

Demo

1.已有普通用戶lisi、現有網卡配置。

[root@localhost ~]# id lisi
uid=1001(lisi) gid=1001(lisi) groups=1001(lisi)
[root@localhost ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.128.133  netmask 255.255.255.0  broadcast 192.168.128.255
        inet6 fe80::7d96:e043:e371:4943  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:5b:e0:09  txqueuelen 1000  (Ethernet)
        RX packets 32045  bytes 36669743 (34.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13480  bytes 1129005 (1.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2.使用lisi嘗試修改網卡地址,無法修改。

[lisi@localhost ~]$ ifconfig ens33 192.168.128.188
SIOCSIFADDR: Operation not permitted
SIOCSIFFLAGS: Operation not permitted
[lisi@localhost ~]$ sudo ifconfig ens33 192.168.128.188

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for lisi:
lisi is not in the sudoers file.  This incident will be reported.
[lisi@localhost ~]$ ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.128.133  netmask 255.255.255.0  broadcast 192.168.128.255
        inet6 fe80::7d96:e043:e371:4943  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:5b:e0:09  txqueuelen 1000  (Ethernet)
        RX packets 32410  bytes 36735375 (35.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13598  bytes 1141821 (1.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

3.使用root用戶編輯/etc/sudoers,給lisi添加授權。

[root@localhost ~]# visudo
lisi localhost=/sbin/ifconfig

4.使用lisi用戶再次嘗試修改地址,成功修改。

[lisi@localhost ~]$ sudo ifconfig ens33 192.168.128.188
[sudo] password for lisi:
[lisi@localhost ~]$ ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.128.188  netmask 255.255.255.0  broadcast 192.168.128.255
        inet6 fe80::7d96:e043:e371:4943  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:5b:e0:09  txqueuelen 1000  (Ethernet)
        RX packets 33575  bytes 36955964 (35.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13975  bytes 1187393 (1.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

5.使用sudo -l可以查看自己的sudo配置。

[lisi@localhost ~]$ sudo -l
[sudo] password for lisi:
Matching Defaults entries for lisi on localhost:
    !visiblepw, always_set_home, match_group_by_gid, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME
    LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User lisi may run the following commands on localhost:
    (root) /sbin/ifconfig

GRUB 密碼

預設情況下,CentOS 7啟動時,是可以隨意進入GRUB菜單修改引導參數的,為了安全,可以對其設置密碼,只有擁有相應的用戶與密碼才可以進入。

Demo

1.備份需要修改的GRUB配置文件。

[root@localhost ~]# cp -p /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
[root@localhost ~]# cp -p /etc/grub.d/00_header /etc/grub.d/00_header.bak

2.創建一個GRUB密碼備用。

[root@localhost ~]# grub2-mkpasswd-pbkdf2
Enter password:
Reenter password:
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.017517DF1145EF0A839EDB3E53A8D3E598D8E8477AFDC778DE66A97966F486B7C6017910C5BF1FAC9882F84E1F8697B56AB5E833480D616A7B28D4BA9F6C5B38.6C0516B81FDFF2382B3AA0FB700FA7FD716DF8B83EBA727349C36BEB9498201B795714429AA09641005C6A176324D16EB7FE63088D393FE1695269E34D20A3F3

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.017517DF1145EF0A839EDB3E53A8D3E598D8E8477AFDC778DE66A97966F486B7C6017910C5BF1FAC9882F84E1F8697B56AB5E833480D616A7B28D4BA9F6C5B38.6C0516B81FDFF2382B3AA0FB700FA7FD716DF8B83EBA727349C36BEB9498201B795714429AA09641005C6A176324D16EB7FE63088D393FE1695269E34D20A3F3
EOF

4.重新創建GRUB配置文件。

[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-ba010ae4b2944c52b216ec6259f230c0
Found initrd image: /boot/initramfs-0-rescue-ba010ae4b2944c52b216ec6259f230c0.img
done

5.重啟驗證。

[root@localhost ~]# reboot

6.驗證結果。

(1)使用上下取消讀秒,按下e預設進入3,可以隨意修改引導參數,不需要密碼。

GRUB1

(2)加入密碼後,需要輸入用戶名、密碼才可以進入3

GRUB2

(3)引導參數相關。

GRUB3


弱口令檢測

使用弱密碼會增加安全風險,而管理員可以使用john the Ripper這款開源工具,可以分析弱密碼,以便採取相應的安全措施。

Demo

1.安裝編譯器環境。

[root@localhost ~]# yum install gcc gcc-c++ -y

2.源代碼編譯安裝。

[root@localhost ~]# tar zxvf john-1.8.0.tar.gz -C ~
[root@localhost ~]# ll
total 5328
-rw-------. 1 root root    1241 Aug 16 17:16 anaconda-ks.cfg
drwxr-xr-x. 5 root root      53 Aug 28 15:33 john-1.8.0
-rw-r--r--. 1 root root 5450412 Aug 28 15:31 john-1.8.0.tar.gz
[root@localhost ~]# cd ~/john-1.8.0/src/
[root@localhost src]# ls
AFS_fmt.c  BF_fmt.c    compiler.c  DES_bs.c    formats.c  john.asm  logger.c      memory.c   os.h        ppc64.h     signals.c  times.h     wordlist.h
alpha.h    BF_std.c    compiler.h  DES_bs.h    formats.h  john.c    logger.h      memory.h   params.c    recovery.c  signals.h  trip_fmt.c  x86-64.h
alpha.S    BF_std.h    config.c    DES_fmt.c   getopt.c   john.com  Makefile      mips32.h   params.h    recovery.h  single.c   tty.c       x86-64.S
batch.c    BSDI_fmt.c  config.h    DES_std.c   getopt.h   john.h    Makefile.dep  mips64.h   pa-risc.h   rpp.c       single.h   tty.h       x86-any.h
batch.h    c3_fmt.c    cracker.c   DES_std.h   ia64.h     list.c    math.c        misc.c     path.c      rpp.h       sparc32.h  unafs.c     x86-mmx.h
bench.c    charset.c   cracker.h   detect.c    idle.c     list.h    math.h        misc.h     path.h      rules.c     sparc64.h  unique.c    x86-mmx.S
bench.h    charset.h   crc32.c     dummy.c     idle.h     LM_fmt.c  MD5_fmt.c     nonstd.c   ppc32alt.h  rules.h     status.c   unshadow.c  x86.S
best.c     common.c    crc32.h     external.c  inc.c      loader.c  MD5_std.c     options.c  ppc32.h     sboxes.c    status.h   vax.h       x86-sse.h
best.sh    common.h    DES_bs_b.c  external.h  inc.h      loader.h  MD5_std.h     options.h  ppc64alt.h  sboxes-s.c  symlink.c  wordlist.c  x86-sse.S
[root@localhost src]# make linux-x86-64
ln -sf x86-64.h arch.h
make ../run/john ../run/unshadow ../run/unafs ../run/unique \
        JOHN_OBJS="DES_fmt.o DES_std.o DES_bs.o DES_bs_b.o BSDI_fmt.o MD5_fmt.o MD5_std.o BF_fmt.o BF_std.o AFS_fmt.o LM_fmt.o trip_fmt.o dummy.o batch.o bench.o charset.o common.o compiler.o config.o cracker.o crc32.o external.o formats.o getopt.o idle.o inc.o john.o list.o loader.o logger.o math.o memory.o misc.o options.o params.o path.o recovery.o rpp.o rules.o signals.o single.o status.o tty.o wordlist.o unshadow.o unafs.o unique.o c3_fmt.o x86-64.o" \
        CFLAGS="-c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT" \
        LDFLAGS="-s  -lcrypt"
make[1]: Entering directory `/root/john-1.8.0/src'
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops DES_fmt.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops DES_std.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops DES_bs.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -Os -funroll-loops -finline-functions DES_bs_b.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops BSDI_fmt.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops MD5_fmt.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops MD5_std.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops BF_fmt.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops BF_std.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops AFS_fmt.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops LM_fmt.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops trip_fmt.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops dummy.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops batch.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops bench.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops charset.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops common.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops compiler.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops config.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops cracker.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops crc32.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops external.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops formats.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops getopt.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops idle.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops inc.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops john.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops list.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops loader.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops logger.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops math.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops memory.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops misc.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops options.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops params.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops path.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops recovery.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops rpp.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops rules.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops signals.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops single.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops status.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops tty.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops wordlist.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops unshadow.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops unafs.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops unique.c
gcc -c -Wall -Wdeclaration-after-statement -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops c3_fmt.c
gcc -c  x86-64.S
gcc DES_fmt.o DES_std.o DES_bs.o DES_bs_b.o BSDI_fmt.o MD5_fmt.o MD5_std.o BF_fmt.o BF_std.o AFS_fmt.o LM_fmt.o trip_fmt.o dummy.o batch.o bench.o charset.o common.o compiler.o config.o cracker.o crc32.o external.o formats.o getopt.o idle.o inc.o john.o list.o loader.o logger.o math.o memory.o misc.o options.o params.o path.o recovery.o rpp.o rules.o signals.o single.o status.o tty.o wordlist.o unshadow.o unafs.o unique.o c3_fmt.o x86-64.o -s  -lcrypt -o ../run/john
rm -f ../run/unshadow
ln -s john ../run/unshadow
rm -f ../run/unafs
ln -s john ../run/unafs
rm -f ../run/unique
ln -s john ../run/unique
make[1]: Leaving directory `/root/john-1.8.0/src'

3.運行腳本,分析賬戶、密碼文件,只有zhangsan用戶的密碼強度足夠,沒有分析出來。

[root@localhost src]# cd ~/john-1.8.0/run/
[root@localhost run]# ls
ascii.chr  digits.chr  john  john.conf  lm_ascii.chr  mailer  makechr  password.lst  relbench  unafs  unique  unshadow
[root@localhost run]# ./john /etc/passwd /etc/shadow
Loaded 4 password hashes with 4 different salts (crypt, generic crypt(3) [?/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
000000           (root)
000000           (lisi)
000000           (wangwu)
3g 0:00:09:38 90% 2/3 0.005184g/s 272.3p/s 278.2c/s 278.2C/s christmased..freemaned
Use the "--show" option to display all of the cracked passwords reliably
Session aborted

nmap 埠掃描

定期的埠掃描,可以找出網路中不可控的應用服務,及時關閉不安全的服務,減小安全風險。

  • nmap [掃描類型] [選項] <掃描目標>

常用的掃描類型:

-sSTCP SYN掃描(半開掃描):只向目標發出SYN數據包,如果收到SYN/ACK響應包就認為目標埠正在監聽,並立即斷開連接;否則認為目標埠並未開放。
-sTTCP連接掃描:這是完整的TCP掃描方式,用來建立一個TCP連接,如果成功則認為目標埠正在監聽服務,否則認為目標埠並未開放。
-sFTCP FIN掃描:開放的埠會忽略這種數據包,關閉的埠會回應RST數據包。許多防火牆只對SYN數據包進行簡單過濾,而忽略了其他形式的TCP攻擊包。這種類型的掃描可間接檢測防火牆的健壯性。
-sUUDP掃描:探測目標主機提供哪些UDP服務,UDP掃描的速度會比較慢。
-sPICMP掃描:類似於ping檢測,快速判斷目標主機是否存活,不做其他掃描。
-P0:跳過ping檢測:這種方式認為所有目標主機時存活的,當對方不響應ICMP請求時,使用這種方式可以避免無法ping通而放棄掃描。

常用的選項:

-p:指定掃描的埠
-n:禁用反向DNS解析,加快掃描速度

Demo

1.掃描本機開放了哪些TCP埠。

[root@localhost ~]# nmap -sT 127.0.0.1

Starting Nmap 6.40 ( http://nmap.org ) at 2019-08-28 15:58 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0011s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
25/tcp open  smtp

Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds

2.掃描本機開放了哪些UDP埠。

[root@localhost ~]# nmap -sU 127.0.0.1

Starting Nmap 6.40 ( http://nmap.org ) at 2019-08-28 16:01 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00011s latency).
Not shown: 999 closed ports
PORT   STATE         SERVICE
68/udp open|filtered dhcpc

Nmap done: 1 IP address (1 host up) scanned in 48.02 seconds

3.掃描網段中的哪些主機線上。

[root@localhost ~]# nmap -sP 192.168.128.0/24

Starting Nmap 6.40 ( http://nmap.org ) at 2019-08-28 16:03 CST
Nmap scan report for 192.168.128.1
Host is up (0.000074s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 192.168.128.2
Host is up (0.00017s latency).
MAC Address: 00:50:56:E0:8F:D1 (VMware)
Nmap scan report for 192.168.128.132
Host is up (0.00024s latency).
MAC Address: 00:0C:29:BC:AB:96 (VMware)
Nmap scan report for 192.168.128.254
Host is up (0.00029s latency).
MAC Address: 00:50:56:E7:AC:DE (VMware)
Nmap scan report for 192.168.128.133
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 4.16 seconds

4.掃描某主機開啟了哪些TCP埠。

[root@localhost ~]# nmap -sT 192.168.128.132

Starting Nmap 6.40 ( http://nmap.org ) at 2019-08-28 16:07 CST
Nmap scan report for 192.168.128.132
Host is up (0.68s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
22/tcp open  ssh
MAC Address: 00:0C:29:BC:AB:96 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 58.14 seconds

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我們知道,之前的運維告警多通過mail 等方式通知到相應的人員,難以實現隨時隨地的查看。隨著手機APP的發展,很多告警開始發送到IM軟體上去。目前比較常用的是發送到微信和釘釘上,今天我們將重點放在釘釘上。群機器人是釘釘群的高級擴展功能,群機器人可以將第三方服務的信息聚合到群聊中,實現自動化的信息同步 ...
  • [toc] 性能優化概述 1、瞭解每個服務 2、需要瞭解業務模式 3、最後我們需要考慮性能與安全 壓力測試工具 瞭解影響性能指標 系統性能優化 文件句柄,Linux一切皆文件,文件句柄可以理解為就是一個索引,文件句柄會隨著我們進程的調用頻繁增加,系統預設文件句柄是有限制的,不能讓一個進程無限的調用, ...
  • UNIX中採用的目錄結構非常簡單,每個目錄項只包含一個文件名及其i結點 號。有關文件類型、長度、時間、所有者和簇號等信息都放在i結點。 ...
  • VMware14虛擬機安裝RedHad6系統步驟 redhat網盤資源:鏈接:https://pan.baidu.com/s/1GlT20vevqbZ9qTxsGH1ZzA 提取碼:oh57 如果網盤失效請聯繫博主 1.首先我們先打開VMware虛擬機,然後點擊新建虛擬機。 2.選擇自定義,也可以選 ...
  • 在運行中輸入:eventvwr.msc,即可打開事件日誌。 常見的Windows事件ID說明 Windows事件日誌中記錄的信息中,關鍵的要素包含事件級別、記錄時間、事件來源描述、涉及的用戶、電腦、操作代碼及任務類別等。其中事件的ID與操作系統的版本有關,以下舉出的事件ID的操縱系統為Vista/ ...
  • 恢復內容開始 1、查看所有連接的PID 2、過濾特定埠 3、查看占用443埠的進程 4、結束進程。在未確認進程用途前,不建議結束進程 ...
  • 本人安裝的Ubuntu16.04.6系統原生內核為4.15.0,但安裝的應用僅支持4.8.0以下內核,因此需要降內核。PS:降內核有風險,操作前請慎重 1、查看可用的內核 輸入命令查看已經可用的內核 我有兩個可用的內核,4.15.0和4.8.0,如果沒有自己想要的內核,可以另行安裝。命令如下: 2、 ...
  • 首先聲明datalab本人未完成,有4道題目沒有做出來。本文博客記錄下自己的解析,以便以後回憶。如果能幫助到你就更好了,如果覺得本文沒啥技術含量,也望多多包涵。 / bitAnd x&y using only ~ and | Example: bitAnd(6, 5) = 4 Legal ops: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...