工作的一些内容,这是中国移动集团当前linux机器安全合规标准,找了点时间将其归类,并查了一些资料,每项配置是什么意思,不仅要知其然,还要知其所以然。好记性不如烂笔头。


1.  检查FTP配置-限制用户FTP登录

控制FTP进程缺省访问权限,当通过FTP服务创建新文件或目录时应屏蔽掉新文件或目录不应有的访问允许权限。

操作:

(1)vsftp:

# vi /etc/vsftp/vsftpd.conf 手动将userlist_enable改为yes

//限制/etc/vsftpd/user_list文件里的用户不能访问。

# vi /etc/pam.d/vsftpd

将file=后面的文件改成/etc/ftpusers

# vi /etc/ftpusers 手动添加用户即可

//用于保存不允许进行FTP登录的本地用户帐号。就是vsftp用户的黑名单。

(2)pure-ftpd:

# vi /etc/pam.d/pure-ftpd

将file=后面的文件改为/etc/ftpusers

# vi /etc/ftpusers 手动添加用户即可


2.  检查SSH协议版本是否存在严重的安全问题

将SSH协议版本修改为2,SSH1的存在严重的安全问题,甚至可以截获密码。

操作:

# vi /etc/ssh/sshd_config 手动修改Protocol为2


3. 检查口令锁定策略

对于采用静态口令认证技术的设备,应配置当用户连续认证失败次数超过6次(不含6次),锁定该用户使用的账号。

操作:

lsb_release -a     //查看版本信息

/etc/pam.d/common-auth(优先)或/etc/pam.d/passwd中

手动增加以下行

auth required pam_tally.so onerr=fail deny=6 unlocktime=300  (SuSE 9)

auth required pam_tally2.so onerr=fail deny=6 unlock_time=300 (SuSE 10+)


4.  检查是否记录帐户操作日志

设备应配置日志功能,记录用户对设备的操作,包括但不限于以下内容:账号创建、删除和权限修改,口令修改,读取和修改设备配置,读取和修改业务用户的话费数据、身份数据、涉及通信隐私数据。需记录要包含用户账号,执行命令总数、操作时间,操作内容。

操作:

cd /home/boco4a/

ftp *.*.*.*     //登陆ftp

ls

get acct*.rpm   //获取acct*.rpm包

by

ls

rpm -ivh acct*.rpm    //安装acct软件,然后运行下面命令

touch /var/adm/pacct   //新建存放日志审计操作的文件

/usr/sbin/accton /var/adm/pacct   //打开审计

/etc/init.d/acct restart   //启动

/etc/init.d/acct stop   //停止


5.  检查是否删除或锁定无关账号

应删除或锁定与设备运行、维护等工作无关的账号。

操作:

cat /etc/passwd

passwd -l 用户    //锁定用户

passwd -u 用户    //解锁已锁定的用户

usermod -s /bin/false games

usermod -s /bin/false nobody   //-s:--shell。修改用户shell为无效,用户不能登录,但可以有其他功能,如发送邮件,访问共享资源等。


6.  检查编译器是否安装在开发系统的机器上

删除所有的编译器和汇编程序。C编译器会构成对系统可信的威胁。编译器应该安装在开发系统的机器上,而不是一个生产应用系统上。

操作:

# rpm -e <软件包名>   //卸载编译器软件


7. 检查口令策略设置是否符合复杂度要求

对于采用静态口令认证技术的设备,口令长度至少8位,并包括数字、小写字母、大写字母和特殊符号4类中至少2类。

操作:

password required pam_cracklib.so minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1

minlen:长度    lcredit:小写字母    ucredit:大写字母    dcredit:数字    ocredit:特殊字符


8. 检查口令生存周期要求

对于采用静态口令认证技术的设备,维护人员使用的帐户口令的生存期不长于90天。

操作:

# vi /etc/login.defs 手动将PASS_MAX_DAYS设置为90


9. 检查口令重复次数限制

对于采用静态口令认证技术的设备,应配置设备,使用户不能重复使用最近5次(含5次)内已使用的口令。

操作:

# vi /etc/pam.d/passwd (SuSE 9)

# vi /etc/pam.d/common-password (SuSE 10+)

手动增加以下行

password required pam_pwcheck.so remember=5


10. 检查日志文件权限设置

设备应配置权限,控制对日志文件读取、修改和删除等操作。

操作:

ps -ef|grep syslog    //查看进程日志类型

chmod 640 /etc/rsyslog.conf   //设置日志文件640权限


11. 检查是否按角色进行帐号管理

根据系统要求及用户的业务需求,建立多账户组,将用户账号分配到相应的账户组。

操作:

# groupadd -g <新的组ID> smpadm   //新的组ID合新用户ID保持一致,最好大于1000

# useradd -d /home/smpadm -m -u <新的用户ID> -g smpadm smpadm

添加smpadm管理用户和组


12. 检查是否按用户分配账号责任到人

应按照用户分配账号。避免不同用户间共享账号。避免用户账号和设备间通信使用的账号共享。

操作(上同):

# groupadd -g <新的组ID> smpadm

# useradd -d /home/smpadm -m -u <新的用户ID> -g smpadm smpadm

添加smpadm管理用户和组


13. 检查是否非活动时断线

用户处于非活动时断线。

操作:

# vi /etc/ssh/sshd_config 手动修改

ClientAliveCountMax 0

ClientAliveInterval 300

// ClientAliveInterval指定了服务器端向客户端请求消息的时间间隔, 默认是0, 不发送。而ClientAliveInterval 60表示每分钟发送一次, 然后客户端响应, 这样就保持长连接了。ClientAliveCountMax表示服务器发出请求后客户端没有响应的次数。

上面命令表示客户端误操作300秒断开连接,超时次数0次,和下面这样写的效果一样:

ClientAliveCountMax 3

ClientAliveInterval 100


14. 检查是否记录su日志

设备应配置日志功能,记录用户使用SU命令的情况,记录不良的尝试记录。

操作:

# vi /etc/syslog.conf 手动添加如下

auth.info   /var/adm/authlog

# vi /etc/rsyslog.conf 手动添加如下

auth.info   /var/adm/authlog

# vi /etc/syslog-ng/syslog-ng.conf 手动添加如下

filter f_messages { level(info,notice,warn) and not facility(auth,authpriv,cron,daemon,mail,news); };

service syslog restart    //重启日志服务
tail -f /var/log/messages   //查看日志生成情况


15. 检查是否记录安全事件日志

设备应配置日志功能,记录对与设备相关的安全事件。

操作:

# vi /etc/syslog.conf 手动添加如下

.info、*.err;auth.info /var/log/auth.log

# vi /etc/rsyslog.conf 手动添加如下

.info、*.err;auth.info /var/log/auth.log

# vi /etc/syslog-ng/syslog-ng.conf 手动添加如下

filter f_messages { level(info,notice,warn) and not facility(auth,authpriv,cron,daemon,mail,news); };


16. 检查是否记录帐户登录日志

设备应配置日志功能,对用户登录进行记录,记录内容包括用户登录使用的账号,登录是否成功,登录时间,以及远程登录时,用户使用的IP地址。

操作:

# vi /etc/syslog.conf 手动添加如下

auth.info   /var/adm/authlog

# vi /etc/rsyslog.conf 手动添加如下

auth.info   /var/adm/authlog

# vi /etc/syslog-ng/syslog-ng.conf 手动添加如下

filter f_messages { level(info,notice,warn) and not facility(auth,authpriv,cron,daemon,mail,news); };


17. 检查是否禁止icmp重定向

主机系统应该禁止ICMP重定向,采用静态路由。

操作:

# vi /etc/sysctl.conf

手动添加net.ipv4.conf.all.accept_redirects=0


18. 检查是否配置日志选项

系统上运行的应用/服务也应该配置相应日志选项,比如cron。

操作:

# vi /etc/syslog.conf 手动添加如下

cron.*    /var/log/cronlog

# vi /etc/rsyslog.conf 手动添加如下

cron.*    /var/log/cronlog

# vi /etc/syslog-ng/syslog-ng.conf 手动添加如下

filter f_cron { facility(cron); };

destination cron { file("/var/log/cronlog"); };

log { source(src); filter(f_cron); destination(cron); };


19. 检查是否配置远程日志保存

设备配置远程日志功能,将需要重点关注的日志内容传输到日志服务器。

操作:

# vi /etc/syslog.conf 手动添加如下

*.*   @192.168.0.1

# vi /etc/rsyslog.conf 手动添加如下

*.*   @192.168.0.1

# vi /etc/syslog-ng/syslog-ng.conf 手动添加如下

filter f_auth { level(info) facility(auth); };

destination d_auth { udp("10.0.3.232" port(514));};

log { source(src); filter(f_ auth); destination(d_auth);};


20. 检查是否使用ssh替代telnet服务

对于使用IP协议进行远程维护的设备,设备应配置使用SSH等加密协议。

操作:

# service sshd start

# kill <telnet服务进程号>   //查看进程号:netstat –anp|more


21. 检查是否限制root远程登录

限制具备超级管理员权限的用户远程登录。远程执行管理员权限操作,应先以普通权限用户远程登录后,再切换到超级管理员权限账号后执行相应操作。

操作:

# vi /etc/ssh/sshd_config 手动修改PermitRootLogin为no  //不允许root以ssh远程登录

# vi /etc/securetty 手动将含有pts的条目注释   //pts是pesudo tty slave,是伪终端的slave端


22. 检查用户缺省UMASK

控制用户缺省访问权限,当在创建新文件或目录时 应屏蔽掉新文件或目录不应有的访问允许权限。防止同属于该组的其它用户及别的组的用户修改该用户的文件或更高限制。

操作:

# vi /etc/profile 手动添加如下

umask 027

/etc/profile系统环境变量设置,对所有用户产生影响。当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。

umask值用于设置用户在创建文件时的默认权限,当我们在系统中创建目录或文件时,目录或文件所具有的默认权限就是由umask值决定的。umask值一共有4组数字,其中第1组数字用于定义特殊权限,我们一般不予考虑,与一般权限有关的是后3组数字。

对于root用户,系统默认的umask值是0022;对于普通用户,系统默认的umask值是0002。执行umask命令可以查看当前用户的umask值。

对于root用户,他的umask值是022。当root用户创建目录时,默认的权限就是用最大权限777去掉相应位置的umask值权限,即对于所有者不必去掉任何权限,对于所属组要去掉w权限,对于其他用户也要去掉w权限,所以目录的默认权限就是755;当root用户创建文件时,默认的权限则是用最大权限666去掉相应位置的umask值,即文件的默认权限是644。

常用的umask值及对应的文件和目录权限

umask值 目录 文件

022   755  644

027   750  640

002   775  664

006   771  660

007   770  660


23. 检查帐号文件权限设置

在设备权限配置能力内,根据用户的业务需要,配置其所需的最小权限。

操作:

# chmod 644 /etc/passwd

# chmod 400 /etc/shadow

# chmod 644 /etc/group

/etc/passwd:存放用户信息文件夹,7个信息字段如下:

用户名: 密码 : uid  : gid :用户描述:主目录:登陆shell

/etc/shadow:是passwd的影子文件。

在linux中,口令文件在/etc/passwd中,早期的这个文件直接存放加密后的密码,前两位是"盐"值,是一个随机数,后面跟的是加密的密码。为了安全,现在的linux都提供了 /etc/shadow这个影子文件,密码放在这个文件里面,并且是只有root可读的。

9个字段如下:

1. 用户名:由于密码也需要与帐号对应啊~因此, 这个档案的第一栏就是帐号,必须要与 /etc/passwd 相同才行!

2. 密码:这个才是真正的密码,而且是 经过编码过的密码啦! 你只会看到有一些特殊符号的字母就是了!需要特别留意的是, 虽然这些加密过的密码很难被解出来,但是‘很难’不等于‘不会’,所以, 这个档案的预设属性是‘-rw-------’或者是‘-r--------’,亦即只有 root 才可以读写就是了!你得随时注意,不要不小心更动了这个档案的属性呢!另外, 如果是在密码栏的第一个字元为‘ * ’或者是‘ ! ’,表示这个帐号并不会被用来登入的意思。 所以万一哪一天你的某个使用者不乖时,可以先在这个档案中,将他的密码栏位的最前面多加一个 * !嘿嘿!他就无法使用该帐号啰!直到他变乖了,再给他启用啊!

3. 最近更动密码的日期:这个栏位记录了‘更动密码的那一天’的日期, 不过,很奇怪呀!在我的例子中怎么会是 12959 呢?呵呵,这个是因为计算 Linux 日期的时间是以 1970 年 1 月 1 日作为 1 ,而 1971 年 1 月 1 日则为 366 啦! 所以这个日期是累加的呢!得注意一下这个资料呦!那么最近的 2005 年 1 月 1 日就是 12784 啦,瞭解了吗?

4. 密码不可被更动的天数: 第四个栏位记录了这个帐号的密码需要经过几天才可以被变更!如果是 0 的话, 表示密码随时可以更动的意思。这的限制是为了怕密码被某些人一改再改而设计的!如果设定为 20 天的话,那么当你设定了密码之后, 20 天之内都无法改变这个密码呦!

5. 密码需要重新变更的天数: 由于害怕密码被某些‘有心人士’窃取而危害到整个系统的安全,所以有了这个栏位的设计。 你必须要在这个时间之内重新设定你的密码,否则这个帐号将会暂时失效。 而如果像上面的 99999 的话,那就表示,呵呵,密码不需要重新输入啦! 不过,如果是为了安全性,最好可以设定一段时间之后,严格要求使用者变更密码呢!

6. 密码需要变更期限前的警告期限:当帐号的密码失效期限快要到的时候, 就是上面那个‘必须变更密码’的那个时间时, 系统会依据这个栏位的设定,发出‘警告’言论给这个帐号,提醒他‘再过 n 天你的密码就要失效了,请尽快重新设定你的密码呦!’,如上面的例子,则是密码到期之前的 7 天之内,系统会警告该用户。

7. 密码过期的恕限时间:如果用户过了警告期限没有重新输入密码, 使得密码失效了,也就是说,你在‘必须变更密码的期限前,并没有变更你的密码!’ 那么该组密码就称为‘失效的密码’啰~怎么办?没关系,还有这个栏位的天数设计啊~ 意思就是说,当密码失效后,你还可以用这个密码在 n 天内进行登入的意思。 而如果在这个天数后还是没有变更密码,呵呵!那么您的帐号就失效了!无法登入!

8. 帐号失效日期:这个日期跟第三个栏位一样,都是使用 1970 年以来的总日数设定。这个栏位表示: 这个帐号在此栏位规定的日期之后,将无法再使用。 这个栏位会被使用通常应该是在‘收费服务’的系统中, 你可以规定一个日期让该帐号不能再使用啦!

9. 保留:最后一个栏位是保留的,看以后有没有新功能加入。

/etc/group:用于存放用户组信息,内容为4个字段如下:

1.组名:组名是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。

2.口令:口令字段存放的是用户组加密后的口令字。一般Linux系统的用户组都没有口令,即这个字段一般为空,或者是*。

3.组标识号(GID):组标识号与用户标识号类似,也是一个整数,被系统内部用来标识组。

4.组内用户列表:是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。

以root:x:0:root,linuxsir 为例:用户组root,x是密码段,表示没有设置密码,GID是0,root用户组下包括root、linuxsir以及GID为0的其它用户。


24. 检查程序通信账号周期要求

/etc/shadow中配置"postgres|oracle|sybase"口令过期时间小于等于180天。

操作:

# vi /etc/shadow 手动将这些用户第5列值修改为180。

Linux机器24项安全合规设置的更多相关文章

  1. Linux机器之间SSH免密钥登录设置

    SSH免密钥登录 私钥:密钥留在本机 公钥:密钥发给其他机 hadoop01 生成密钥: ssh-keygen -t rsa (密钥存放路径:/root/.ssh) id_rsa:私钥 id_rsa. ...

  2. Linux基线合规检查中各文件的作用及配置脚本

    1./etc/motd 操作:echo " Authorized users only. All activity may be monitored and reported " ...

  3. 利用ganymed-ssh2远程执行其它Linux机器上的shell命令

    实际应用中,有时候需要从web管理界面上,远程去启动其它linux主机上的程序,利用ssh协议可以方便的满足这一需求.事实上hadoop架构中,从nn上启动dn时,就是利用了免密码ssh登录.gany ...

  4. 阿里云安骑士-Centos7系统基线合规检测-修复记录

    执行命令 sysctl -w net.ipv4.conf.all.send_redirects=0sysctl -w net.ipv4.conf.default.send_redirects=0sys ...

  5. 有容云:上车 | 听老司机谈Docker安全合规建设

    编者注: 本文根据7月19日DockOne社群分享内容整理而成,分享嘉宾蒋运龙,有容云高级咨询顾问,一个IT的老兵,十年来混迹于存储.三网融合.多屏互动.智能穿戴.第三方支付.Docker等行业:经历 ...

  6. 浅谈 Docker 安全合规建设

    通过阅读网上帖子及浏览相关信息,大家可能会产生一种错觉:Docker 安全性不足,对 Docker 导入生产环境持保守态度.不过实际情况是,虽然我们需要对容器的安全性高度关注,但只要使用得当,完全可以 ...

  7. secureCRT安装,破解,连接linux机器(含安装包)

    1. 为什么需要安装secureCRT 我们的项目运行在服务器上,如果出现什么问题,或者升级的时候,需要对服务器进行操作,把处理好的项目发布到服务器上.如果我们就在服务器身边,那么直接在服务器上进行操 ...

  8. Android App隐私合规检测辅助工具(Camille)

    Camille Android App隐私合规检测辅助工具,项目仓库:https://github.com/zhengjim/camille 简介 现如今APP隐私合规十分重要,各监管部门不断开展AP ...

  9. GRC: 个人信息保护法, 个人隐私, 企业风险合规治理

    声明 个人原创, 转载需注明来源 https://www.cnblogs.com/milton/p/15885344.html 个人信息保护的历史和现状 个人信息保护的立法可追溯至德国黑森州1970年 ...

随机推荐

  1. Android基于mAppWidget实现手绘地图(八)–获取用户地理位置

    你有两种方式确定用户的当前位置: 1.使用安卓标准方式 2. 使用MapWidget的监听器 标准方式: 在你的acivity中加入: LocationManager locManager = (Lo ...

  2. tomcat6类加载器与类加载顺序

    tomcat6.0.32 com.dyyx.ShareUtils//返回系统当前时间public static String now(); package com.dyyx;import java.t ...

  3. oracle创建表相关

    --创建表 create table person( id number primary key, name ), birth date ); --创建序列 create sequence perso ...

  4. JAVA 设计模式 职责链模式

    用途 职责链模式 (Chain Of Responsibility) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系. 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个 ...

  5. RegularHelper

    private const string m_NumberPattm = @"^[-+]?(0{1}|(([1-9]){1}[0-9]{0,6}))?$"; private con ...

  6. qml基础学习 模型视图(一)

    一.理解qml模型和视图 qt的发展是迅速的,虽然在每一个release版本中或多或少都有bug,但是作为一个庞大的gui库,no,应该说是一个开发框架开说,qt已经算是做的相当好.qml部分是qt4 ...

  7. 基于WinCE的JSON 类库 源码

    基于WinCE的JSON 类库,可以将对象序列化成字符串和文件. 提示,其在反序列化时有一个BUG: 如果对象的某个字段值为 null,将其序列化成字符串,然后将该字符串反序列化成对象时会报异常. 这 ...

  8. [转]俞敏洪:我和马云就差了8个字... [来自: news.mbalib.com]

    我和马云差了 8 个字:越败越战,愈挫愈勇. 马云,我真的非常的佩服他,首先佩服他的是他跟我有同样的经历,我考了 3 年才考上了大学:他也是考了 3 年.我比他还要幸运一点,我考上的是北大的本科,马云 ...

  9. Linq和Lamda表达式的简单处理方式

    一 什么是LINQ? LINQ即Language Integrated Query(语言集成查询),LINQ是集成到C#和Visual Basic.NET这些语言中用于提供查询数据能力的一个新特性. ...

  10. 通过泛型数据,操作SQL数据库

    本人在操作数据库的时候,采用将对象的形式操作传入数据库,经过大量百度和朋友帮助,总结出如下两个接口.用于插入数据,提取数据. 要这样操作的前提条件,就是类名和表名一致,类字段和表字段一致就可以了 // ...