笔者Q:972581034 交流群:605799367。有任何疑问可与笔者或加群交流

第1章 linux系统中用户角色划分

用户是角色是通过UID和GID识别的;特别是UID,在linux系统运维工作中,一个UID是唯一标识一个系统用户的账号(相当于我们的身份证)。

linux里面的用户分为三类,

1.超级用户

默认是root用户,其UID和GID均为0.root用户在每台unix/linux操作系统中都是唯一且真实存在的,通过它可以登录系统,可以操作系统中任何文件和命令,拥有最高的管理权限。

在生产环境中,一般会禁止root账号通过SSH远程连接服务器(保护好皇帝),当然了,也会更改默认的SSH端口(保护好皇宫),以加强系统安全。

2.普通用户

su - root,角色切换,农民起义,推翻皇帝,自己当皇帝。

3.虚拟用户

与真实普通用户区分开来,这类用户最大的特点是安装系统后默认就会存在,且默认情况大多数不能登录系统,但是,他们是系统正常运行不可缺少的,它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。例如:系统默认的bin、adm、nobody、mail用户等。由于服务器业务角色的不同,有部分用不到的系统服务被禁止开机执行,因此,在做系统安全优化时,被禁止开机启动了的服务对应的虚拟用户也是可以处理掉的(删除或注释)。

linux安全优化:

1、安装系统后可以删除用不到的虚拟用户,但最好不删而注释掉,万一出问题可以恢复回来。

2、我们自已部署服务的时候,也会创建虚拟用户,满足服务的需求!例如:

apache,nginx,mysql,nfs,rsync,nagios,zabbix,redis。

第2章 linux中系统不同用户角色对应的UID说明

UID为0是表示账号为超级用户,如需增加系统管理员账号可将该账号UID改为0,但建议用sudo替代

UID 1-499 为虚拟用户

UID 500-65535 为普通用户

第3章 用户及用户组配置文件介绍

linux系统下的账户文件主要有/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow四个文件。

第4章 /etc/skel

这个目录存放了新添加用户的环境变量

当我们useradd 创建一个用户时,会从这个目录中复制所有文件到用户的家目录中,相当于使用cp -a /etc/skel/* /home/oldboy/

通过修改、添加、删除/etc/skel目录下的文件,我们可以为新创建的用户提供统一的、标准的、初始化用户环境

作用:

1. 可以把通知的内容放到skel,让登录的人去看

2. 统一初始化新用户的环境变量

3. 面试题:出现-bash-4.1$问题原因及解决方法。

cp /etc/skel/.bash* ~

第5章 /etc/login.defs配置文件

文件是用来定义创建用户时需要的一些用户的配置信息。如创建用户时,是否需要家目录,UID和GID的范围,用户及密码的有效期限等等。

第6章 /etc/default/useradd文件(添加用户时默认的信息)

/etc/default/useradd文件是在使用useradd添加用户时的一个需要条用的一个默认的配置文件,可以使用“useradd -D 参数”,这样的命令格式来修改文件里面的内容。我们先来看一看它的内容:

[root@long ~]# cat /etc/default/useradd

# useradd defaults file

GROUP=100

HOME=/home #默认的家目录

INACTIVE=-1 #是否启用账号过期停权,-1表示不启用。

EXPIRE= #账号终止日期,不设置表示不启用。

SHELL=/bin/bash #新用户默认所用的shell类型。

SKEL=/etc/skel #配置新用户家目录的默认文件存放路径。前文件提到的/etc/skell,就是配在这里

CREATE_MAIL_SPOOL=yes #创建mail文件

第7章 实例

[root@oldboyedu ~]# #添加用户alex12306,UID指定为999,归属为用户组 root、oldboy、sa成员,并设置其用户注释信息为HandsomeBoy,设置家目录为/alex12306,其shell类型为/bin/sh。
[root@oldboyedu ~]# groupadd sa
[root@oldboyedu ~]# useradd -u 999 -G root,oldboy,sa -c "HandsomeBoy" -d /alex12306 -s /bin/sh alex12306
[root@oldboyedu ~]# id alex12306
uid=999(alex12306) gid=999(alex12306) groups=999(alex12306),0(root),510(oldboy),519(sa)
[root@oldboyedu ~]# tail -1 /etc/passwd
alex12306:x:999:999:HandsomeBoy:/alex12306:/bin/sh
[root@oldboyedu ~]# su - alex12306
-sh-4.1$ logout
[root@oldboyedu ~]# ll -d /alex12306/
drwx------ 2 alex12306 alex12306 4096 Feb 14 18:56 /alex12306/

7.1 passwd总结

在实际工作中,最常用的用法就是直接使用passwd加用户名设置和修改密码,其次是加--stdin参数批量无交互设置密码,其他的参数用的很少(包括-l,-u,-S等)

在生产场景中,我们的密码应尽可能的复杂且无规律,但又利于用户自已记忆

企业场景:

1. 密码要复杂8位以上字母特殊字符

2. 大的企业用户和密码统一管理(相当于活动目录,openldap)

3. 动态密码:动态口令,第三方提供自已开发也很简单。

4. /var/log/secure

5. 指纹(find+md5sum+定时任务)

6. 锁头chattr +i +a lsattr

7.2 实例

示例:要求oldboy666用户7天内不能更改密码,60天以后必须修改密码,过期前10天通知oldboy666用户,过期后30天禁止用户登录

[root@34moban ~]# useradd oldboy666

[root@34moban ~]# passwd oldboy666

Changing password for user oldboy666.

New password: 

BAD PASSWORD: it is too simplistic/systematic

BAD PASSWORD: is too simple

Retype new password: 

passwd: all authentication tokens updated successfully.

[root@34moban ~]# passwd -n 7 -x 60 -w 10 -i 30 oldboy666

Adjusting aging data for user oldboy666.

passwd: Success

[root@34moban ~]# chage -l oldboy666

Last password change : Feb 15, 2017

Password expires : Apr 16, 2017

Password inactive : May 16, 2017

Account expires : never

Minimum number of days between password change : 7

Maximum number of days between password change : 60

Number of days of warning before password expires : 10

chage -m 7 -M 60 -W 10 -I 30 oldboy çchage -m7 -M60 -W10 -I30

第8章 小结

和用户关联的四个文件:

/etc/passwd, /etc/shadow /etc/group /etc/gshadow

以上文件内容是由冒号分隔: /etc/passwd内容比较熟悉(放在大脑里),其它在大脑建立索引。

小结:

/etc/skel

/etc/login.defs

/etc/default/useradd

命令:

useradd(/etc/passwd,/etc/shadow /etc/group /etc/gshadow)

passwd(/etc/shadow)

groupadd(/etc/group)

chage(/etc/shadow)

第9章 userdel删除用户

userdel 命令功能是删除用户及用户相关信息,相关文件:

/etc/passwd 用户账户资料文件

/etc/shadow 用户账户资讯加密文件

/etc/group 用户资讯文件

/etc/gshadow 用户组密码资讯文件

userdel -r 用户目录下的档案一并移除。在其他位置上的相关文件件也将一一找出并删除

相关文件

/etc/passwd 用户账号资料文件

/etc/shadow 用户账号资讯加密文件

/etc/group 用户组资讯文件

企业场景处理文件:

一般不能确认用户相关目录有没有重要数据就不能用-r

删除经验:

1. vi /etc/passwd 注释掉用户,观察1个月,出问题还原。操作前备份。

2. 把登录shell改成/sbin/nologin

3. ldap(类似活动目录)账号统一管理的,库里干掉用户。全部都没了、

第10章 usermod

usermod命令功能十分强大,在生产场景中使用频率虽然不是很多,但很重要。它不仅能更改用户的shell类型,所归属的用户组,还能改用户密码有效期、登录名等很多用户的信息。

与usermod命令有关的文件有:

/etc/passwd 用户账号资料文件

/etc/shadow 用户账号资讯加密文件

/etc/group 用户组资讯文件

/etc/gshadow 组密码文件

第11章 su

su命令优缺点

su命令为我们管理系统带来很多方便,但是,通过su命令切换到root后,也带来了很大安全管理问题;比如系统有8个普通用户,都可以通过切换到root身份进行系统管理,甚至还可以改掉root的密码,让其他的普通用户无法再实现系统管理,还有,这么多用户中,有任何一人对系统操作的重大失误,都可能导致整个系统崩溃或数据损失。这样的非集权式管理,在一定程度上就对系统的安全造成了较大威胁。在工作中几乎有一半的问题来自于内部。

所以使用su命令切换身份在多个系统管理员共同管理的场合,并不是最好的选择,如果是一般的中小公司不超过3个管理员时,为了管理方便,使用su来共同管理是可以接受的。

我们既希望超级用户root密码掌握在少数或唯一的管理员手中,又希望多个系统管理员能够完成更多更复杂的系统管理的工作。那么,如何解决多个系统管理员都能管理系统的而又不让超级权限泛滥的需求

把要执行的脚本放入开机自启动配置文件/etc/rc.local中。

su - tddoc -c '/bin/sh /home/tddoc/bin/deploy.sh'

注意,这里就是在系统开机时,通过su - 用户-c “cmd”,执行的启动服务的命令,其中,

/bin/sh /home/tddoc/bin/deploy.sh就是仅能在tddoc用户下启动的服务命令脚本。通过普通用户跑服务是个很好的提升系统安全的好办法,在生产环境中,大多数的服务都可以通过普通用户来启动,而不用root。这样做,使得系统安全又提高了一个等级。目前,BAT等大公司均有采用。

第12章 sudo执行流程

用户或组

机器=(授权角色)

可以执行的命令

user

MACHINE=

COMMANDS

oldboy

ALL=(ALL)

/usr/sbin/useradd

第13章 sudo小结

1. echo命令是追加">>",不是重定向“>”,陈了echo外,可以用cat,sed等命令实现类似的功能。

2. 修改操作完成一定要执行visudo -c进行语法检查,这弥补了直接修改没有语法检查的不足。

3. 确保/etc/sudoers权限是正确的(-r--r-----),权限不对会导致sudo功能异常(Centos6权限不对也可以登录,但是/etc/sudoers440是最安全的)

4. 及时对授权的操作进行测试,验证是否正确(最好不要退出当前授权窗口,以便发现问题及时恢复)

5. 确保知道正确的root用户密码,以便在sudo出现问题时可以通过普通用户等执行su -命令切换到root进行恢复。

第14章 visudo别名

说明:

1. 在生产场景中,一般情况不需要设置主机别名,在定义授权规则时可以通过ALL来匹配所有的主机。

2. 请注意上面定义的规范,有些规范虽然不是必须的,但我们还是要求能够按照系统的标准来配置,这样可以避免意外的问题发生。

3. 以上Host Aliases内容截取自/etc/sudoers文件,最后两行取消了注释。

4. 其实就是一个逻辑上的主机组,当多台服务器共享一个/etc/sudoers时候会用到这个主机别名。

第15章 企业配置sudo命令用户行为日志审计

15.1 生产环境企业日志审计解决方案:

所谓日志审计,就是记录所有系统及相关用户行为的信息,并且可以自动分析、处理、展示(包括文本或录像)

下面是各种解决方案

l 通过环境变量命令及rsyslog服务进行所有用户的所有操作的全部日志审计(信息太大,不推荐)

l sudo配合rsyslog服务,进行sudo日志审计(审计信息较少,效果不错)。

l 在bash解释器程序里嵌入一个监视器,让所有被审计的系统用户使用修改过的增加了监视器的特殊bash程序作为解释程序。

l 齐治堡垒机:商业产品

l python开发的开源产品:CrazyEye

http://3060674.blog.51cto.com/3050674/1700814

l 开源跳板机(堡垒机)Jumpserver部署详解

http://blog.51cto.com/zt/658

l gateone web 跳板机

http://liftoffsoftware.com/Products/GateOne

sudo日志审计是专门对使用sudo命令的系统用户记录其执行的命令相关信息

15.2 服务器用户权限管理改造方案与实施项目

1. 提出权限整改解决方案改进公司超级权限root泛滥的现状。

2. 召集大家开会讨论确定方案后推进实施。

3. 实施后使得公司的权限管理更加表晰了(总结维护),从根本上降低了内部操作等不规范

15.3 服力器日志审计项目提出与实施

1. 权限控制后进一步实施对所有用户日志记录方案。

2. 通过sudo和syslog配合实现对所有用户进行日志审计并将记录集中管理。

3. 实施后让所有运维和开发的所有执行的命令都有记录可查,杜绝了内部人员的操作安全隐民患。

第16章 sudo日志审计

16.1 配置/etc/sudoers

一行即搞定

[root@34moban ~]# echo "Defaults logfile=/var/log/sudo.log" >/etc/sudoers

[root@34moban ~]# tail -1 /etc/sudoers

Defaults logfile=/var/log/sudo.log

[root@34moban ~]# visudo -c

/etc/sudoers: parsed OK

16.2 日志集中管理(了解):

1. rsync+inotify或定时任务+rsync,推到日志管理服务器上,10.0.0.7_20130302.sudo.log

2. rsyslog服务来处理。

echo "10.0.2.164 logserver" >> /etc/hosts

#日志服务器地址

echo "*.info @logserver" >> /etc/syslog.conf ç适合所有日志推走

3. 日志收集解决方案 scribe,Flume,stom,logstash ELK

 

博主的linux交流群:605799367