超级用户
超级用户(英語:)也被称为管理员帐户,是计算机操作系统领域中的一种用于进行系统管理的特殊用户,其在系统中的实际名称也因系统而异,如root、administrator与supervisor。
为了使病毒、恶意软件与普通的用户错误不对整个系统产生不利的影响,在系统里日常任务都是由无法进行全系统变更的普通用户账户所完成。在组织机构中,管理权限一般都预留给经验丰富的授权人士使用,并通过即时日志等方式进行监管记录。
Unix与类Unix系统
在Unix与类Unix系统中,root是在所有模式(单/多用户)下对所有文件与程序拥有一切权限的用户(也即超级用户)的约定俗成的通名。但也有例外,如在BeOS中超级用户的实名是baron,在其他一些Unix衍生版里则以avatar作为超级用户的实名[1],而BSD中一般也提供“toor”账户(即“root”的反写)作为root账户的副本[2]。无论实名为何,超级用户的用户ID(UID)一般都为0。root用户可以进行许多普通用户无法做的操作,如更改文件所有者或绑定编号于1024之下的网络端口。之所以将“root”设定为超级用户之名,可能是因为root是唯一拥有修改UNIX系统根目录(root directory)权限的用户,而根目录最初就被认为是root的家目录。[3]
在类Unix系统引导过程中引导的第一个程序(常被称为init)就是以root权限运行的,其他所有进程都由其直接或间接衍生而出,并且这些进程都继承了各自的父进程的权限。只有以root权限运行的进程才能将自己的UID修改为其他用户对应的UID,且对应UID在修改完成之后无法改回,这种行为有时也被称为丢弃root权限,其目的主要是为了安全考虑——(在进程出错等情况下)降低进程污染所造成的损失。另一种情况是,用户登录后,有些程序会向用户请求认证提升权限,当认证成功后用户就能以其账户所对应的权限来执行程序。
对任何人(也包括系统管理员自己)来说,将root当作一般用户账户使用都绝不是一个好习惯,因为即使是输入命令时的微小错误都可能对系统造成严重破坏,因而相较之下较为明智的做法是创建一个普通用户账户用作日常使用,需要root权限时再用su切换到root用户。sudo工具也是个暂时性获取root权限的替代方法。
在Mac OS X与一些Linux发行版中则允许管理员账户(注意,这与root这样的全权账户有别)拥有更多的权限,同时也屏蔽掉大部分容易(因误操作)造成损害的root权限。某些情况下,root账户是被默认禁用的,需要时必须另外启用。另外在极少数系统(如Plan 9)中,系统中根本没有超级用户。
某些软件缺陷能使用户获得root权限(即提升权限来以root权限执行用户提供的代码),这会造成严重的计算机安全问题,相对应的修复这些软件则是系统安全维护的重要组成部分。让某个正以超级用户权限运行的程序的缓冲区溢出(某些情况下亦称缓冲区攻击)是一种常见的(非法)获得root权限的方式,在现代的操作系统中则一般采取将关键程序(如网络服务器程序)运行于一个特别的限权用户之下的方式来预防这种情况的发生。
Windows NT
在Windows NT及其衍生的后继系统(如Windows 2000、Windows XP、Windows Server 2003及Windows Vista/7),系统裡要么至少有一个管理员账户(Windows XP及更早的系统),要么可以使用用户账户控制(User Account Control,简称UAC)机制提升到超级用户权限(Windows Vista/7)[4]。在Windows XP及更早的系统中有内建一个初始密码为空的管理账户(实名为“Administrator”)[5],此账户在存在其他有系统管理权限的用户账户时是默认隐藏的,但该用户实际上未被禁用[5];显而易见的,这种做法会带来安全问题,所以在Windows Vista与其后继系统中默认禁止了内建的Administrator账户,并引入UAC机制取而代之[5]。
Windows的Administrator与Unix的root账户不尽相同,Windows将部分权限分配给了“本地系统账户”,Administrator账户的目的只是为了允许在计算机上进行全系统范围(包括本地系统账户权限所不能及之范围)的更改[4]。
Windows内建的Administrator账户与一般的管理员用户享有同等的权限,Windows系统中默认创建的用户账户也拥有管理权限,而与Mac OS X,Linux与Windows Vista/7的管理员账户不同的是,Windows中无UAC限制的Administrator账户无法将系统与超级用户权限容易造成的损害(如降低对恶意软件的抗力)相隔离。在Windows 2000,Windows XP专业版与Windows Server 2003中,管理员可用在账户属性中将账户所属组由管理员组更改为权力用户(Power User)组的方式来解决这一问题[6],但这一解决方法不如使用带有UAC机制的新版Windows系统有效。
对于Windows XP(及早期的系统)的管理员账户来说,提升权限执行程序并不需认证;这种做法有相当的安全隐患,解决这一问题也是开发UAC的目的之一。与之相对的,在Windows Vista/7中,管理员账户提升权限运行进程的时候会有确认提示,但不需要进行用户资格认证,而普通用户账户则需在提示框内输入任一管理员账户的用户名和密码才能通过认证;具体来说,用户可以以将进程设置为“以管理员权限运行”或使用“runas”命令并用任一管理员账户的用户名和密码进行资格认证的方式在普通用户下提升权限运行进程,但如若提权运行认证时所使用的管理员账号对应的密码为空(就像XP及早期系统内建的Administrator账户一样)时,认证机制的意义就大减了。
Novell NetWare
在Novell NetWare中,超级用户的实名是“Supervisor”,后来更改为“admin”。
早期的个人系统
许多早期的针对个人/家庭应用而设计的操作系统(如MS-DOS与Windows 9x)上并没有多用户的概念,因而也没有单独的管理账户,所有使用系统的人都有所有管理特权,这种没有分隔权限的情况也被认为是这些系统的重要安全隐患之一。[7]
参考文献
- The Jargon File (version 4.4.7) (页面存档备份,存于), catb.org
- "What is this UID 0 toor account?" (页面存档备份,存于), freebsd.org
- . [2011-11-06]. (原始内容存档于2021-05-08).
- . [2011-11-21]. (原始内容存档于2012-07-11).
- . [2011-11-21]. (原始内容存档于2017-08-26).
- . [2011-11-21]. (原始内容存档于2017-09-18).
- . [2011-11-07]. (原始内容存档于2019-07-23).
外部链接
- root的定义 (页面存档备份,存于)(英文), Linux Information Project
- Mac OS X安全机制介绍 (页面存档备份,存于)(英文)
- 关于FreeBSD的"Charlie Root"起源的讨论 (页面存档备份,存于)(英文), FreeBSD Pipermail