UNIX 中的 root 权限帐户是否正确?

UNIX 中的 root 权限帐户是否正确?

一些大学讲义声称

在Unix系统中,操作系统中写入了一些功能只能由用户访问root:修改密码、访问用于通信协议的网络端口、与硬件交互等。

这个描述正确吗?这到底是在“操作系统”的哪里实现的?非root用户如果不能写,如何更改自己的密码/etc/passwd

据我所知,有像SELinux这样基于UNIX的系统,root用户没有无限的权力?

答案1

这个描述正确吗?

是的,也不是,这些陈述充其量是不完整的。更确切地说:

  • 修改密码:用户可以修改自己的密码,但只能root修改其他用户的密码。这是通过 的访问权限强制执行的/etc/shadow。该passwd(1)二进制文件可以绕过权限,/etc/shadow因为passwdsetuid 为root,因此它可以获得root写入权限/etc/shadow
  • 访问通信协议使用的网络端口:只能root绑定1024以下的TCP和UDP端口,其他端口大家都可以绑定。这是由内核强制执行的。也只能root使用原始套接字(特别是这就是为什么ping需要设置uid才能root运行)。但访问原始套接字的细节取决于操作系统,并且有时可以通过各种非标准 ACL 机制授予访问权限。
  • 与硬件交互:原则上只有root进程可以向硬件发送原始命令。这主要是通过对设备的权限来强制执行的/dev。然而,大多数系统都有允许用户绕过这些权限的机制,例如挂载 USB 磁盘、写入 CD、使用音频硬件等。

这到底是在“操作系统”的哪里实现的?

有一个由内核实现的权限系统。大多数操作系统都通过各种其他机制来补充该系统,例如 OpenBSD 的pledge,或 Linux 的SELinux.

据我所知,有像SELinux这样基于UNIX的系统,root用户没有无限的权力?

是的。

答案2

让我们回到最初的说法,因为我认为这里与 Linux 进行比较是不正确的,因为 Linux 不是 Unix。

Unix 上的 passwd 命令手册明确指出只有 root 可以使用该实用程序。

http://man.cat-v.org/unix-1st/5/passwd

同样,开放端口仅允许特权进程更改为某些端口。 sys/socket.h 是在 Unix 下定义的。 http://pubs.opengroup.org/onlinepubs/7908799/xns/syssocket.h.html

如下所述:

http://man7.org/linux/man-pages/man7/ip.7.html

这样做的权限相当于需要 root。

与硬件的交互稍微更广泛甚至模糊。但可能指的是 /dev/ 接口(例如 mknod)需要 root 权限。

所以这个说法基本上是准确的。

相关内容