的wheel在* nix计算机组通常是指基团与某种根状的访问。我听说在某些 *nix 上它是有权运行的用户组su,但在 Linux 上似乎是任何人(尽管您自然需要 root 密码)。在我使用的 Linux 发行版上,它似乎是默认情况下有权使用的组sudo;他们有一个条目sudoers:
%wheel ALL=(ALL) ALL
Run Code Online (Sandbox Code Playgroud)
但这都是切线的。我的实际问题是:为什么叫这个组wheel?之前听过各种解释,不知道对不对。有谁知道这个词的实际历史?
我已配置sudo为无需密码即可运行,但是当我尝试时ssh 'sudo Foo',仍然收到错误消息sudo: sorry, you must have a tty to run sudo。
为什么会发生这种情况,我该如何解决?
我需要在没有密码的情况下以 sudo 的形式运行一些东西,所以我使用visudo并将其添加到我的sudoers文件中:
MYUSERNAME ALL = NOPASSWD: /path/to/my/program
Run Code Online (Sandbox Code Playgroud)
然后我试了一下:
$ sudo /path/to/my/program
[sudo] password for MYUSERNAME: 
Run Code Online (Sandbox Code Playgroud)
为什么它要求输入密码?如何在不要求密码的情况下以非 root 用户身份以 root 身份运行/使用命令?
我有一个程序安装在 /opt 下的自定义目录中。为了更容易运行它,我编辑了我的 bashrc 以将所述目录添加到我的路径中:
export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
Run Code Online (Sandbox Code Playgroud)
如果我想在没有 sudo 的情况下运行程序,这很好用。但是,如果我尝试使用 sudo 运行它,它会因“找不到命令”错误而失败。
$ sudo godi_console
sudo: godi_console: command not found
Run Code Online (Sandbox Code Playgroud)
使用 sudo 后检查 PATH 变量表明它不包括我作为普通用户所拥有的相同 PATH:
$ sudo sh
# echo $PATH                 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Run Code Online (Sandbox Code Playgroud)
为什么 PATH 不一样?难道我做错了什么?我在 Debian Jessie 上,如果它有所作为。
我尝试的一件事是直接调用 /opt/godi/sbin/godi_console,将绝对路径传递给可执行文件。不幸的是,这在这种特殊情况下没有帮助,因为 godi_console 本身取决于正确设置的 PATH。
即使我的非特权用户受到威胁,我也希望 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 登录。但是使用上述逻辑不是最安全的做法:
我正在尝试部署 django 应用程序。当我打印时, 
apt-get update
我看到
W: Unable to read /etc/apt/apt.conf.d/ - DirectoryExists (13: Permission denied)
W: Unable to read /etc/apt/sources.list.d/ - DirectoryExists (13: Permission denied)
W: Unable to read /etc/apt/sources.list - RealFileExists (13: Permission denied)
E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)
E: Unable to read /var/cache/apt/ - opendir (13: Permission denied)
E: Unable to read /var/cache/apt/ - opendir (13: Permission denied)
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: …Run Code Online (Sandbox Code Playgroud) 当您尝试在没有写入权限的情况下修改文件时,您会收到错误消息:
> touch /tmp/foo && sudo chown root /tmp/foo
> echo test > /tmp/foo
zsh: permission denied: /tmp/foo
Run Code Online (Sandbox Code Playgroud)
Sudoing 没有帮助,因为它以 root 身份运行命令,但 shell 处理重定向 stdout 并以您的方式打开文件:
> sudo echo test > /tmp/foo
zsh: permission denied: /tmp/foo
Run Code Online (Sandbox Code Playgroud)
除了以root身份打开shell并以这种方式操作文件之外,是否有一种简单的方法可以将stdout重定向到您无权写入的文件?
> sudo su
# echo test > /tmp/foo
Run Code Online (Sandbox Code Playgroud) 我在我的笔记本电脑上使用 VMware Player 运行 Ubuntu 12.04。我不知道为什么,但除了我通常登录使用 Ubuntu 的帐户之外,我还有一个名为“用户帐户”的帐户。好吧,这只是附带评论,但基本上我要做的就是在 Ubuntu 上安装 ncurses 库。我尝试使用以下命令行安装 ncurses:
sudo apt-get install libncurses5-dev
sudo apt-get install ncurses-dev
Run Code Online (Sandbox Code Playgroud)
当我尝试使用上述命令安装 ncurses 两次时,我在终端中收到以下提示:
[sudo] password for username
Run Code Online (Sandbox Code Playgroud)
当我输入密码时,我收到以下消息:
username is not in the sudoers file. This incident will be reported.
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已尝试按照以下链接中的说明启用 root 用户(“超级用户”)帐户:https : //help.ubuntu.com/community/RootSudo
以下是链接建议执行的一些操作:
允许其他用户运行 sudo。在命令行中键入以下内容:
须藤 adduser 用户名须藤
或者
须藤 adduser 用户名须藤
以其他用户身份登录。在命令行中键入以下内容:
sudo -i -u 用户名
启用 root 帐户。在命令行中键入以下内容:
须藤 -i
或者
须藤密码根
我已经尝试了上述所有命令行,在输入每个命令后,系统提示我输入密码。输入密码后,我收到了与尝试安装 ncurses 时相同的消息:
fsolano is not in the sudoers file. This …Run Code Online (Sandbox Code Playgroud) 为什么我们需要fakeroot命令?我们不能简单地使用sudoorsu命令吗?
手册页说:
fakeroot - 在伪造 root 权限的环境中运行命令以进行文件操作
About.com 说:
提供一个假的根环境。该软件包旨在启用以下功能:
dpkg-buildpackage -rfakeroot即消除成为软件包构建的 root 用户的需要。这是通过设置LD_PRELOAD为 来完成的libfakeroot.so,它提供了getuid,chown,chmod,mknod,stat, ... 的包装器,从而创建了一个假的根环境。如果你不明白这些,你不需要fakeroot!
我的问题是,它解决简单su或不简单的特殊目的是什么sudo?例如,要重新打包 ubuntu 中所有已安装的包,我们给出以下命令:
$ fakeroot -u dpkg-repack `dpkg --get-selections | grep install | cut -f1`
Run Code Online (Sandbox Code Playgroud)
我们可以使用 sudo 或 su 而不是 fakeroot 来执行上述命令,如下所示:
$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`
Run Code Online (Sandbox Code Playgroud)
编辑:
跑步: …
以下命令有什么区别:
su
sudo -s
sudo -i
sudo bash
Run Code Online (Sandbox Code Playgroud)
我知道su我需要知道 root 密码,而且sudo我必须在sudoers文件中,但是一旦执行有什么区别?
我知道su和之间存在差异,sudo -s因为我的主目录/root在我执行之后su,但我的主目录仍然/home/myname在sudo -s. 但我怀疑这只是我遗漏的潜在差异的症状。