【问题标题】:Can I give a Linux user rights to do exactly the same as another user?我可以授予 Linux 用户与其他用户完全相同的权限吗?
【发布时间】:2013-11-17 10:06:36
【问题描述】:

与我的问题有关:“How can I configure Cassandra to create files with custom rights?”。我正在尝试从操作系统级别解决问题。

给定两个不同的 Linux 用户 - cassandratomcat7 - 我可以授予 tomcat7 对所有具有 cassandra 读取访问权限的文件的读取访问权限吗?文件只有o+rw(所以我不能和组一起玩); Cassandra 一直在创建新文件,因此无法手动设置组权限。

【问题讨论】:

  • 也许您可以使用访问控制列表(man acl、setfacl、getfacl)解决您的问题。

标签: linux file-permissions


【解决方案1】:

假设掩码没有硬编码到 Cassandra 中,您可以尝试使用 umask 更改 cassandra 用户的默认文件权限。这将允许您将 tomcat7 添加到具有读/写访问权限的默认 cassandra 用户组。

在 cassandra 的 shell 配置文件或其他配置文件中的某处可能有一行引用 umask,设置为 077 或 0077。将前 7 替换为 0 将允许对所有创建的新文件的组进行 rw。它可能在 shell 配置文件中,因为它有自己的用户,但有时它是应用程序配置文件的一部分。您当然需要更改现有文件的文件权限,但这应该很简单。

手册页在解释 umask 的来龙去脉方面做得并不出色,但在 Nix Craft 上的 Understanding umask settings 上有一个很好的教程。然而,为了防止链接失效,谷歌搜索“linux umask”会找到一大堆来自每个人和他的狗的教程。

【讨论】:

    【解决方案2】:

    有两种方法可以做到这一点

    1) 将密码文件中的 uid 更改为与 cassandra 和 tomcat7 相同。将 cassandra 和 tomcat7 添加到同一组组中

    为了证明这确实有效

    a) 添加用户,我用的是命令

    sudo adduser likeme --shell /usr/bin/zsh
    

    我添加了一个不同的外壳,因此很明显正在使用该条目

    b) 更改 /etc/passwd 文件中的 uid。我使用此命令并编辑了文件,以便将我正常登录 (jamie) 的 uid 用作新用户的 uid。

    sudo vipw
    

    c) 测试新用户。这是发生了什么

    $ who am i
    jamie    pts/10       2013-11-06 19:04 (:0.0)
    $ sudo su - likeme
    %
    

    请注意提示已更改,因为正在使用不同的 shell。然而:

    % id
    uid=1000(jamie) gid=1000(jamie) groups=1000(jamie)
    

    它仍然说我是我!! 这是因为从根本上说,这两个用户是相同的。您可能会说有两个用户名,但只有一个用户。

    2) 配置sudo让tomcat7变成cassandra

    tomcat7  ALL = (cassandra:cassandra) ALL
    

    【讨论】:

    • 我强烈反对更改 /etc/passwd 中的 UID。如果更改后的用户已经拥有具有原始 UID 的文件,那么这些文件将不再属于他。但我非常喜欢sudo 解决方案。
    • @Alfe 您可能会强烈反对,但它回答了 OP 的问题并且有效。
    • tomcat7 已经在 sudoers 文件中,名称为 tomcat7 ALL=(ALL) NOPASSWD: ALL)tomcat7 ALL=(cassandra:cassandra) ALL,但仍无法读取 cassandra 的文件。
    • 我将尝试 #1,将 tomcat7 的 UID 设置为 cassandra 的 UID,然后我将更新所有现有 tomcat7 文件的所有者 UID。我稍后会回来提供反馈。
    • 更改 UID 不起作用。两个用户不能有相同的 UID。我仍在处理sudoers 的事情,因为由于某种原因它似乎不起作用(sudo 在控制台上工作,但 Priam 的行为好像它不能 sudo)。稍后我会再次提供反馈。
    【解决方案3】:

    假设您也对应该被允许充当其他用户的非系统用户感兴趣,我只会允许他以其他用户身份登录。

    如果您不愿意只给他其他用户的密码,那么您可以允许他通过 ssh(本地)和预共享密钥登录。为此,生成一个密钥(ssh-keygen),将其存储在~cassandra/.ssh/ 中,并将公共部分也放入~tomcat7/.ssh/authorized_keys。然后用户cassandra 应该能够使用ssh tomcat7@localhost 切换到另一个用户。

    【讨论】:

    • 这与普通用户和密码无关。这些是以自己的用户身份运行的 Linux 服务。 Cassandra 是数据库服务器,Tomcat 是 Web 服务器。我几乎无法控制他们做什么,我不能简单地要求 Tomcat 到sudossh。在 Tomcat 上运行的 Web 应用程序是 Priam,如果我要让它获得 Cassandra 的权限,我必须更改它的代码并重新编译它。目前这不是问题,但这意味着如果我们升级到更新版本的 Priam,未来还有很多维护工作要做。
    • 所以你认为在你的情况下我的建议不适用。这会使答案总体上不好吗?对于我的情况,我的解决方案通常效果很好。
    • 在要求解释之前,用户应该等待几秒钟以上。
    • 为什么要等到反对者离开后,再也不回来查看问题的原因? ;-) 我认为反对者首先应该在 cmets 中解释,然后再反对,但这取决于你,我总是可以删除 cmets 询问原因。
    • 没错,它在任何方面都不适用。您回答的是关于某人如何以另一个身份进行身份验证,而不是两个用户如何获得相同的权利。这是关于 Linux 用户,而不是使用终端与系统交互的人。
    猜你喜欢
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 2019-12-12
    相关资源
    最近更新 更多