还没有人可以提供✓,因此我整理了一个可以想到的一切答案。
1运行可执行文件时,有时操作系统会拒绝您的许可。例如,以前缀为系统路径运行make install将需要sudo,而以前缀为非系统路径运行时将不需要sudo。操作系统如何确定甚至在程序执行某项操作之前,运行可执行文件将需要比用户更多的特权?
不,启动可执行文件时未完成。当可执行文件尝试执行某项操作时,此操作完成。
操作系统将检查文件系统权限和功能(文件系统权限未涵盖这些功能,包括降低级别,mknode,一些低级网络内容,杀死其他进程,重启,设置时间等)。如果您没有权限,则不能这样做。根具有全部功能,包括CAP_DAC_OVERRIDE(忽略文件许可权)。
2有时,运行程序不会被拒绝权限,但是如果使用sudo运行该程序,它将能够执行更多操作。例如,在某个系统目录上运行du时,只有使用sudo才能访问某个目录。为什么在程序可以运行之前,操作系统为何不拒绝运行此类程序的权限,或者优先选择友好通知更多特权?
操作系统无法知道该程序将执行的操作。因此,程序要在启动之前检查权限,然后决定要做什么。它不必这样做。
注意:在android上有一个清单,应用程序在其中声明它可以使用的特权。操作系统将终止任何尝试使用未声明的特权的应用程序,并且操作系统并不总是保证可以尊重特权。例如,网络访问可能不可用。
2是否确实在每当sudo起作用时su也将起作用,而每当su起作用时sudo也将起作用?还是使用su,用户可以用sudo做更多的事情?操作系统如何确定何时使用sudo以及何时需要su?
sudo
并su
做大致相同的事情。一些区别是环境变量处理和其他避免此类安全问题。但是,它们都是允许您成为另一个用户的工具,并且都有默认的root用户。
su
是原始工具,它要求您输入要更改为的用户/组的密码。
sudo
是较新的版本,默认情况下要求您输入自己的密码,但可以将其配置为接受要切换到的用户/组的密码,或者根本不输入密码。它还允许进行大量配置,将使用哪些命令,针对谁以及如何使用此程序对此机器上的该用户进行身份验证。还有sudoedit
这是一部分sudo
,可以用来允许编辑为不同的用户,并避免(从编辑器调用exec运行具有升级权限的任意进程)子脱壳编辑出来的安全问题。