zoukankan      html  css  js  c++  java
  • 系统安全及应用

    1、系统账号清理

    (1)将非登录用户的shell设为/sbin/nologin

         ●    方法一 : usermod -s

         ●    方法二 : chsh 命令,交互式修改

         ●    方法三 : chsh -s

    ps:除了上述三种方法,也可以直接 vi 编辑 /etc/passwd 文件进行修改

    (2)锁定长期不使用的账号

         ●     方法一 :passwd -l (将在密文前增加2个“!”)解锁 passwd -u 查看 passwd -s

         ●     方法二 :usermod -L (将在密文前增加1个“!”)解锁 usermod -U     

    ps:若用 passwd -l 命令对某账号进行锁定,若用 usermod -U 命令解锁,需要进行两次操作才可以

     (3)删除无用的账号

         ●     userdel [r] 用户名

     (4)锁定账号文件  /etc/passwd、/etc/shadow

         ●    锁定:chattr + i /etc/passwd /etc/shadow

         ●    解锁:chattr - i /etc/passwd /etc/shadow

         ●    查看:lsattr /etc/passwd /etc/shadow

    ps:锁定后即使是超户,也不能修改该文件,即不能创建、删除、修改用户信息

    PS:有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了。chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的linux系统都是2.6以上内核了。通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。lsattr命令是显示chattr命令设置的文件属性。

    这两个命令是用来查看和改变文件、目录属性的,与chmod这个命令相比,chmod只是改变文件的读写、执行权限,更底层的属性控制是由chattr来改变的。

    chattr命令的用法:chattr [ -RVf ] [ -v version ] [ mode ] files…
    最关键的是在[mode]部分,[mode]部分是由+-=和[ASacDdIijsTtu]这些字符组合的,这部分是用来控制文件的
    属性。

    + :在原有参数设定基础上,追加参数。
    - :在原有参数设定基础上,移除参数。
    = :更新为指定参数设定。
    A:文件或目录的 atime (access time)不可被修改(modified), 可以有效预防例如手提电脑磁盘I/O错误的发生。
    S:硬盘I/O同步选项,功能类似sync。
    a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。
    c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。
    d:即no dump,设定文件不能成为dump程序的备份目标。
    i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。
    j:即journal,设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂 载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为 data=journal,则该参数自动失效。
    s:保密性地删除文件或目录,即硬盘空间被全部收回。
    u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion。
    各参数选项中常用到的是a和i。a选项强制只可添加不可删除,多用于日志系统的安全设定。而i是更为严格的安全设定,只有superuser (root) 或具有CAP_LINUX_IMMUTABLE处理能力(标识)的进程能够施加该选项。

    应用举例:

    1、用chattr命令防止系统中某个关键文件被修改:
    # chattr +i /etc/resolv.conf

    然后用mv /etc/resolv.conf等命令操作于该文件,都是得到Operation not permitted 的结果。vim编辑该文件时会提示W10: Warning: Changing a readonly file错误。要想修改此文件就要把i属性去掉: chattr -i /etc/resolv.conf

    # lsattr /etc/resolv.conf
    会显示如下属性
    ----i-------- /etc/resolv.conf

    2、让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:
    # chattr +a /var/log/messages

    2、密码安全控制

     (1)设置密码有效期

        ●    修改某个已存在用户的密码有效期:

                    chage -M 天数 用户名

                   passwd -x 天数 用户名

        ●    设置今后添加用户时的默认密码有效期

     方法一:vi 编辑 /etc/login.defs 文件,修改 “PASS_MAX_DAY” 后面的数值

     (2)要求用户下次登录时修改密码

        ●    方法:chage -d 0 用户名

    出于安全考虑设置密码规则

    设置密码到期的天数。 
    用户必须在天内更改密码。 
    此设置仅影响创建用户,而不会影响现有用户。 
    如果设置为现有用户,请运行命令“chage -M(days)(user)”。

    2、密码策略
    2.1编辑/etc/login.defs 指定如下参数的值。

    PASS_MAX_DAYS 99999
    PASS_MIN_DAYS 0
    PASS_MIN_LEN 5
    PASS_WARN_AGE 7

    参数值的解释:

    PASS_MAX_DAYS           (设置密码过期日期)
    PASS_MIN_DAYS               (设置密码最少更改日期)
    PASS_MIN_LEN                  (设置密码最小长度)时指密码设置的最小长度,一般定义为8位以上
    PASS_WARN_AGE              (设置过期提前警告天数)
    2.2 设置账户锁定登陆失败锁定次数、锁定时间

    编辑/etc/pam.d/system- auth

    首先 cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak

    #vi /etc/pam.d/system-auth

    auth required pam_tally.so onerr=fail deny=6 unlock_time=300

    解释:设置位密码连续六次锁定,锁定时间300秒

    解锁用户 faillog -u <用户名> -r

    2.3 设置口令的复杂程度。

    编辑/etc/pam.d/system- auth 首先 cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak

    #vi /etc/pam.d/system-auth

    找到pam_cracklib.so 在后面加一些参数,

    例:password requisite pam_cracklib.so minlen=8 ucredit=-2 lcredit=-2 dcredit=-5 ocredit=-1

    意思为最少有2个大写字符,2个小写字符,5个数字, 1个符号

    2.4 限制su的权限

    如果你不想任何人能够用su作为root,可以编辑/etc/pam.d/su文件,增加如下两行:

    auth sufficient /lib/security/pam_rootok.so debug

    auth required /lib/security/pam_wheel.so group=isd

    这时,仅isd组的用户可以用su作为root。此后,如果你希望用户admin能够用su作为root,可以运行如下命令

    # usermod -G10 admin

    2.5 设置最小密码长度。  用户不能设置小于此参数的密码长度。

    # set 8 for minimum password length

    [root@linuxprobe~]# authconfig --passminlen=8 --update

    # the parameter is set in a config below

    [root@linuxprobe~]# grep "^minlen" /etc/security/pwquality.conf

    minlen = 8

    2.6 在新密码中设置同一类的允许连续字符的最大数目

    # set 4 for maximum number of allowed consecutive characters of the same class

    [root@linuxprobe~]# authconfig --passmaxclassrepeat=4 --update

    # the parameter is set in a config below

    [root@linuxprobe~]# grep "^maxclassrepeat" /etc/security/pwquality.conf

    maxclassrepeat = 4

    2.7 在新密码中至少需要一个小写字符。

    [root@linuxprobe~]# authconfig --enablereqlower --update

    # the parameter is set in a config below

    # (if you'd like to edit the value, edit it with vi and others)

    [root@linuxprobe~]# grep "^lcredit" /etc/security/pwquality.conf

    lcredit = -1

    2.8 在新密码中至少需要一个大写字符

    [root@linuxprobe~]# authconfig --enablerequpper --update

    # the parameter is set in a config below

    # (if you'd like to edit the value, edit it with vi and others)

    [root@linuxprobe~]# grep "^ucredit" /etc/security/pwquality.conf

    ucredit = -1

    2.9 在新密码中至少需要一个数字

    [root@linuxprobe~]# authconfig --enablereqdigit --update

    # the parameter is set in a config below

    # (if you'd like to edit the value, edit it with vi and others)

    [root@linuxprobe~]# grep "^dcredit" /etc/security/pwquality.conf

    dcredit = -1

    2.10 密码包括至少一个特殊字符

    [root@linuxprobe~]# authconfig --enablereqother --update

    # the parameter is set in a config below

    # (if you'd like to edit the value, edit it with vi and others)

    [root@linuxprobe~]# grep "^ocredit" /etc/security/pwquality.conf

    ocredit = -1

    2.11 在新密码中设置单调字符序列的最大长度。(ex?'12345','fedcb')

    [root@linuxprobe~]# vi /etc/security/pwquality.conf

    # add to the end

    maxsequence = 3

    2.12 设置新密码中不能出现在旧密码中的字符数

    [root@linuxprobe~]# vi /etc/security/pwquality.conf

    # add to the end

    difok = 5

    2.13  检查来自用户passwd条目的GECOS字段的长度超过3个字符的字是否包含在新密码中。

    [root@linuxprobe~]# vi /etc/security/pwquality.conf

    # add to the end

    gecoscheck = 1

    2.14 设置不能包含在密码中的Ssace分隔的单词列表

    [root@linuxprobe~]# vi /etc/security/pwquality.conf

    # add to the end

    badwords = denywords1 denywords2 denywords3

    2.15 为新密码设置hash / crypt算法。 (默认为sha512)

    # show current algorithm

    [root@linuxprobe~]# authconfig --test | grep hashing

    password hashing algorithm is md5

    # chnage algorithm to sha512

    [root@linuxprobe~]# authconfig --passalgo=sha512 --update

    [root@linuxprobe~]# authconfig --test | grep hashing

    password hashing algorithm is sha512

    3、历史命令限制

     (1)减少历史的命令条数

         ●  方法一:vi 编辑 /etc/profile 文件,修改 “ HISTSIZE = ” 后面的数值   

    [root@www ~]#source  /etc/profile         使 /etc/profile 配置文件生效,此时全局生效

    ps:查看历史命令条数   echo $HISTSIZE     历史命令调用    history (!+数字序列号 或 !+命令 或!+命令首字符)      Ctrl + R   

    [root@FNSHB109 ~]# cat /etc/profile

    pathmunge函数的作用是将一个路径添加到PATH变量中,如果PATH变量中已有此路径则不作操作

    pathmunge () {
        case ": ${PATH}:" in
            *:"$1":*)
               ;;
            *)
              if [ "$2" = "after" ] ; then
              PATH=$PATH:$1
              else
              PATH=$1:$PATH
              fi
       esac
    }

    设置用户的EUID, 标识实际的登录用户ID, 对于root用户, id默认为0

    if [ -x /usr/bin/id ]; then
        if [ -z "$EUID" ]; then
           # ksh workaround
           EUID=`id -u`
           UID=`id -ru`
        fi
        USER="`id -un`"
        LOGNAME=$USER
    MAIL
    ="/var/spool/mail/$USER"
    fi

    如果是root用户,则将/usr/sbin /usr/local/sbin添加到PATH变量中

    if [ "$EUID" = "0" ]; then
            pathmunge /usr/sbin
            pathmunge /usr/local/sbin
       else
            pathmunge /usr/local/sbin after
            pathmunge /usr/sbin after
       fi

    初始化HOSTNAME

    HOSTNAME=`/usr/bin/hostname 2>/dev/null`

    当输入history命令时,最多显示多少命令

    HISTSIZE=1000
    
    if [ "$HISTCONTROL" = "ignorespace" ] ; then
           export HISTCONTROL=ignoreboth #在不想被记住的命令前面输入一个空格,该命令就不会出现在历史记录中
      else
          export HISTCONTROL=ignoredups #剔除历史记录的命令中连续的重复条目
      fi

    将上边初始化的几个变量设为环境变量

    export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

    将上边初始加粗样式化的几个变量设为环境变量

    if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
           umask 002 普通用户umask
        else
           umask 022 root用户umask
        fi

    对/etc/profile.d/下.sh结尾的文件进行循环

    for i in /etc/profile.d/*.sh ; do
          if [ -r "$i" ]; then 如果该文件可读
              if [ "${-#*i}" != "$-" ]; then 如果$-变量中包含i
                . "$i" 使用当前SHELL直接执行该文件
              else
                . "$i" >/dev/null 否则将执行结果抛弃
             fi
          fi
       done
    
    unset i 最后删除此脚本中用到的变量和函数
    unset -f pathmunge
    export LANG=C 和语言相关的环境变量

    PATH: 决定了shell将到哪些目录中寻找命令或程序

    export PATH=/home/buildmgr/bin5.6/mercurial-scripts/bin:/ap/local/devtools/bin:$PATH 
    export HGHOME=/home/buildmgr/bin5.6
    export GHS_LMHOST=@fnlicsv2,asblx18,fnlx14
    export GHS_LMWHICH=ghs
    fi

         ●  方法二:export HISTSIZE = 数值       仅当前用户环境下生效

     (2)注销时自动清空历史命令

         ● 方法:vi 编辑宿主目录下的 “ .bash_logout ” 文件,添加 “ history -c”

    ps:清空配置文件 .bash_history       方法一: >.bash_history

                                                            方法二:echo " " >.bash_history

                                                            方法三: vi 进入 " .bash_history " 文件,输入 “ dG ”

    4、终端自动注销

    (1)方法一:vi 编辑 /etc/profile 文件,添加 “ TMOUT = 数值 ” 

    [root@www ~]#source  /etc/profile         使 /etc/profile 配置文件生效,此时全局生效

    ps:source = .      unset TMOUT   注销命令

    (2)方法二:export TMOUT = 数值     仅当前用户环境下生效

     
  • 相关阅读:
    tensorflow之tf.meshgrid()
    Python中数据的保存和读取
    透视投影推导
    tensorflow之tf.slice()
    tensorflow的tf.train.Saver()模型保存与恢复
    偶数分割求平均值
    母牛的故事
    统计一行的不重复的单词字符个数
    N个顶点构成多边形的面积
    贪心法基本入门
  • 原文地址:https://www.cnblogs.com/2567xl/p/11329285.html
Copyright © 2011-2022 走看看