即使我的非特权用户受到威胁,我也希望 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
。
请比较以下两行:
-rws---r-x 1 root root 21872 2009-10-13 21:06 prg1
-rwx---r-x 1 root root 21872 2009-10-13 21:06 prg2
Run Code Online (Sandbox Code Playgroud)
上的 setuid 位prg1
以及“其他”的读取和执行位是否意味着任何用户都可以使用 root 权限运行它?该 prg2
也有读取和执行“其他”,但没有设置setuid位,这是否意味着它仍然可以通过任何用户,但没有root权限运行?
我需要允许用户(与 root 不同)运行侦听端口 80 的服务器。
有没有办法做到这一点?
一个巨大的应用程序需要在某个特定时间对需要 root 权限的文件执行少量写入。它不是真正的文件,而是作为文件暴露给 Linux 的硬件接口。
为了避免为整个应用程序授予 root 权限,我编写了一个 bash 脚本来执行关键任务。例如,以下脚本将启用硬件接口的端口 17 作为输出:
echo "17" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio17/direction
Run Code Online (Sandbox Code Playgroud)
但是,由于suid
我系统上的 bash 脚本被禁用,我想知道实现这一目标的最佳方法是什么。
使用此处介绍的一些解决方法
sudo
从主应用程序调用脚本,并相应地编辑 sudoers 列表,以避免在调用脚本时需要密码。授予 sudo 权限让我有点不舒服echo
。
只需编写一个 C 程序,使用fprintf
,并将其设置为 suid root。对字符串和文件名进行硬编码,并确保只有 root 可以编辑它。或者从文本文件中读取字符串,同样确保没有人可以编辑该文件。
我没有想到的其他一些解决方案比上面介绍的更安全或更简单?
这里到底发生了什么?
root@bob-p7-1298c:/# ls -l /tmp/report.csv && lsof | grep "report.csv"
-rw-r--r-- 1 mysql mysql 1430 Dec 4 12:34 /tmp/report.csv
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
Run Code Online (Sandbox Code Playgroud) 什么决定了哪些 Linux 命令需要 root 访问权限?我理解为什么apt-get
需要root
特权是可取的;但是这些命令与其他命令的区别是什么?这仅仅是可执行文件的所有权和执行权限的问题吗?
我使用了该命令poweroff
,意外地系统关闭了。我没有用过sudo
所以我没想到电脑会被关闭。为什么我可以在没有 root 权限的情况下使用这个命令?
我还没有机会阅读足够的关于Android、Linux 或 UNIX 的内容来回答这个问题。sudo
可以在 Linux 机器上运行,但不能在 Android 上运行,除非您对移动设备(例如三星 GT-N8013)进行 root 操作。为什么移动设备需要 root 而不是典型的 Linux 安装?
我的问题的上下文与/sf/ask/981378891/#14019726有关
(另外,有没有什么方法可以让程序像root
在 Android 上一样运行,就像你在 Windows 上提升“以管理员身份运行”的权限一样?如果你认为这个问题应该在它自己的线程上,我可以创建一)
以下链接在不同的上下文中讨论了这些概念。我已经阅读了它们的定义,但我仍然无法说出它们之间的关系,或者它们中的一些是否相同。
根据man id
,如果我输入id
,我应该得到他们所谓的有效和真实的组 ID。
id uid=501(joe) gid=501(joe) groups=501(joe), 100(users)
Run Code Online (Sandbox Code Playgroud)
但是,维基百科参考了 的输出id
来区分主ID和补充ID。此外,维基百科区分主要与补充和有效与真实的组 ID。这些概念如何相互关联?
另外,主要组ID =组ID =当前组ID是真的吗?