有没有一种方法可以停止为Linux中的每个小东西写“ sudo”?


59

我不久将要做大量的PHP工作,并且我对学习RoR感兴趣,因此我在VirtualBox中安装了Linux Mint 12。

到目前为止,切换最令人沮丧的方面是处理Linux权限。似乎我无法做任何有用的事情(例如,将Symfony2 tarball从我的Downloads目录复制到我的文档根目录并解压缩它),而无需通过sudo伪装成根目录。

有没有一种简单的方法可以告诉linux让我不受限制地访问某些目录,而不必简​​单地打开它们的所有权限?


1
许多发行将有一个小组有权编辑各种系统实用程序的配置。将您自己放入该组中,然后打开一个新的外壳。
dmckee 2011年

将文档根目录指向我的主目录中的某个目录会更好吗?

3
“ sudo”是新Linux用户经常使用和滥用的荒谬命令之一。我经常会在网上看到教程,其中连续15个命令将使用sudo?在正常情况下,以常规用户身份登录时不需要特殊的权限(推荐)。我在一家公司,他们所做的一切都使用sudo。当我试图禁止它时(出于安全原因),他们抱怨。在检查了神秘的sudo配置文件后,我看到了一个漏洞(一如既往),该漏洞使我可以从该普通用户“ root”系统。须藤非常危险!!
Jeach 2011年

Answers:


77

我想到两个选择:

  1. 使用以下命令拥有所需的目录chown

    sudo chown your_username directory 
    

    (用您的用户名替换your_username,并用所需目录替换目录。)

  2. 您可以做的另一件事是以root用户身份工作,只要您知道自己在做什么。要使用root用户,请执行以下操作:

    sudo -s
    

    然后您可以执行任何操作而不必sudo在每个命令前都键入。


“您可以做的另一件事是,只要您知道自己在做什么,就可以以root用户的身份进行工作。要使用root身份,...” –嗯,这无济于事发行版和安全性社区一直在教用户的最佳实践。相关:“最小特权的原则是什么”

16

一般来说,除非您做的事情对整个系统产生影响,否则请始终以自己的用户身份工作。

如果要在Web服务器上放置文件,请以您自己的用户身份工作,然后用于sudo将文件放置在文件系统的Web服务区域中。通常,这将由安装脚本执行,并且您将运行sudo -u webmaster install-webserver-files或更高sudo -u webmaster git update版本(或您选择的版本控制系统)之类的东西。

如果您在开发服务器上工作,并且希望立即访问文件,请在Web服务器区域中创建一个目录,并将其设置为拥有或至少可写的目录。一次性操作(sudo chown …sudo -u webmaster setfacl …)之后,您将不需要日常操作的提升特权。

有时允许多个用户写入目录,或者对所有者或多个组以外的其他多个用户具有不同的权限,这很方便。访问控制列表为您提供了此功能。请参阅 服务器上共享目录的权限问题备份脚本权限问题


3

是的,以root用户身份登录,这将为您提供超级用户访问控制。
Windows中的概念相同,您可以使用管理员登录到终端。


我知道您是直接回答原始海报的问题。但这是不好的建议,这解释了反对意见。
bignose

这样,您将其与Windows相关联。
LeWoody 2013年

3

我一直认为,作为用户,您可以在Linux上做任何您想做的事情,而对于其他所有事情,总会有sudosudo允许执行一些其他用户一样的事情,大多数情况下是root进行系统管理。sudo一直是一个更大的优势资源,可以将我的一些日常任务和特权作为(root)用户委派给其他一些任务,并帮助我更好地管理我的时间和其他时间,而又不会将特权提升到超出所需的范围。同时,我对他们的信任使他们的条目保持在sudoers配置文件。我不确定它是否可以关联,但是我能说的是,sudo确实为您提供了一个更好的安全性视角,即谁可以使用他们的特权以及他们可以做什么。即使出现问题,他们也要承担责任。(我总是可以使用sudoers日志信息来进行一些偷偷摸摸的探测,以找出罪魁祸首)。伙计们一直对我表示关注,他们必须为Linux环境中要使用提升特权进行的所有操作都键入sudo。在这里我也找到了同样的问题。

为了查看解决方案并寻求替代方案,我遇到了基于资源的访问控制, RBAC但是在另一个Solaris类似工具之类的冒险世界中,pfexec这种方法会更好,因为这样可以保持已经提升的用户特权并信任关于系统管理员希望如何使用其特权的良知和警觉性。

考虑到RBAC的可用解决方案及其在Linux世界中的实现,我偶然发现了

SELinux http://www.ibm.com/developerworks/linux/library/l-rbac-selinux/

grsecurity http://en.wikipedia.org/wiki/Grsecurity

尽管还有其他一些实现,但我会以列表的最高顺序考虑它们。实施RBAC是组织中的许多工作,尤其是在有很多用户的情况下。在同类环境中,RBAC听起来是一个更好的解决方案。但是,当网络中存在异构的Unix安装并且用户数据库很常见时,这可能会失败。由于SELinux在Solaris上不能扩展/实现,而RBAC / pfexec工具不在Linux上实现。存在执行一件事情的不同方法。例如:http : //blogs.oracle.com/darren/entry/opensolaris_rbac_vs_sudo_howto

网络范围内的不同安装可能不支持此方法(但是openrbac可被视为常见的实现方法),如sudoers是单个主机方法或无法在网络/域中进行集中配置。/etc/sudoers每次更改时都需要同步。此外,在操作sudoers文件时有一个知识库的要求,要求了解sudoers配置的策略语言以免犯任何错误并允许任何授予。RBAC可能会在某种程度上提供集中化的方法,而安全配置文件可能很常见,但是可以从单个位置(也就是存储用户/密码/组信息的位置)添加/从授予的角色中删除用户。 LDAP,NIS或AD等域)。这也隐式地需要了解在RBAC数据库上运行所需的命令,例如smexec,smmultiuser等。

Sudo在这里仍然可以提供更多的跨平台方法,因为它可以在所有提供setuid功能的Unix / like平台上使用。双方sudoRBAC在给非root用户一些特权,可以用出来给做成功root密码本身。Sudo可以为命令行参数提供一种更精细/更细化的方法,这些方法可以在运行命令时使用,并且仅将带有参数的命令限制为可以使用提升的特权运行。尽管RBAC可能会限制使用最多已安装的命令或二进制文件,但不能对命令行参数进行任何控制。审计要好得多,并且内置在RBAC环境中,而sudo,这取决于配置以及所采取的安全性约束(例如,不授予外壳,尤其是允许主机无问题地登录到其他主机)。这些只是我可以列举的一些差异,我个人倾向于使用sudo而不是RBAC,尽管有了上述限制,我仍然可以实施一些变通方案。在RBAC解决所有问题以更好地提高sudo的优势之前,我认为sudo不会消失,因为它很简单。


1

我会在您工作的地方根目录文档根目录,因此您可以完全访问它。

为避免每次安装Gem时都必须键入sudo,请在此处关注此文章:http : //forums.site5.com/showthread.php?t=11954

我也强烈建议安装RVM来管理Ruby和Rails的版本。 http://beginrescueend.com/

当您找到想要将应用程序部署为使用与开发版本不同的版本的主机时,它将使您的生活变得更加轻松。


知道有关rvm的知识,但感谢您的论坛链接。
Major Productions

0

运行命令。

sudo su root

现在,您将能够以root用户身份运行命令。小心!任何运行的命令都将以root用户身份登录。如果您不小心,可能会把事情弄糟。

或者,您可以更改目录的权限,以允许您的用户保存和编辑文件。


4
为什么不只是sudo -s呢?
sarnold 2011年

1
sudo -i以此模拟登录外壳。与通过sudo运行bash或另一个shell相比,它更接近本地本地root登录。
巴斯蒂安·埃伯林

1
为什么不只是su?对sudo的痴迷是什么?您不需要sudo。曾经
Orion

2
afaik,su如果root密码未知,则不可能仅使用它。将用户添加到sudoers并运行sudo su允许用户使用其现有的已知用户密码来升级
Luke

0

编辑/ etc / passwd文件,并通过将用户和组ID更改为UID 0和GID 0,向用户“ yourUserName”授予root权限:

yourUserName:0:0 :: // home / yourUserName:/ bin / sh


2
不建议进行安全噩梦!这是最糟糕的做法。
反模式

我正在为树莓派使用此解决方案,在该树莓派中我没有其他用户帐户,并且该树莓派pi已连接到我的家庭网络
Ufuközkanlı16

0

正如其他答案所指出的那样,最干净的解决方案是更改您需要访问的文件和目录的所有权。您也可以创建一个新的专用组,将文件和目录的组所有权更改为该组,然后为这些文件和目录设置组写权限。最后,在目录上设置SGID位,这样,如果您创建一个新文件,它将继承包含目录的组所有权(即专用组)。


-1

user @ server:〜$ sudo passwd用户的root
[sudo]密码:
输入新的UNIX密码:
重新输入新的UNIX密码:
passwd:密码已成功更新
user @ server:〜$ su
密码:
root @ server:/ home / user#

那“#”提示不是美的吗?

我只使用一次“ sudo”来达到

user @ server:〜$ su
密码:
root @ server:/ home / user#

在服务器的使用寿命内。

为了安全起见,

root @ server:/ home / user#退出
exit
user @ server:〜$

多年以来,当“ sudo”不属于软体动物流行趋势的时候,系统管理员一直在这样做。

这样做时,您有责任保重,而不是我的。

伊恩


真是摆弄 尝试sudo -s。完成的工作
roaima
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.