Ubuntu 16.04.3 LTS操作系统安全加固

操作系统下载链接:https://releases.ubuntu.com/16.04/ubuntu-16.04.3-desktop-amd64.iso

操作系统版本:Ubuntu 16.04.3 LTS

安全基线策略

1.配置口令复杂度策略限制口令为8位以上数字、字母、特殊字符组合;
2.配置登录失败处理策略,连续登录失败5次后锁定用户10分钟;
3.配置不仅仅通过root用户进行日常运维操作;
4.限制root用户无法通过SSH直接远程登录,仅非root用户能够通过SSH远程登录;
5.配置操作行为、重要文件的写、执行行为、安全事件的审计策略、审计日志集中审计策略;

前置操作

sudo passwd root
su -
apt-get -y install openssh-server vim

口令复杂度策略

安全基线说明

1.配置口令复杂度策略限制口令为8位以上数字、字母、特殊字符组合;
2.所有Linux操作系统用户均遵循口令复杂度策略;

相关涉及标准

《GB/T 22239-2019 信息安全技术 网络安全等级保护基本要求》应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;

检测操作步骤

通过cat /etc/pam.d/common-password核查口令复杂度配置:

cat /etc/pam.d/common-password
#
# /etc/pam.d/common-password - password-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define the services to be
# used to change user passwords.  The default is pam_unix.# Explanation of pam_unix options:
#
# The "sha512" option enables salted SHA512 passwords.  Without this option,
# the default is Unix crypt.  Prior releases used the option "md5".
#
# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in
# login.defs.
#
# See the pam_unix manpage for other options.# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules.  See
# pam-auth-update(8) for details.# here are the per-package modules (the "Primary" block)
password        [success=1 default=ignore]      pam_unix.so obscure sha512
# here's the fallback if no module succeeds
password        requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
password        required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
password        optional        pam_gnome_keyring.so
# end of pam-auth-update config
cat /etc/login.defs
#
# /etc/login.defs - Configuration control definitions for the login package.
#
# Three items must be defined:  MAIL_DIR, ENV_SUPATH, and ENV_PATH.
# If unspecified, some arbitrary (and possibly incorrect) value will
# be assumed.  All other items are optional - if not specified then
# the described action or option will be inhibited.
#
# Comment lines (lines beginning with "#") and blank lines are ignored.
#
# Modified for Linux.  --marekm# REQUIRED for useradd/userdel/usermod
#   Directory where mailboxes reside, _or_ name of file, relative to the
#   home directory.  If you _do_ define MAIL_DIR and MAIL_FILE,
#   MAIL_DIR takes precedence.
#
#   Essentially:
#      - MAIL_DIR defines the location of users mail spool files
#        (for mbox use) by appending the username to MAIL_DIR as defined
#        below.
#      - MAIL_FILE defines the location of the users mail spool files as the
#        fully-qualified filename obtained by prepending the user home
#        directory before $MAIL_FILE
#
# NOTE: This is no more used for setting up users MAIL environment variable
#       which is, starting from shadow 4.0.12-1 in Debian, entirely the
#       job of the pam_mail PAM modules
#       See default PAM configuration files provided for
#       login, su, etc.
#
# This is a temporary situation: setting these variables will soon
# move to /etc/default/useradd and the variables will then be
# no more supported
MAIL_DIR        /var/mail
#MAIL_FILE      .mail#
# Enable logging and display of /var/log/faillog login failure info.
# This option conflicts with the pam_tally PAM module.
#
FAILLOG_ENAB            yes#
# Enable display of unknown usernames when login failures are recorded.
#
# WARNING: Unknown usernames may become world readable.
# See #290803 and #298773 for details about how this could become a security
# concern
LOG_UNKFAIL_ENAB        no#
# Enable logging of successful logins
#
LOG_OK_LOGINS           no#
# Enable "syslog" logging of su activity - in addition to sulog file logging.
# SYSLOG_SG_ENAB does the same for newgrp and sg.
#
SYSLOG_SU_ENAB          yes
SYSLOG_SG_ENAB          yes#
# If defined, all su activity is logged to this file.
#
#SULOG_FILE     /var/log/sulog#
# If defined, file which maps tty line to TERM environment parameter.
# Each line of the file is in a format something like "vt100  tty01".
#
#TTYTYPE_FILE   /etc/ttytype#
# If defined, login failures will be logged here in a utmp format
# last, when invoked as lastb, will read /var/log/btmp, so...
#
FTMP_FILE       /var/log/btmp#
# If defined, the command name to display when running "su -".  For
# example, if this is defined as "su" then a "ps" will display the
# command is "-su".  If not defined, then "ps" would display the
# name of the shell actually being run, e.g. something like "-sh".
#
SU_NAME         su#
# If defined, file which inhibits all the usual chatter during the login
# sequence.  If a full pathname, then hushed mode will be enabled if the
# user's name or shell are found in the file.  If not a full pathname, then
# hushed mode will be enabled if the file exists in the user's home directory.
#
HUSHLOGIN_FILE  .hushlogin
#HUSHLOGIN_FILE /etc/hushlogins#
# *REQUIRED*  The default PATH settings, for superuser and normal users.
#
# (they are minimal, add the rest in the shell startup files)
ENV_SUPATH      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH        PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games#
# Terminal permissions
#
#       TTYGROUP        Login tty will be assigned this group ownership.
#       TTYPERM         Login tty will be set to this permission.
#
# If you have a "write" program which is "setgid" to a special group
# which owns the terminals, define TTYGROUP to the group number and
# TTYPERM to 0620.  Otherwise leave TTYGROUP commented out and assign
# TTYPERM to either 622 or 600.
#
# In Debian /usr/bin/bsd-write or similar programs are setgid tty
# However, the default and recommended value for TTYPERM is still 0600
# to not allow anyone to write to anyone else console or terminal# Users can still allow other people to write them by issuing
# the "mesg y" command.TTYGROUP        tty
TTYPERM         0600#
# Login configuration initializations:
#
#       ERASECHAR       Terminal ERASE character ('\010' = backspace).
#       KILLCHAR        Terminal KILL character ('\025' = CTRL/U).
#       UMASK           Default "umask" value.
#
# The ERASECHAR and KILLCHAR are used only on System V machines.
#
# UMASK is the default umask value for pam_umask and is used by
# useradd and newusers to set the mode of the new home directories.
# 022 is the "historical" value in Debian for UMASK
# 027, or even 077, could be considered better for privacy
# There is no One True Answer here : each sysadmin must make up his/her
# mind.
#
# If USERGROUPS_ENAB is set to "yes", that will modify this UMASK default value
# for private user groups, i. e. the uid is the same as gid, and username is
# the same as the primary group name: for these, the user permissions will be
# used as group permissions, e. g. 022 will become 002.
#
# Prefix these values with "0" to get octal, "0x" to get hexadecimal.
#
ERASECHAR       0177
KILLCHAR        025
UMASK           022#
# Password aging controls:
#
#       PASS_MAX_DAYS   Maximum number of days a password may be used.
#       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
#       PASS_WARN_AGE   Number of days warning given before a password expires.
#
PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_WARN_AGE   7#
# Min/max values for automatic uid selection in useradd
#
UID_MIN                  1000
UID_MAX                 60000
# System accounts
#SYS_UID_MIN              100
#SYS_UID_MAX              999#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN                  1000
GID_MAX                 60000
# System accounts
#SYS_GID_MIN              100
#SYS_GID_MAX              999#
# Max number of login retries if password is bad. This will most likely be
# overriden by PAM, since the default pam_unix module has it's own built
# in of 3 retries. However, this is a safe fallback in case you are using
# an authentication module that does not enforce PAM_MAXTRIES.
#
LOGIN_RETRIES           5#
# Max time in seconds for login
#
LOGIN_TIMEOUT           60#
# Which fields may be changed by regular users using chfn - use
# any combination of letters "frwh" (full name, room number, work
# phone, home phone).  If not defined, no changes are allowed.
# For backward compatibility, "yes" = "rwh" and "no" = "frwh".
#
CHFN_RESTRICT           rwh#
# Should login be allowed if we can't cd to the home directory?
# Default in no.
#
DEFAULT_HOME    yes#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD    /usr/sbin/userdel_local#
# Enable setting of the umask group bits to be the same as owner bits
# (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is
# the same as gid, and username is the same as the primary group name.
#
# If set to yes, userdel will remove the user´s group if it contains no
# more members, and useradd will create by default a group with the name
# of the user.
#
USERGROUPS_ENAB yes#
# Instead of the real user shell, the program specified by this parameter
# will be launched, although its visible name (argv[0]) will be the shell's.
# The program may do whatever it wants (logging, additional authentification,
# banner, ...) before running the actual shell.
#
# FAKE_SHELL /bin/fakeshell#
# If defined, either full pathname of a file containing device names or
# a ":" delimited list of device names.  Root logins will be allowed only
# upon these devices.
#
# This variable is used by login and su.
#
#CONSOLE        /etc/consoles
#CONSOLE        console:tty01:tty02:tty03:tty04#
# List of groups to add to the user's supplementary group set
# when logging in on the console (as determined by the CONSOLE
# setting).  Default is none.
#
# Use with caution - it is possible for users to gain permanent
# access to these groups, even when not logged in on the console.
# How to do it is left as an exercise for the reader...
#
# This variable is used by login and su.
#
#CONSOLE_GROUPS         floppy:audio:cdrom#
# If set to "yes", new passwords will be encrypted using the MD5-based
# algorithm compatible with the one used by recent releases of FreeBSD.
# It supports passwords of unlimited length and longer salt strings.
# Set to "no" if you need to copy encrypted passwords to other systems
# which don't understand the new algorithm.  Default is "no".
#
# This variable is deprecated. You should use ENCRYPT_METHOD.
#
#MD5_CRYPT_ENAB no#
# If set to MD5 , MD5-based algorithm will be used for encrypting password
# If set to SHA256, SHA256-based algorithm will be used for encrypting password
# If set to SHA512, SHA512-based algorithm will be used for encrypting password
# If set to DES, DES-based algorithm will be used for encrypting password (default)
# Overrides the MD5_CRYPT_ENAB option
#
# Note: It is recommended to use a value consistent with
# the PAM modules configuration.
#
ENCRYPT_METHOD SHA512#
# Only used if ENCRYPT_METHOD is set to SHA256 or SHA512.
#
# Define the number of SHA rounds.
# With a lot of rounds, it is more difficult to brute forcing the password.
# But note also that it more CPU resources will be needed to authenticate
# users.
#
# If not specified, the libc will choose the default number of rounds (5000).
# The values must be inside the 1000-999999999 range.
# If only one of the MIN or MAX values is set, then this value will be used.
# If MIN > MAX, the highest value will be used.
#
# SHA_CRYPT_MIN_ROUNDS 5000
# SHA_CRYPT_MAX_ROUNDS 5000################# OBSOLETED BY PAM ##############
#                                               #
# These options are now handled by PAM. Please  #
# edit the appropriate file in /etc/pam.d/ to   #
# enable the equivelants of them.
#
################MOTD_FILE
#DIALUPS_CHECK_ENAB
#LASTLOG_ENAB
#MAIL_CHECK_ENAB
#OBSCURE_CHECKS_ENAB
#PORTTIME_CHECKS_ENAB
#SU_WHEEL_ONLY
#CRACKLIB_DICTPATH
#PASS_CHANGE_TRIES
#PASS_ALWAYS_WARN
#ENVIRON_FILE
#NOLOGINS_FILE
#ISSUE_FILE
#PASS_MIN_LEN
#PASS_MAX_LEN
#ULIMIT
#ENV_HZ
#CHFN_AUTH
#CHSH_AUTH
#FAIL_DELAY################# OBSOLETED #######################
#                                                 #
# These options are no more handled by shadow.    #
#                                                 #
# Shadow utilities will display a warning if they #
# still appear.                                   #
#                                                 #
#################################################### CLOSE_SESSIONS
# LOGIN_STRING
# NO_PASSWORD_CONSOLE
# QMAIL_DIR

前置操作步骤

/bin/cp -rf /etc/pam.d/common-password /tmp/common-password
/bin/cp -rf /etc/login.defs /tmp/login.defs

加固操作步骤

apt-get -y install libpam-cracklib
sed -i 's/password\trequisite\t\t\tpam_deny.so/password\trequisite\t\t\tpam_cracklib.so minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1/g' /etc/pam.d/common-password
sed -i 's/PASS_MAX_DAYS\t99999/PASS_MAX_DAYS\t99999/g' /etc/login.defs

加固确认步骤

cat /etc/pam.d/common-password
#
# /etc/pam.d/common-password - password-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define the services to be
# used to change user passwords.  The default is pam_unix.# Explanation of pam_unix options:
#
# The "sha512" option enables salted SHA512 passwords.  Without this option,
# the default is Unix crypt.  Prior releases used the option "md5".
#
# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in
# login.defs.
#
# See the pam_unix manpage for other options.# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules.  See
# pam-auth-update(8) for details.# here are the per-package modules (the "Primary" block)
password        [success=1 default=ignore]      pam_unix.so obscure sha512
# here's the fallback if no module succeeds
password        requisite                       pam_cracklib.so minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
password        required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
password        optional        pam_gnome_keyring.so
# end of pam-auth-update config
cat /etc/login.defs
#
# /etc/login.defs - Configuration control definitions for the login package.
#
# Three items must be defined:  MAIL_DIR, ENV_SUPATH, and ENV_PATH.
# If unspecified, some arbitrary (and possibly incorrect) value will
# be assumed.  All other items are optional - if not specified then
# the described action or option will be inhibited.
#
# Comment lines (lines beginning with "#") and blank lines are ignored.
#
# Modified for Linux.  --marekm# REQUIRED for useradd/userdel/usermod
#   Directory where mailboxes reside, _or_ name of file, relative to the
#   home directory.  If you _do_ define MAIL_DIR and MAIL_FILE,
#   MAIL_DIR takes precedence.
#
#   Essentially:
#      - MAIL_DIR defines the location of users mail spool files
#        (for mbox use) by appending the username to MAIL_DIR as defined
#        below.
#      - MAIL_FILE defines the location of the users mail spool files as the
#        fully-qualified filename obtained by prepending the user home
#        directory before $MAIL_FILE
#
# NOTE: This is no more used for setting up users MAIL environment variable
#       which is, starting from shadow 4.0.12-1 in Debian, entirely the
#       job of the pam_mail PAM modules
#       See default PAM configuration files provided for
#       login, su, etc.
#
# This is a temporary situation: setting these variables will soon
# move to /etc/default/useradd and the variables will then be
# no more supported
MAIL_DIR        /var/mail
#MAIL_FILE      .mail#
# Enable logging and display of /var/log/faillog login failure info.
# This option conflicts with the pam_tally PAM module.
#
FAILLOG_ENAB            yes#
# Enable display of unknown usernames when login failures are recorded.
#
# WARNING: Unknown usernames may become world readable.
# See #290803 and #298773 for details about how this could become a security
# concern
LOG_UNKFAIL_ENAB        no#
# Enable logging of successful logins
#
LOG_OK_LOGINS           no#
# Enable "syslog" logging of su activity - in addition to sulog file logging.
# SYSLOG_SG_ENAB does the same for newgrp and sg.
#
SYSLOG_SU_ENAB          yes
SYSLOG_SG_ENAB          yes#
# If defined, all su activity is logged to this file.
#
#SULOG_FILE     /var/log/sulog#
# If defined, file which maps tty line to TERM environment parameter.
# Each line of the file is in a format something like "vt100  tty01".
#
#TTYTYPE_FILE   /etc/ttytype#
# If defined, login failures will be logged here in a utmp format
# last, when invoked as lastb, will read /var/log/btmp, so...
#
FTMP_FILE       /var/log/btmp#
# If defined, the command name to display when running "su -".  For
# example, if this is defined as "su" then a "ps" will display the
# command is "-su".  If not defined, then "ps" would display the
# name of the shell actually being run, e.g. something like "-sh".
#
SU_NAME         su#
# If defined, file which inhibits all the usual chatter during the login
# sequence.  If a full pathname, then hushed mode will be enabled if the
# user's name or shell are found in the file.  If not a full pathname, then
# hushed mode will be enabled if the file exists in the user's home directory.
#
HUSHLOGIN_FILE  .hushlogin
#HUSHLOGIN_FILE /etc/hushlogins#
# *REQUIRED*  The default PATH settings, for superuser and normal users.
#
# (they are minimal, add the rest in the shell startup files)
ENV_SUPATH      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH        PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games#
# Terminal permissions
#
#       TTYGROUP        Login tty will be assigned this group ownership.
#       TTYPERM         Login tty will be set to this permission.
#
# If you have a "write" program which is "setgid" to a special group
# which owns the terminals, define TTYGROUP to the group number and
# TTYPERM to 0620.  Otherwise leave TTYGROUP commented out and assign
# TTYPERM to either 622 or 600.
#
# In Debian /usr/bin/bsd-write or similar programs are setgid tty
# However, the default and recommended value for TTYPERM is still 0600
# to not allow anyone to write to anyone else console or terminal# Users can still allow other people to write them by issuing
# the "mesg y" command.TTYGROUP        tty
TTYPERM         0600#
# Login configuration initializations:
#
#       ERASECHAR       Terminal ERASE character ('\010' = backspace).
#       KILLCHAR        Terminal KILL character ('\025' = CTRL/U).
#       UMASK           Default "umask" value.
#
# The ERASECHAR and KILLCHAR are used only on System V machines.
#
# UMASK is the default umask value for pam_umask and is used by
# useradd and newusers to set the mode of the new home directories.
# 022 is the "historical" value in Debian for UMASK
# 027, or even 077, could be considered better for privacy
# There is no One True Answer here : each sysadmin must make up his/her
# mind.
#
# If USERGROUPS_ENAB is set to "yes", that will modify this UMASK default value
# for private user groups, i. e. the uid is the same as gid, and username is
# the same as the primary group name: for these, the user permissions will be
# used as group permissions, e. g. 022 will become 002.
#
# Prefix these values with "0" to get octal, "0x" to get hexadecimal.
#
ERASECHAR       0177
KILLCHAR        025
UMASK           022#
# Password aging controls:
#
#       PASS_MAX_DAYS   Maximum number of days a password may be used.
#       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
#       PASS_WARN_AGE   Number of days warning given before a password expires.
#
PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_WARN_AGE   7#
# Min/max values for automatic uid selection in useradd
#
UID_MIN                  1000
UID_MAX                 60000
# System accounts
#SYS_UID_MIN              100
#SYS_UID_MAX              999#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN                  1000
GID_MAX                 60000
# System accounts
#SYS_GID_MIN              100
#SYS_GID_MAX              999#
# Max number of login retries if password is bad. This will most likely be
# overriden by PAM, since the default pam_unix module has it's own built
# in of 3 retries. However, this is a safe fallback in case you are using
# an authentication module that does not enforce PAM_MAXTRIES.
#
LOGIN_RETRIES           5#
# Max time in seconds for login
#
LOGIN_TIMEOUT           60#
# Which fields may be changed by regular users using chfn - use
# any combination of letters "frwh" (full name, room number, work
# phone, home phone).  If not defined, no changes are allowed.
# For backward compatibility, "yes" = "rwh" and "no" = "frwh".
#
CHFN_RESTRICT           rwh#
# Should login be allowed if we can't cd to the home directory?
# Default in no.
#
DEFAULT_HOME    yes#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD    /usr/sbin/userdel_local#
# Enable setting of the umask group bits to be the same as owner bits
# (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is
# the same as gid, and username is the same as the primary group name.
#
# If set to yes, userdel will remove the user´s group if it contains no
# more members, and useradd will create by default a group with the name
# of the user.
#
USERGROUPS_ENAB yes#
# Instead of the real user shell, the program specified by this parameter
# will be launched, although its visible name (argv[0]) will be the shell's.
# The program may do whatever it wants (logging, additional authentification,
# banner, ...) before running the actual shell.
#
# FAKE_SHELL /bin/fakeshell#
# If defined, either full pathname of a file containing device names or
# a ":" delimited list of device names.  Root logins will be allowed only
# upon these devices.
#
# This variable is used by login and su.
#
#CONSOLE        /etc/consoles
#CONSOLE        console:tty01:tty02:tty03:tty04#
# List of groups to add to the user's supplementary group set
# when logging in on the console (as determined by the CONSOLE
# setting).  Default is none.
#
# Use with caution - it is possible for users to gain permanent
# access to these groups, even when not logged in on the console.
# How to do it is left as an exercise for the reader...
#
# This variable is used by login and su.
#
#CONSOLE_GROUPS         floppy:audio:cdrom#
# If set to "yes", new passwords will be encrypted using the MD5-based
# algorithm compatible with the one used by recent releases of FreeBSD.
# It supports passwords of unlimited length and longer salt strings.
# Set to "no" if you need to copy encrypted passwords to other systems
# which don't understand the new algorithm.  Default is "no".
#
# This variable is deprecated. You should use ENCRYPT_METHOD.
#
#MD5_CRYPT_ENAB no#
# If set to MD5 , MD5-based algorithm will be used for encrypting password
# If set to SHA256, SHA256-based algorithm will be used for encrypting password
# If set to SHA512, SHA512-based algorithm will be used for encrypting password
# If set to DES, DES-based algorithm will be used for encrypting password (default)
# Overrides the MD5_CRYPT_ENAB option
#
# Note: It is recommended to use a value consistent with
# the PAM modules configuration.
#
ENCRYPT_METHOD SHA512#
# Only used if ENCRYPT_METHOD is set to SHA256 or SHA512.
#
# Define the number of SHA rounds.
# With a lot of rounds, it is more difficult to brute forcing the password.
# But note also that it more CPU resources will be needed to authenticate
# users.
#
# If not specified, the libc will choose the default number of rounds (5000).
# The values must be inside the 1000-999999999 range.
# If only one of the MIN or MAX values is set, then this value will be used.
# If MIN > MAX, the highest value will be used.
#
# SHA_CRYPT_MIN_ROUNDS 5000
# SHA_CRYPT_MAX_ROUNDS 5000################# OBSOLETED BY PAM ##############
#                                               #
# These options are now handled by PAM. Please  #
# edit the appropriate file in /etc/pam.d/ to   #
# enable the equivelants of them.
#
################MOTD_FILE
#DIALUPS_CHECK_ENAB
#LASTLOG_ENAB
#MAIL_CHECK_ENAB
#OBSCURE_CHECKS_ENAB
#PORTTIME_CHECKS_ENAB
#SU_WHEEL_ONLY
#CRACKLIB_DICTPATH
#PASS_CHANGE_TRIES
#PASS_ALWAYS_WARN
#ENVIRON_FILE
#NOLOGINS_FILE
#ISSUE_FILE
#PASS_MIN_LEN
#PASS_MAX_LEN
#ULIMIT
#ENV_HZ
#CHFN_AUTH
#CHSH_AUTH
#FAIL_DELAY################# OBSOLETED #######################
#                                                 #
# These options are no more handled by shadow.    #
#                                                 #
# Shadow utilities will display a warning if they #
# still appear.                                   #
#                                                 #
#################################################### CLOSE_SESSIONS
# LOGIN_STRING
# NO_PASSWORD_CONSOLE
# QMAIL_DIR

恢复操作步骤

/bin/cp -rf /tmp/common-password /etc/pam.d/common-password
/bin/cp -rf /tmp/login.defs /etc/login.defs

登录失败处理功能

安全基线说明

1.启用登录失败处理功能;
2.配置登录失败处理策略,连续登录失败5次后锁定用户10分钟;

相关涉及标准

《GB/T 22239-2019 信息安全技术 网络安全等级保护基本要求》应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;

检测操作步骤

通过cat /etc/pam.d/common-auth核查用户账号登录失败处理策略:

cat /etc/pam.d/common-auth
#
# /etc/pam.d/common-auth - authentication settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.).  The default is to use the
# traditional Unix authentication mechanisms.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules.  See
# pam-auth-update(8) for details.# here are the per-package modules (the "Primary" block)
auth    [success=1 default=ignore]      pam_unix.so nullok_secure
# here's the fallback if no module succeeds
auth    requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth    required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config

前置操作步骤

/bin/cp -rf /etc/pam.d/common-auth /tmp/common-auth

加固操作步骤

sed -i "17 i\auth\\trequired\\t\\t\\tpam_tally2.so onerr=fail deny=5 unlock_time=600 even_deny_root root_unlock_time=600" /etc/pam.d/common-auth
sed -i 's/auth\trequired\t\t\tpam_permit.so/# auth\trequired\t\t\tpam_permit.so/g' /etc/pam.d/common-auth

查看封禁用户情况

pam_tally2

解封用户

pam_tally2 --user root --reset

加固确认步骤

cat /etc/pam.d/common-auth
#
# /etc/pam.d/common-auth - authentication settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.).  The default is to use the
# traditional Unix authentication mechanisms.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules.  See
# pam-auth-update(8) for details.# here are the per-package modules (the "Primary" block)
auth    required                        pam_tally2.so onerr=fail deny=5 unlock_time=600 even_deny_root root_unlock_time=600
auth    [success=1 default=ignore]      pam_unix.so nullok_secure
# here's the fallback if no module succeeds
auth    requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
# auth    required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config

恢复操作步骤

/bin/cp -rf /tmp/common-auth /etc/pam.d/common-auth

安全审计

安全基线说明

1.配置操作行为、重要文件的写、执行行为、安全事件的审计策略;
2.配置操作行为、重要文件的写、执行行为、安全事件的审计日志集中审计策略;

相关涉及标准

《GB/T 22239-2019 信息安全技术 网络安全等级保护基本要求》应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计;
《GB/T 22239-2019 信息安全技术 网络安全等级保护基本要求》应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等;

检测操作步骤

核查是否启用auditd服务:

service auditd status

核查是否启用audit规则:

auditctl -s

核查是否配置重要文件操作:

auditctl -l

核查是否配置安全日志、操作日志发送至日志服务器集中审计的策略:

cat /etc/rsyslog.conf
#  /etc/rsyslog.conf    Configuration file for rsyslog.
#
#                       For more information see
#                       /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html
#
#  Default logging rules can be found in /etc/rsyslog.d/50-default.conf#################
#### MODULES ####
#################module(load="imuxsock") # provides support for local system logging
module(load="imklog")   # provides kernel logging support
#module(load="immark")  # provides --MARK-- message capability# provides UDP syslog reception
#module(load="imudp")
#input(type="imudp" port="514")# provides TCP syslog reception
#module(load="imtcp")
#input(type="imtcp" port="514")# Enable non-kernel facility klog messages
$KLogPermitNonKernelFacility on###########################
#### GLOBAL DIRECTIVES ####
############################
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat# Filter duplicated messages
$RepeatedMsgReduction on#
# Set the default permissions for all log files.
#
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog#
# Where to place spool and state files
#
$WorkDirectory /var/spool/rsyslog#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf

前置操作步骤

/bin/cp -rf /etc/rsyslog.conf /tmp/rsyslog.conf

加固操作步骤

apt-get -y install auditd
echo "-w /etc/passwd -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/shadow -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/crontab -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/hosts -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/hosts.allow -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/hosts.deny -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/fstab -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/group -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/gshadow -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/ntp.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/sysctl.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/security/limits.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /boot/grub/grub.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/ssh/sshd_config -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/ssh/ssh_config -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/udev/rules.d -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/profile -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/kdump.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/lvm/lvm.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/login.defs -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/rsyslog.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/auditd.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/sysconfig -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/multipath.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
sed -i 's/active = no/active = yes/g' /etc/audisp/plugins.d/syslog.conf
sed -i 's/args = LOG_INFO/args = LOG_LOCAL6/g' /etc/audisp/plugins.d/syslog.conf

该位置的@10.0.0.1:514需要匹配TCP/UDP协议、日志服务器IP地址、日志服务器监听端口情况

echo "local6.*        /var/log/local6.log" >> /etc/rsyslog.conf
echo "local6.*        @10.0.0.1:514" >> /etc/rsyslog.conf
echo "authpriv.*        @10.0.0.1:514" >> /etc/rsyslog.conf
vi /etc/bash.bashrc

按Shift+G快速跳到最后o添加如下内容

logger -p local6.info  \"====================nowuser:`whoami`\|loginstatus:`who am i`==================== is login \"
export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; }); logger -p local6.info  \[nowuser\:$(whoami)\] \[loginstatus:$(who am i)\] \#command\# \""${msg}"\"; }'
source /etc/bash.bashrc
systemctl restart rsyslog
systemctl restart auditd

加固确认步骤

auditctl -l
cat /etc/passwd /etc/shadow
tail -10 /var/log/audit/audit.log
tail -20 /var/log/local6.log | grep -E "passwd|content|command"

恢复操作步骤

auditctl -D
apt-get -y remove auditd
rm -f /etc/audit/rules.d/audit.rules
/bin/cp -rf /tmp/rsyslog.conf /etc/rsyslog.conf
rm -f /etc/audisp/plugins.d/syslog.conf
vi /etc/bash.bashrc

按Shift+G快速跳到最后删除最后两行

logger -p local6.info  \"====================nowuser:`whoami`\|loginstatus:`who am i`==================== is login \"
export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; }); logger -p local6.info  \[nowuser\:$(whoami)\] \[loginstatus:$(who am i)\] \#command\# \""${msg}"\"; }'
source /etc/bash.bashrc
service rsyslog restart

批量操作

前置批量操作

/bin/cp -rf /etc/pam.d/common-password /tmp/common-password
/bin/cp -rf /etc/login.defs /tmp/login.defs
/bin/cp -rf /etc/pam.d/common-auth /tmp/common-auth
/bin/cp -rf /etc/rsyslog.conf /tmp/rsyslog.conf

加固批量操作

apt-get -y install libpam-cracklib auditd
sed -i 's/password\trequisite\t\t\tpam_deny.so/password\trequisite\t\t\tpam_cracklib.so minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1/g' /etc/pam.d/common-password
sed -i 's/PASS_MAX_DAYS\t99999/PASS_MAX_DAYS\t99999/g' /etc/login.defs
sed -i "17 i\auth\\trequired\\t\\t\\tpam_tally2.so onerr=fail deny=5 unlock_time=600 even_deny_root root_unlock_time=600" /etc/pam.d/common-auth
sed -i 's/auth\trequired\t\t\tpam_permit.so/# auth\trequired\t\t\tpam_permit.so/g' /etc/pam.d/common-auth
echo "-w /etc/passwd -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/shadow -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/crontab -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/hosts -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/hosts.allow -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/hosts.deny -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/fstab -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/group -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/gshadow -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/ntp.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/sysctl.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/security/limits.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /boot/grub/grub.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/ssh/sshd_config -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/ssh/ssh_config -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/udev/rules.d -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/profile -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/kdump.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/lvm/lvm.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/login.defs -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/rsyslog.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/auditd.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/sysconfig -p wax -k changefileaction" >> /etc/audit/audit.rules
echo "-w /etc/multipath.conf -p wax -k changefileaction" >> /etc/audit/audit.rules
sed -i 's/active = no/active = yes/g' /etc/audisp/plugins.d/syslog.conf
sed -i 's/args = LOG_INFO/args = LOG_LOCAL6/g' /etc/audisp/plugins.d/syslog.conf

该位置的@10.0.0.1:514需要匹配TCP/UDP协议、日志服务器IP地址、日志服务器监听端口情况

echo "local6.*        /var/log/local6.log" >> /etc/rsyslog.conf
echo "local6.*        @10.0.0.1:514" >> /etc/rsyslog.conf
echo "authpriv.*        @10.0.0.1:514" >> /etc/rsyslog.conf
vi /etc/bash.bashrc

按Shift+G快速跳到最后o添加如下内容

logger -p local6.info  \"====================nowuser:`whoami`\|loginstatus:`who am i`==================== is login \"
export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; }); logger -p local6.info  \[nowuser\:$(whoami)\] \[loginstatus:$(who am i)\] \#command\# \""${msg}"\"; }'
source /etc/bash.bashrc
systemctl restart rsyslog
systemctl restart auditd

恢复批量操作

/bin/cp -rf /tmp/common-password /etc/pam.d/common-password
/bin/cp -rf /tmp/login.defs /etc/login.defs
/bin/cp -rf /tmp/common-auth /etc/pam.d/common-auth
auditctl -D
apt-get -y remove auditd
rm -f /etc/audit/rules.d/audit.rules
/bin/cp -rf /tmp/rsyslog.conf /etc/rsyslog.conf
rm -f /etc/audisp/plugins.d/syslog.conf
vi /etc/bash.bashrc

按Shift+G快速跳到最后删除最后两行

logger -p local6.info  \"====================nowuser:`whoami`\|loginstatus:`who am i`==================== is login \"
export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; }); logger -p local6.info  \[nowuser\:$(whoami)\] \[loginstatus:$(who am i)\] \#command\# \""${msg}"\"; }'
source /etc/bash.bashrc
service rsyslog restart

Ubuntu 16.04.3 LTS操作系统安全加固相关推荐

  1. Ubuntu 16.04.6 LTS 发布:紧急修复 APT 漏洞

    Ubuntu 16.04 LTS (Xenial Xerus) 操作系统上周发布了第6个维护版本更新,以解决近期发现的 APT 漏洞. 正如早些时候报道的那样,Canonical 开始为其 Ubunt ...

  2. 在Ubuntu 16.04.6 LTS上升级python 3.5到3.7.3实录

    缘由 我想安装一个python模块you-get,发现只能使用pip3安装,但是我发现我的Ubuntu 16.04.6 LTS上有python3.5,但是没有pip3,也无法成功安装,真是要了我的老命 ...

  3. 在Ubuntu 16.04.6 LTS上安装python3.7和pip3后出现Command '('lsb_release', '-a')' 出错问题的解决方法

    在Ubuntu 16.04.6 LTS上安装python3.7和pip3后出现Command '('lsb_release', '-a')' returned non-zero exit status ...

  4. 在Ubuntu 16.04.6 LTS上升级Go到最新版1.12.5实录

    上一次我在Ubuntu 16.04.3 LTS上从源码安装了Go,当时最新的版本是1.10,参见我之前的博文 https://blog.csdn.net/tao_627/article/details ...

  5. 在Ubuntu 16.04.5 LTS上利用python中的PIL模块压缩一百多兆的单张图片实操

    在前面的博文中,我将300多张电影海报拼接为了一张103MB的巨幅图片,我想拿它做电脑桌面(1080P),但是这么多的图片,存储和加载是个麻烦事儿,需要将它压缩到几MB大小. 在Ubuntu 16.0 ...

  6. 在Ubuntu 16.04.5 LTS上升级python的pip版本实录

    在ubuntu 16.04.5 LTS上使用Python安装模块时,比较顺手的方法是使用pip命令.这次,我在安装一个模块时,老是提示下面的问题,比较不爽.所以,我就照着提示做了一遍,记录下来,以作备 ...

  7. 在Ubuntu 16.04.3 LTS上运行go+https+json示例

    下面是我依据网上资料的实操过程,记录以作备忘.该示例给出了https通信并处理json文件的例子. 平台:Ubuntu 16.04.3 LTS go版本:1.10 1.生成自签名的服务器端的私钥KEY ...

  8. 在Ubuntu 16.04.3 LTS上玩转quic-go项目

    说明 quic-go是使用Go来重写chromium中的QUIC协议,将来计划过渡到IETF版本的QUIC协议. 目前该协议还处于不断更新和活跃之中,目前IETF版本的QUIC协议草案版本号已经到dr ...

  9. 在Ubuntu 16.04.3 LTS 和 Windows 下安装 Go 环境

    Ubuntu 16.04.3 LTS 环境 1.安装 sudo apt-get install golang-go 目前go的最新版本是1.9.2,但是在Ubuntu 16.04上采用预编译好的包安装 ...

最新文章

  1. android 47 service绑定
  2. 关于求N个无序数中第K大的数。
  3. TNS-04404 dbca
  4. 支持自定义的离线语音模块WT516P6Core 串口协议使用说明
  5. Oracle代码大全.从入门到熟练
  6. RHEL5下的DHCP服务和DHCP中继
  7. hibernate Criteria(条件查询接口)
  8. php中$stu_by,PHP基础案例二:计算学生年龄
  9. Java 面向对象:重写的理解
  10. keepalived 安装及配置VIP漂移
  11. 学习SQL:SQL Server数据透视表
  12. 怎么写c++ documentation_球鞋鞋标怎么看真假、有几种 耐克鞋标鉴定方法推荐
  13. 用友通ufo报表找不到服务器,用友软件UFO财务报表连接不上服务器或没有反映?...
  14. CentOS7和CentOS8 Asterisk 20.0.0 简单图形化界面5--libss7驱动7号信令
  15. 语音信号处理基础知识-常用特征及预处理
  16. 计算机网络中常见英文缩写所对应的名词整理
  17. XP需要计算机管理权限,xp无法无法使用管理员权限运行软件的解决步骤
  18. 四、redi性能测试、协议、事务
  19. 回首过去 展望未来
  20. 大数据开发教程——企业级离线数据仓库项目实战开发

热门文章

  1. 音频编码之opus(一)
  2. XML Schema教程
  3. Oracle AWR管理与维护
  4. drupal 6.0 入门教程 - 第一章
  5. 如何配置Thymeleaf教程,及Thymeleaf的简单使用教程【一篇足够入门】
  6. 嵌套/双层循环中的continue和break详解
  7. 《思危:犹太人的赚钱哲学》阅读
  8. 【一周头条盘点】中国软件网(2018.1.29~2018.2.2)
  9. 图片内,笔迹轨迹识别
  10. 广域网是什么?43.227.216.x