相对于Windows操作系统来说,Linux系统比较难于渗透和控制,其根本原因来自Linux的安全机制。对Web等应用设置严格的最低权限后,即使入侵者获取了webshell也因为较难提权而止步于此。有的入侵者还会分析服务器上涉及管理员、用户的密码信息、密码习惯等,通过社会工程学再次进行攻击,在运气好的情况下极有可能获取服务器的权限。因此对Linux服务器来说,除了设置严格的权限、及时更新漏洞补丁外还需要设置一个强健的密码。本文就Linux操作系统密码原理、如何破解Linux密码以及如何设置安全的密码进行探讨。
1.1Linux密码原理
1.Linux密码构成
在Linux系统中涉及系统登录密码的有两个重要文件/etc/passwd和etc/shadow,第一个文件记录用户信息,第二个是真正保存用户密码信息的。在/etc/passwd 中,每一行都表示的是一个用户的信息;一行有7个段位;每个段位用冒号分割。比如下面是一个Linux系统中的/etc/passwd 的两行,其格式为username:x:UID:GID:username full:username home:shell type。
第一字段:用户名(也被称为登录名);
第二字段:口令,显示为x表示其实密码已被映射到/etc/shadow 文件中;
第三字段:UID ;
第四字段:GID;
第五字段:用户名全称,这是可选的,可以不设置。
第六字段:用户的家目录所在位置;
第七字段:用户所用SHELL的类型,常见为/bin/bash;
/etc/shadow文件是/etc/passwd 的影子文件,这个文件并不由/etc/passwd产生的,这两个文件应该是对应互补的;shadow内容包括用户名及被加密的密码以及其它/etc/passwd 不能包括的信息,比如用户的有效期限等;这个文件只有root权限可以读取和操作。
/etc/shadow 文件的内容包括9个段位,每个段位之间用冒号分割。通过研究发现即使两个帐号的密码相同,其密码加密值也不一样。其各个字段的含义如下:
第一字段:用户名(也被称为登录名),/etc/shadow中的用户名和/etc/passwd中的用户名 是相同的,这样就把passwd 和shadow中用的用户记录联系在一起,这个字段是非空的;
第二字段:密码(已被加密),如果有些用户在这段是x,表示这个用户不能登录到系统;这个字段是非空的;
第三字段:上次修改口令的时间。这个时间是从1970年01月01日算起到最近一次修改口令的时间间隔(天数),您可以通过passwd 来修改用户的密码,然后查看/etc/shadow中此字段的变化;
第四字段:两次修改口令间隔最少的天数,也就是说用户必须经过多少天才能修改其口令。如果设置为0,则禁用此功能。此项功能用处不是太大,默认值是从/etc/login.defs文件定义中获取,PASS_MIN_DAYS 中有定义;
第五字段:两次修改口令间隔最多的天数。这个能增强管理员管理用户口令的时效性,应该说增强了系统的安全性;系统默认值是在添加用户时由/etc/login.defs文件定义中获取,在PASS_MAX_DAYS 中定义;
第六字段:提前多少天警告用户口令将过期。当用户登录系统后,系统登录程序提醒用户口令将要作废。系统默认值是在添加用户时由/etc/login.defs文件定义中获取,在PASS_WARN_AGE 中定义;
第七字段:在口令过期之后多少天禁用此用户。此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,完全禁用;
第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的值为空,帐号永久可用;
第九字段:保留字段,目前为空,以备将来Linux发展之用;
例如某系统root帐号在etc/shadow文件中的表现方式为:root:$1$kbIAhX/R$PiLL1U.n6bivtIr4oTi2y0:15377:0:99999:7::: 。
2 Linux密码文件位置
绝大部分Linux操作系统的密码文件名称为shadow,但也有一些特殊的Linux/Unix操作系统的密码文件名称为passwd,而且密码文件所在位置也不一样。下面是一些Linux常见系统的密码文件位置:
Linux /etc/shadow
SystemV Release 4.2 /etc/security
SystemV Release 4.0 /etc/shadow
SunOS 5.0 /etc/shadow
SCOUnix / tcb /auth/files/
OSF/1 /etc/passwd
HP-UX /.secure/etc/ passwd
BSD4.x /etc/master.passwd
AIX3 /etc/security/passwd
IRIX5 /etc/shadow
1.2 Linux系统采用的加密算法
1、查看密码的加密算法
Linux帐户的密码加密后存放于/etc/shadow文件中。对于Linux操作系统的密码采用哪种加密方式,取决于/etc/pam.d/system-auth或者/etc/pam.d/passwd文件定义,通过more /etc/pam.d/system-auth或者authconfig --test | grep hashing命令可以获取操作系统使用哪种加密算法,目前有sha256、sha512和md5加密算法。
在Red Hat Enterprise Linux Server中,可以通过authconfig --test | grep hashing命令来获取当前系统帐号的密码加密算法,如图1所示。
图1 获取Red Hat Enterprise Linux Server系统帐号加密算法
2、 Linux/UNIX采用5种加密算法
Linux/UNIX操作系统目前采用5种加密算法,可以通过加密后的密码值来识别,主要是通过帐号后面的$X来判断。头两字节为$1表示MD5加密算法,$2表示使用Blowfish加密算法,$5表示使用SHA-256加密算法,$6表示使用SHA-512加密算法,其余为标准的DES。例如“root:$1$kbIAhX/R$PiLL1U.n6bivtIr4oTi2y0:15377:0:99999:7:::”其加密算法为md5。
1.3 Linux密码操作
在早期的Linux系统中,/etc/passwd文件含有系统每个用户的信息,当然,用户的口令经过一定的数字与逻辑算法后把一个运算结果(可见字符串)放到了passwd文件中,加密强度并不大。于是,早期黑客们只要拿到/etc/passwd这个文件,系统就已经攻入一半了。后来,随着安全级别的提高,出现了passwd文件中口令单独加密的情况,密码加密后的结果和其他一些辅助信息存到了shadow文件。至于采用何种保存形式和加密算法,可以用/usr/sbin/authconfig程序来设置。用户登录时输入的口令经计算后与/etc/passwd和/etc/shadow中的结果相比较,符合则允许登录,否则拒绝登录。
对于Linux密码操作主要有增加、删除和修改,第一次添加用户时需要设定一个密码,修改密码使用“passwd”,删除密码在删除用户时系统自动删除设置的密码。读取密码加密文件必须具备Root权限,通过“cat /etc/shadow”命令来读取shadow文件的内容。
查看shadow文件权限:ls -l /etc/passwd /etc/shadow
passwd username 更改或者设置username的用户密码,例如passwd antian365 表示设置或者重设用户antian365的用户密码。
passwd -l antian365 锁定用户antian365不能更改密码
passwd -d antian365 清除antian365用户密码;
passwd -S antian365 查询antian365用户密码状态;
chage -l antian365 查看某个用户的密码限期
chage -E 12/30/2016 -m 5 -M 90 -I 30 -W 14 antian365 将密码期限设为2016年12月30日。
另外,修改密码的最短周期为5天,最长周期为90天,密码过期前14天会发送消息提醒用户,过期后帐号会被锁住30天。
1.4破解Linux密码
在进行如何安全设置Linux密码前,先看看如何破解Linux密码。Linux使用的是DES(加密函数式是Crypt)或MD5加密算法,由于计算量之大,它们几乎很难被逆向破解。DES口令密文是有13个ASCII字符的字符串,而MD5口令密文的启始字符总是“$1$”,如图2所示是一台被攻陷的红帽系列的Linux。入侵者远程溢出服务器后获得了一个root权限的登录界面。
图2查看当前用户
如何知道root用户的密码呢?入侵者打开了/etc/passwd文件。如图3所示。
图3查看etc/passwd文件
看来主机的账户是用shadow加密了。继续看/etc/shadow的情况。如图4所示。
图4获取加密的密码字符串
root的冒号后面就是加密后的密码。开始破解工作吧。
破解Linux口令的工具有很多,如oclhash、John the Ripper、Crack by Alex Muffett和Cracker Jack等等,其中John the Ripper的功能最为强大,速度也最快。将/etc/shadow下载到本地,先使用John the Ripper的简单模式试一下,但没有结果,如图5所示。
图5使用john破解密码
再挂个字典看看。这里用“-w=1.txt”指定字典文件。很快,root密码出来了,原来是:“bigapple”。如6所示。
图6成功破解密码
有了root密码,以后再进这个服务器就方便了。
Linux密码破解主要基于两种一种是基于字典,将收集到的密码保存在dic文件中,因此破解成功取决于字典中的密码。另外一个就是暴力破解,暴力破解取决于计算机的硬件运算能力和密码设置的长度和难易程度。
1.5安全设置linux密码
1. 设置密码过期期限
为了强迫用户指定足够强壮的密码,需修改文件/etc/login.defs中参数PASS_MIN_LEN(口令最小长度)。同时应限制口令使用时间,保证定期更换口令,建议修改参数PASS_MIN_DAYS(口令使用时间),一般的Linux设置如图7所示。
vi /etc/login.defs PASSMAXDAYS 150 PASSMINDAYS 0 PASSWARNAGE 7
以上设置要求用户每6个月改变他们的密码,并且会提前7天提醒用户密码快到期了。
图7修改login.defs参数
2.设置加密算法
Linux帐户的密码加密后存放于/etc/shadow文件中。对于Red hat Enterprise版本,默认使用MD5算法,这个算法已经很不安全。很多经典的黑客教程都是教人拿到shadow文件后回去破解出root的密码,如果能用更难破解的sha算法加密密码无疑可以提高服务器的安全性。
# authconfig --test | grep hashing 显示当前密码加密算法
# authconfig --passalgo=sha512 --update 设置使用sha512算法
#authconfig --passalgo=sha256 --update设置使用sha256算法
最后,所有用户都需要重新设置密码才能生效。可以使用# chage -d 0 userName 强制所有用户下次登录修改密码。对于archlinux架构起密码算法设置有所不同,可按以下步骤修改:
(1)修改 /etc/pam.d/passwd文件
#%PAM-1.0
#password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
#password required pam_unix.so md5 shadow use_authtok
password required pam_unix.so md5 shadow nullok
把最后一行的md5用sha256替换
(2)修改/etc/default/passwd文件
CRYPT=des 改为 CRYPT=sha256
(3)所有用户重新修改密码。
3.设置强悍的密码
一个强壮的有效的口令应当至少有8个字符长,不要取用个人信息(如生日,名字,用户名,计算机的型号等也尽量不要在密码中连接电话号码和2002、2000、888等数字),普通的英语单词也不好(因为可用字典攻击法),口令中最好有一些非字母(如数字,标点符号,控制字符等),注意尽量不要写在纸上或计算机中的文件中,选择口令的一个好方法是将不相关的字母和数字或控制字符相连,并组成不少于8位的长度。
独立设置服务器的密码,服务器密码跟其它任何密码无相关性,很多公司内网喜欢使用公司名称大小写,包括一些有规律的变换。在渗透服务器时,可以通过社工字典工具生成密码字典进行暴力破解攻击。
密码不在邮件、CMS系统进行传递,在有些情况下,黑客会攻击邮件,通过查看邮件获取服务器权限。
经济允许的情况下,可以结合硬件进行登录,比如使用动态口令盘等。这样即使黑客获取了用户密码,也因为需要动态口令需要二次验证而无法登陆。
,