合天网安实验室:linux帐户安全管理与技巧

linux帐户安全管理与技巧(实验截图在下面) 一 预备知识 Linux操作系统是多用户操作系统,帐户实质上就是一个用户在系统上的标识,广义上讲,L

linux帐户安全管理与技巧(实验截图在下面

一.预备知识

     Linux操作系统是多用户操作系统,帐户实质上就是一个用户在系统上的标识,广义上讲,Linux的帐户包括用户帐户组帐户两种。用户帐户分为普通用户帐户和超级用户帐户两种。管理员帐户对系统具有绝对控制权;组帐户分为私有组和标准组当创建一个新用户时,若没有指定他所属于的组,Linux就建立一个和该用户同名的私有组,此私有组中只包含该用户自己,标准组可以容纳多个用户。若使用标准组,在创建一个新用户时就应该指定他所属于的组。同一个用户可以同属于多个组,其登录后所属的组称为主组,其它的组称为附加组。

Linux下的账户系统文件

Linux下的帐户系统文件主要有/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow 4个。

(1)/etc/passwd文件中每行定义一个用户帐号,一行中又划分为多个不同的字段定义用户帐号的不同属性,各字段用“:”隔开。

    用户名:用户登录系统时使用的用户名,它在系统中是唯一的。

    口令:此字段存放加密的口令。在此文件中的口令是x,这表示用户的口令是被/etc/shadow文件保护的,所有加密口令以及和口令有关的设置都保存在/etc/shadow中。

    用户标识号:是一个整数,系统内部用它来标识用户。每个用户的UID都是唯一的。root用户的UID是0,1~499是系统的标准帐户,普通用户从500开始。

    组标识号:是一个整数,系统内部用它来标识用户所属的组。

    注释性描述:例如存放用户全名等信息。

    自家目录:用户登录系统后进入的目录。

    命令解释器:批示该用户使用的shell,Linux默认为bash。

(2)/etc/passwd文件对任何用户均可读,为了增加系统安全性,用户的口令通常用shadow passwords保护。/etc/shadow只对root用户可读。在安装系统时,会询问用户是否启用shadow passwords功能。在安装好系统后也可以用pwconv命令和pwunconv来启动或取消shadow passwords保护。经过shadow passwords保护的帐户口令和相关设置信息保存在/etc/shadow文件里。

    用户名:用户的帐户名

    口令:用户的口令,是加密过的

    最后一次修改时间:从1970年1月1日起,到用户最后一次更改口令的天数

    最小时间间隔:从1970年1月1日起,到用户可以更改口令的天数

    最大时间间隔:从1970年1月1日起,到用户必须更改口令的天数

    警告时间:在用户口令过期之前多少天提醒用户更新

    不活动时间:在用户口令过期之后到禁用帐户的天数

    失效时间:从1970年1月1日起,到帐户被禁用的天数

    标志:保留位

(3)/etc/group文件。将用户分组是Linux中对用户进行管理及控制访问权限的一种手段。当一个用户同时是多个组的成员时,在/etc/passwd中记录的是用户所属的主组,也就是登录时所属的默认组,而其他的组称为附加组。用户要访问附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组的成员。组的所有属性都存放在/etc/group中,此文件对任何用户均可读。

     组名:该组的名称

     组口令:用户组口令,由于安全性原因,已不使用该字段保存口令,用“x”占位

    GID:组的识别号,和UID类似,每个组都有自己独有的ID号,不同组的GID不会相同

    组成员:属于这个组的成员

(4)/etc/gshadow文件用于定义用户组口令、组管理员等信息,该文件只有root用户可以读取

    组名:用户组名称,该字段与group文件中的组名称对应

    组口令:用户组口令,该字段用于保存已加密的口令

    组的管理员帐号:组的管理员帐号,管理员有权对该组添加、删除帐号

    组成员:属于该组的用户成员列表,用“,”分隔

二.实验步骤   

任务一:建立与删除普通用户账户,管理组

 

    管理帐户的俱行工具及功能如下:

 

    useradd [] 添加新用户

 

    usermod [] 修改已存在的指定用户

 

    userdel [-r] 删除已存在的指定帐户,-r参数用于删除用户自家目录

 

    groupadd [] 加新组

 

    groupmod [] 修改已存在的指定组

 

    groupdel 删除已存在的指定组

 

1)创建一个新用户user1

 

    useradd user1

 

    查看用户是否创建成功

 

    

 

2)创建一个新组group1

 

    groupadd group1

 

3)创建一个新用户user2并将其加入用户组group1中

 

    useradd -G group1 user2

 

4)创建一个新用户user3,指定登录目录为/www,不创建自家用户目录(-M)

 

    useradd -d /www -M user3

 

5)将用户user2添加到附加组group1中

 

    usermod -G group1 user1

 

    至此,group1组中有user1,user2两个用户,用命令查看/etc/group文件如下图:

 

    

 

    (注:用户user3不属于组group1中的用户)

 

6)删除用户user3,用户uers3从用户组中消失

 

    userdel user3      

 

    

 

7)删除用户user2,同时删除自家目录

 

    userdel -r user2

 

    

 

8)删除组group1,则组group1中的用户则被分配到其自己分配的私有组中。

 

    

 

    groupdel group1

 

 实验截图:↓↓↓

 

 

 

 

 

任务二:用户口令管理与口令时效管理

 

(1)passwd命令

 

    passwd命令用来设置用户口令,格式为:passwd [] []

 

    用户修改自己的用户密码可直接键入passwd,若修改其他用户密码需加用户名。超级用户还可以使用如下命令进行用户口令管理:

 

    passwd -l //禁用用户帐户口令

 

    passwd -S //查看用户帐户口令状态

 

    passwd -u //恢复用户帐户口令

 

    passwd -d //删除用户帐户口令

 

    在创建完用户user1后,没给用户passwd口令时,账户默认为禁用状态:

 

    

 

1. 给用户user1创建口令,设置为:111111

 

    

 

    passwd user1

 

    接下来我们再次查看user1状态时,则为如下图所示:

 

    

 

    密码已经设置,且为MD5加密

 

2. 禁用账户user1

 

    

 

    passwd -l user1

 

3. 恢复账户user1的账户口令:

 

    passwd -u user1

 

    

 

4. 删除用户账户口令

 

    passwd -d user1

 

    

 

    用户user1的密码即为空。

 

 (2)chage命令

 

    口令时效是系统管理员用来防止机构内不良口令的一种技术。在Linux系统上,口令时效是通过chage命令来管理的,格式为:chage []

 

    下面列出了chage命令的选项说明:

 

    -m days: 指定用户必须改变口令所间隔的最少天数。如果值为0,口令就不会过期。

 

    -M days: 指定口令有效的最多天数。当该选项指定的天数加上-d选项指定的天数小于当前的日期时,用户在使用该帐号前就必须改变口令。

 

    -d days: 指定从1970年1月1日起,口令被改变的天数。

 

    -I days: 指定口令过期后,帐号被锁前不活跃的天数。如果值为0,帐号在口令过期后就不会被锁。

 

    -E date: 指定帐号被锁的日期。日期格式YYYY-MM-DD。若不用日期,也可以使用自1970年1月1日后经过的天数。

 

    -W days: 指定口令过期前要警告用户的天数。

 

    -l: 列出指定用户当前的口令时效信息,以确定帐号何时过期。

 

    例如下面的命令要求用户user1两天内不能更改口令,并且口令最长的存活期为30天,并且口令过期前5天通知用户

 

    chage -m 2 -M 30 -W 5 user1

 

    可以使用如下命令查看用户user1当前的口令时效信息:chage -l user1

 

    

 

 

 

 

任务三:PAM可插拔验证模块

 

    PAM(Plugable Authentication Module,可插拔验证模块)是由Sun提出的一种认证机制。管理员通过它可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。不少应用软件都可以与PAM进行集成,当然,操作系统的登录验证过程也可以通过对PAM进行配置来进行。如指定密码复杂性、指定用户试图登录的失败次数等,以下列出对这些账号的安全性配置。

 

1. 指定密码复杂性

 

    修改/etc/pam.d/system-auth配置:(注意:在root用户下进行,其余用户对这个文件只有读的权限)

 

    vi /etc/pam.d/system-auth

 

    限制密码最少有:2个大写字母,3个小写字母,3个数字,2个符号

 

    文件中有一行为:

 

    password requisite pam_cracklib.so try_first_pass retry=3

 

    在其后追加如下参数:

 

    ucredit=-2 lcredit=-3 dcredit=-3 ocredit=-2

 

2. 验证时若出现任何与pam_tally有关的错误则停止登录

 

    auth required pam_tally.so onerr=fail magic_root

 

3. 账号验证过程中一旦发现连续5次输入密码错误,就通过pam_tally锁定此账号600秒

 

    account required pam_tally.so deny=5 lock_time=600 magic_root reset

 

    

 实验截图:↓↓↓

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三.分析与思考

1)思考还有哪些加强linux账户安全的管理方法?

1. 物理安全
在服务器 BIOS 中禁用光驱、软驱、U盘等可引导的外部设备,并启用 BIOS 密码及 GRUB 密码来限制对系统的物理访问。

2. 磁盘分区
我们可以通过使用不同的分区来分散存储数据以获得更高的数据安全性,当发生任何灾难时,由于数据是隔离存储的,会将数据损失的几率降到最低。

3. 尽量减少软件包以减少漏洞
建议管理员尽量避免在 Linux 中安装非必要的软件包,而且不要使用来源不明的包,以尽可能的避免程序漏洞。当一个服务出问题时,很可能会波及到其它服务甚至整个系统,所以「非必要的服务就不运行」这是一个铁则。

对于 CentOS 系统可以使用 chkconfig 来查看运行在 runlevel 3 的服务:

/sbin/chkconfig --list |grep '3:on'
一旦发现有不需要的服务正常运行,可以使用如下命令禁用:

chkconfig serviceName off
对于使用 RPM 包或 DEB 安装的服务可以使用 yum 或 apt-get 找出包名称并用如下命令移除:

yum -y remove package-name
sudo apt-get remove package-name
4. 查看网络侦听端口
使用 netstat 命令可以看到什么样的网络应用正在侦听哪些端口,找出不必要的程序之后再用上面的方面来处理。

netstat –tulpn
5. 使用安全的远程连接(SSH)
Telnet 和 rlogin 都使用明文的协议,而且已被证实存在多种已经安全漏洞,SSH 是一种安全的协议,它可以使用加密技术与服务器进行通讯。

非必要时,不要使用 root 账户登录 SSH,要习惯使用 sudo 来切换身份。

SSH 22 端口目标过于明显,建议大家改成一个不常用的高端口并在 vi /etc/ssh/sshd_config 配置文件中至少配置如下选项:

#禁用root登录
PermitRootLogin no

#仅允许特定用户
AllowUsers username

#SSH协议版本
Protocol 2
6. 保持系统更新
尽量始终保持系统内核、应用补丁及安全修复处在最新状态:

yum updates
yum check-update
7. 锁定定时任务
cron 可以指定哪些用户可以使用,只需将允许的用户添加到 /etc/cron.allow 或将禁用的用户添加到 /etc/cron.deny 中即可。如果希望禁用所有用户使用任务计划,只需将ALL添加到cron.deny文件当中。

echo ALL >>/etc/cron.deny
8. 禁用USB存储设备检测
很多时候我们都需要禁用 USB 存储设备以防数据拷出,此时可以创建一个/etc/modprobe.d/no-usb文件并填入如下内容即可禁用 USB 存储设备检测:

install usb-storage /bin/true
9. 启用SELinux
安全增强型 Linux(SELinux)是在内核中提供的强制访问控制的安全机制。很多网络文章为了方便配置都建议大家禁用 SELinux 功能,我在这里到是建议大家在考虑关闭 SELinux 前应该三思。

SELinux 提供用户三种基本操作模式:

Enforcing:启用和执行机器上的 SELinux 策略(默认配置)
Permissive:在此种模式下,SELinux 不会强制执行系统上的安全策略,只会产生相应日志和警告。Permissive 模式在 SELinux 排错时经常会乃至。
Disabled:禁用 SELinux 功能
如果你想查看当前系统 SELinux 的状态可以使用:

sestatus
如果要从禁用状态启用 SELinux 可以使用:

setenforce enforcing
以上配置只对当前系统状态有用,重启会失效。要一劳永逸开关 SELinux 可以更改其配置文件/etc/selinux/config。

10. 移除KDE/GNOME桌面
不论你是运行 LAMP 的专属服务器还是其它类型服务器,KDE 或 GNOME 这样 X Window 桌面环境是没多大必要使用的,禁用之后可以提高服务器性能和增强安全性。使用如下命令即可完全卸载:

yum groupremove "X Window System"
11. 禁用IPv6
IPv6 目前还没有大规模普及,如果你不使用 IPv6 协议,可以在 /etc/sysconfig/network 配置文件中将其禁用。

NETWORKING_IPV6=no
IPV6INIT=no
12. 限制用户重复使用旧密码
很多用户习惯在强制定期更换密码时重复循环使用以前的密码,这对于服务器管理员来说是一种非常不好的习惯。因此建议大家限制用户重复使用旧密码,该功能可以通过 PAM 来实现。

RHEL/CentOS/Fedora:/etc/pam.d/system-auth
Ubuntu/Debian/Linux Mint:/etc/pam.d/common-password
在上述配置文件中的auth区块添加一行:

auth sufficient pam_unix.so likeauth nullok
在password区块添加一行:

password sufficient pam_unix.so nullok use_authtok md5 shadow remember=5
配置好后,服务器会禁止使用最近 5 个被使用过的用户密码。

13. 配置密码过期策略
Linux 中,用户密码是被加密存储到/etc/shadow文件当中的,要配置密码过期的详细信息需要用到change命令。例如要查看某个账户的密码过期日期和时间,可以使用如下命令:

chage -l username
要更改密码过期策略可以使用类似如下命令:

chage -M 60 username
chage -M 60 -m 7 -W 7 username
-M 密码使用最长天数
-m 密码使用最短天数
-W 密码过期提示天数
14. 手动锁定或解锁账户
在不从系统中移除账户的情况下,对账户进行锁定和解锁是非常有用的一个安全手段。需要锁定一个账户时,可以使用如下命令:

passwd -l accountname
账户锁定同样适用于 root 账户,当某账户被锁定时会增加 (!) 字串,账户解锁时移除 (!) 字串。需要解锁时使用如下命令:

passwd -u accountname
15. 强制使用强密码
弱密码或用生日密码之类的密码太容易被字典和社会工程学攻破了,所以建议大家打开强密码要求。Linux 中的强密码要求还是使用 PAM 模块,只需编辑/etc/pam.d/system-auth文件:

/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1
16. 启用Iptables
强烈建议大家使用 Iptables 来保护 Linux 服务器安全,Iptables 可以在不同的链上配置不同的规则来处理数据包。

17. 在Inittab中禁用Ctrl+Alt+Delete
大多数 Linux 发行版中按下「Ctrl+Alt+Delete」时都会重启系统,对于 Linux 生产服务器来说,这几乎是一个白痴设计。如果你希望关闭这个默认重启功能,可以将/etc/inittab配置文件中的如下两千注释掉:

# Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
18. 查看空密码账户
如果系统中存在有权限的空密码账户,就相当于开了一扇门。所以建议大家仔细清查一下:

cat /etc/shadow | awk -F: '($2==""){print $1}'
19. 忽略ICMP或广播请求
要忽略 ICMP 或广播请求我们可以编辑/etc/sysctl.conf配置文件:

net.ipv4.icmp_echo_ignore_all = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
配置文件改好之后使用如下命令载入生效:

sysctl –p
20. 定期审查日志
建议大家将日志文件进行专门的集中存放和处理,这样可以比较有效避免入侵者对日志进行篡改,下面是 Linux 常见的默认日志路径:

/var/log/message – 系统日志或当前活动日志
/var/log/auth.log – 验证日志
/var/log/kern.log – 内核日志
/var/log/cron.log – 任务计划日志
/var/log/maillog – 邮件服务器日志
/var/log/boot.log – 系统启动日志
/var/log/mysqld.log – MySQL 服务器日志
/var/log/secure – 包含验证和授权方面信息
/var/log/utmp或/var/log/wtmp – 登录记录文件

2)比较一下linux账户跟unix账户管理的异同。

 Unix 系统的特点:

支持多任务;相比 Multics 操作更加简单;所有数据以纯文本形式存储;采用单一根文件的树状存储;能够同时访问多用户账户

Unix 操作系统的组成:

a) 单核操作系统,负责低级操作以及由用户发起的操作,内核之间的通信通过系统调用进行。 b) 系统工具 c) 其他应用程序

Linux主要功能:

同时运行多任务(多任务);程序可以包含一个或多个进程(多用途系统),且每个进程可能有一个或多个线程;多用户,因此它可以运行多个用户程序;个人帐户受适当授权的保护;因此账户准确地定义了系统控制权。

四.课后习题