Linux机器24项安全合规设置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux机器24项安全合规设置相关的知识,希望对你有一定的参考价值。

工作的一些内容,这是中国移动集团当前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次),锁定该用户使用的账号。

 

操作:

/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 10.212.41.120     //登陆ftp,sec/[email protected]#$

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 用户    //锁定用户

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 dcredit=-1 ocredit=-1

minlen:密码长度 lcredit:小写字母个数 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); };


 

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项安全合规设置的主要内容,如果未能解决你的问题,请参考以下文章

K8s:开源安全平台 kubescape 实现 Pod 的安全合规检查/镜像漏洞扫描

linux系能优化

数据安全怎么做——数据跨境的思考

五项措施,让阿里云存储更安全

信息安全等级合规测评

Linux安全策略设置