老生常谈Linux的用户管理

在Linux中的/etc/passwd和/etc/group的文件内容中,可以看到用户和分组名称及数字ID,简单的说,系统中辨识用户所用的,就是分别为UserID和GroupID的两个数字。

另外一个非常重要的文档是/etc/shadow,是用作专门管理帐号密码相关资料的。

/etc/passwd文档中,通常依次包含了帐号名称,密码(早期的Linux版本,后来因为安全原因迁移到/etc/shadow中,但保留了位置,用x代替),UserID,,GroupID,备注,home目录,Shell设置。

/etc/passwd文件中的UserID通常0代表系统管理员,如果其它帐号的ID被改为0,那么也就具有了系统管理员权限。1~499通常是保留给系统的帐号,其中1-99通常是由发行版本里自行建立的系统帐号。这个UserID最好不要轻易去手动修改,否则可能会对已经建立的档案或者正在运行的程序造成无法恢复的错误。

最后一项Shell设置特别值得一提,许多系统帐号在此项的设置都是/sbin/nologin,这代表这个帐号使用的是一个无法登入的shell。也就是说,这个帐号是无法使用bash或者其他shell登入到服务器的系统,但这个帐号仍然可以使用系统资源,进行系统程序的工作。这对维护服务器安全性很重要,现在一些常见的Hacker入侵服务器的方式之一,就是使用一些其它软件的用户名和密码登入服务器,靠这些软件的漏洞执行一些恶意程序。这也可能是因为大部分软件的安装说明文档里,提示系统管理员按常规创建了新用户和新分组,但系统管理员并没有注意系统对新帐号shell设置的默认值,从而让这些新帐号可以登录服务器,而如果同时又因为偷懒设置了简单的密码,那么一旦安装的第三方软件有漏洞被发现的话,就很容易被入侵。

/etc/shadow中记录的信息依次包括了帐号名,加密过的密码,密码变更时间,密码不可变更天数限制,密码重新变更天数,密码需要变更的警告天数,密码过期后的宽限天数,帐号失效时间,保留列。这个文档首要的问题是读写权限,不可贸然更改,因为密码即便是加密过的,并不代表不能被破解。

但特殊情况下我们也需要对此文档进行修改,比如root帐号的密码如果被遗忘了,或者root帐号被其他人人为操作给改了密码(出于恶意的目的),那么其中一个补救方法就是想办法重新开机用Live CD开机后挂载根目录去修改/etc/shadow,将密码栏清空,重新开机后就可以不用密码登入,登入完成后再立即用passwd设定root密码。

群组对于管理多用户很重要,有时候会需要某些用户之间可以互相访问和修改对方的资料档案,但又需要保留各用户自己的私密资料,就需要使用群组来完成这些需求。这其中需要解的基础是在Linux服务器中,任何档案的读写权限是根据owner,group,others搭配三种权限(r,w,x)来控制的。但是在这种读写控制中有一个不足,就是无法为某个单独帐号设定专属的权限,比如要某帐号可以查看某个群组的档案资料,但不可以修改,仅靠传统的群组和权限控制是无法完全做到的。这个时候就需要使用ACL(Access Control List)中的setfacl来增加额外的专属权限控制。

但是尽管有着各样的权限控制,归根结底,root帐号仍然是所有的核心,而且root的帐号密码至关重要,因为Linux中的su和sudo命令可以让其它帐号切换为root身份。所以另外需要注意的服务器设置是通过visudo严格限制可以切换为root的帐号以及限制的命令,这在管理多用户时是很必要的,否则其它用户可以修改root密码就是件很恐怖的事情了。

一般在新安装的发行版系统里,针对多用户的设置可能并不是很完善,在手动新增用户时需要特别注意检查权限控制的各项设置,这是新手常犯错误的地方,造成很多机器很容易就成为了被入侵的肉机。