即使我的非特权用户受到威胁,我也希望 root 帐户安全。
在 Ubuntu 上,默认情况下您只能出于“安全原因”使用 sudo。但是,我不确定它是否比仅在文本模式控制台上使用登录更安全。如果攻击者可以以我的普通用户身份运行代码,那么可能会出错的事情太多了。例如添加别名、向我的 PATH 添加东西、设置 LD_PRELOAD 和 X11 键盘记录器等等。我能看到的唯一优势是超时,所以我永远不会忘记注销。
我对 su 也有同样的疑问,但它甚至没有时间限制。某些操作(尤其是 IO 重定向)对 su 更方便,但在安全方面这似乎更糟。
在文本模式控制台上登录似乎是最安全的。由于它是由 init 启动的,如果攻击者可以控制 PATH 或 LD_PRELOAD,那么他已经是 root。按键事件无法被 X 上运行的程序拦截。我不知道 X 上运行的程序是否可以拦截 [ctrl]+[alt]+[f1](并打开一个看起来像控制台的全屏窗口)或它就像 Windows 上的 [ctrl]+[alt]+[del] 一样安全。除此之外,我看到的唯一问题是没有超时。
所以我错过了什么吗?为什么 Ubuntu 的人决定只允许 sudo?我可以做些什么来提高任何方法的安全性?
SSH呢?传统上 root 不能通过 SSH 登录。但是使用上述逻辑不是最安全的做法:
sudo
内部如何运作?不像 ,它怎么可能在没有 root 密码的情况下成为 root 用户su
?该过程涉及哪些系统调用等?这难道不是 Linux 中一个巨大的安全漏洞(例如,为什么我不能编译一个打了很多补丁的补丁sudo
,它只是做了常规操作sudo
,但没有要求非特权用户的密码)?
我已阅读login 和 su internals。我还阅读了如何使用 sudo?但尽管标题,他们主要是处理之间的差异su
和sudo
。
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul 4 2017 /usr/bin/sudo
Run Code Online (Sandbox Code Playgroud)
sosudo
可由任何用户运行,并且任何运行的用户都sudo
将 root 作为进程的有效用户 ID,因为设置了 set-user-id 位/usr/bin/sudo
。
来自https://unix.stackexchange.com/a/11287/674
sudo 和 su 之间最明显的区别是sudo 需要用户的密码,而 su 需要 root 的密码。
sudo
要求提供哪个用户的密码?是进程的真实用户ID所代表的用户吗?
如果是,没有任何用户可以通过运行sudo
然后提供自己的密码来获得超级用户权限吗?Linux 可以限制某些用户吗?
它是纠正sudo
输入密码请求后 execve()
开始执行main()
的/usr/bin/sudo
?
既然进程的euid已经改成root了(因为设置了/usr/bin/sudo的set-user-id位),那么后面sudo要求密码有什么意义呢?
谢谢。
我已阅读https://unix.stackexchange.com/a/80350/674,但它没有回答上述问题。
通常只有 root 可以访问/etc/shadow
. 但是程序喜欢su
并且sudo
可以在不以 root 身份运行的情况下检查密码。那么问题来了:为什么这些程序可以/etc/shadow
无权限访问?我试图通过带有spwd
模块的python 没有权限访问它,但我没有获得访问权限(如预期的那样)。这些程序使用哪种机制?
我想知道为什么当我提供 root 密码时,以下命令报告失败?
$ su postgres
Password:
su: Authentication failure
Run Code Online (Sandbox Code Playgroud)
su
要求输入 root 的密码而不是 的
密码是否正确postgres
?
如果是 的密码postgres
,当我安装postgreSQL时,我没有设置连接postgresql服务器的登录名,并且我没有postgres
在我的Ubuntu上显式创建用户,那么它的密码是多少?
在/etc/passwd
postgres:x:124:133:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
Run Code Online (Sandbox Code Playgroud)
在/etc/shadow
:
postgres:*:17478:0:99999:7:::
Run Code Online (Sandbox Code Playgroud)如果确实不行su postgres
,那么一般来说,目标用户可以su
切换到哪些?
他们也是 setuid() 可以将其 ids 作为参数的用户,这是否正确?
从 APUE 中,我了解到没有有效登录 shell 命令的登录名不能用于登录。他们也可以su
编辑吗?但postgres
有一个有效的登录 shell 命令/bin/bash
,为什么我不能呢su postgres
?
谢谢。
sudo ×3
privileges ×2
root ×2
su ×2
executable ×1
login ×1
permissions ×1
postgresql ×1
security ×1
setuid ×1
shadow ×1
users ×1