相关疑难解决方法(0)

获得 root 权限的最安全方法是:sudo、su 还是 login?

即使我的非特权用户受到威胁,我也希望 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 登录。但是使用上述逻辑不是最安全的做法:

  • 允许 root 通过 SSH
  • 切换到文本模式
  • 以 root 身份登录
  • ssh 到另一台机器
  • 以 root 身份登录?

security login su sudo privileges

129
推荐指数
3
解决办法
3万
查看次数

sudo 的内部结构如何工作?

sudo内部如何运作?不像 ,它怎么可能在没有 root 密码的情况下成为 root 用户su?该过程涉及哪些系统调用等?这难道不是 Linux 中一个巨大的安全漏洞(例如,为什么我不能编译一个打了很多补丁的补丁sudo,它只是做了常规操作sudo,但没有要求非特权用户的密码)?

我已阅读login 和 su internals。我还阅读了如何使用 sudo?但尽管标题,他们主要是处理之间的差异susudo

root sudo privileges

83
推荐指数
3
解决办法
1万
查看次数

`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 的密码。

  1. sudo要求提供哪个用户的密码?是进程的真实用户ID所代表的用户吗?

    如果是,没有任何用户可以通过运行sudo然后提供自己的密码来获得超级用户权限吗?Linux 可以限制某些用户吗?

  2. 它是纠正sudo输入密码请求 execve()开始执行main()/usr/bin/sudo

    既然进程的euid已经改成root了(因为设置了/usr/bin/sudo的set-user-id位),那么后面sudo要求密码有什么意义呢?

谢谢。

我已阅读https://unix.stackexchange.com/a/80350/674,但它没有回答上述问题。

setuid sudo executable

11
推荐指数
3
解决办法
5959
查看次数

为什么像 su 这样的程序可以访问 /etc/shadow

通常只有 root 可以访问/etc/shadow. 但是程序喜欢su并且sudo可以在不以 root 身份运行的情况下检查密码。那么问题来了:为什么这些程序可以/etc/shadow无权限访问?我试图通过带有spwd模块的python 没有权限访问它,但我没有获得访问权限(如预期的那样)。这些程序使用哪种机制?

root permissions shadow

8
推荐指数
1
解决办法
6094
查看次数

为什么我不能`su postgres`?

  1. 我想知道为什么当我提供 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)
  2. 如果确实不行su postgres,那么一般来说,目标用户可以su 切换到哪些?

    他们也是 setuid() 可以将其 ids 作为参数的用户,这是否正确?

    从 APUE 中,我了解到没有有效登录 shell 命令的登录名不能用于登录。他们也可以su编辑吗?但postgres有一个有效的登录 shell 命令/bin/bash,为什么我不能呢su postgres

谢谢。

users su postgresql

1
推荐指数
1
解决办法
1万
查看次数

标签 统计

sudo ×3

privileges ×2

root ×2

su ×2

executable ×1

login ×1

permissions ×1

postgresql ×1

security ×1

setuid ×1

shadow ×1

users ×1