惹和惹和 發表於 2018-6-5 15:56:58

Linux 文档多租户管理方法

<p><strong>例题</strong></p>
<p>同一群组microsoft下的两个账号justmine001和justmine002需要共同拥有目录<code>/microsoft/eshop</code>的开发权,以便进行协同工作,但是其他人不允许进入和查阅该目录。</p>
<p>从例题可以分析出:</p>
<ol>
    <li>同一群组下的账户需要共同拥有目录的使用权,且可以编辑里面的任何文件。</li>
    <li>其他账户不拥有该目录的任何权限。</li>
    <li>需要使用root账户,创建账户、群组,设置目录权限,然后搭建开发环境。</li>
</ol>
<p><strong>创建账户相关信息</strong></p>
<blockquote>
<p>groupadd microsoft ; 新增群组<br />
useradd -G microsoft justmine001; 新增账户,并加入到群组microsoft<br />
useradd -G microsoft justmine002; 新增账户,并加入到群组microsoft</p>
</blockquote>
<p>查阅账号属性</p>
<blockquote>
<p>id justmine001;<br />
id justmine002;</p>
</blockquote>
<p><img src="https://img.jbzj.com/file_images/article/201806/2018060515484517.png" alt="" /></p>
<p><strong>搭建环境</strong></p>
<p>创建开发目录</p>
<p><code>mkdir -p /microsoft/eshop</code></p>
<p>查询</p>
<p><code>ll -d /microsoft/eshop</code></p>
<p><img src="https://img.jbzj.com/file_images/article/201806/2018060515484518.png" alt="" /></p>
<p><strong>设置传统权限</strong></p>
<p>从上图可以看到,开发目录的拥有者和群组都是root,权限为rwxr-xr-x,所以justmine001和justmine002可以查阅(ls)和进入(cd)该目录,但是都不能在目录中创建文件。</p>
<p><img src="https://img.jbzj.com/file_images/article/201806/2018060515484619.png" alt="" /></p>
<p><img src="https://img.jbzj.com/file_images/article/201806/2018060515484620.png" alt="" /></p>
<p>首先,设置目录群组为microsoft,其次,其他人对该目录没有任何权限,所以应该设置权限为770。如果不理解,请阅读上一篇<a target="_blank" href="https://www.jb51.net/LINUXjishu/617584.html">详解Linux文档属性、拥有者、群组、权限、差异</a></p>
<blockquote>
<p>chgrp microsoft /microsoft/eshop; 分配群组<br />
chmod 770 /microsoft/eshop; 设置权限</p>
</blockquote>
<p>首先测试justmine账号(其他人)的权限,如下:</p>
<p><img src="https://img.jbzj.com/file_images/article/201806/2018060515484621.png" alt="" /></p>
<p>其他人无法访问<code>ls</code>和进入<code>cd</code>该目录,已达到预期效果。</p>
<p>测试同群组下的justmine001和justmine002账号,再次创建文件,如下:</p>
<p><img src="https://img.jbzj.com/file_images/article/201806/2018060515484622.png" alt="" /></p>
<p><img src="https://img.jbzj.com/file_images/article/201806/2018060515484623.png" alt="" /></p>
<p>为了淋漓尽致的展现,我将文件创建权限从拒绝到许可的整个过程都截取下来了!!!</p>
<p>从上面可以看到,文件test和test1的拥有者和群组分别为justmine001和justmine002,虽然用户justmine001可以删除justmine002创建的文件test1(目录权限的控制范围),但是却不能编辑它(文件权限的控制范围)。那该肿么办呢,还是无法完成协作工作啊。第一种方法是我们将文件test1权限设置为777,这样文件对任何人都可读、可写、可编辑,再加上目录权限的控制,其他人访问不了文件test1,没毛病。第二种方法,变更它们创建的文件群组为microsoft,这样也可以实现协作工作,貌似这种方法才是切合现实的。不过,每次都要管理员去做这件事情,那岂不是太麻烦他老人家,多不好意思啊,嘿嘿。正所谓,车道山前必有路,使用Linux特殊权限SGID可以完美实现同一群组下的任何账户创建的文件都拥有相同的群组microsoft(详情请阅读:<a target="_blank" href="https://www.jb51.net/LINUXjishu/617584.html">理解Linux文档的默认安全机制、隐藏属性、特殊权限</a>)。</p>
<blockquote>
<p>备注:Linux文档权限是一级一级的往下控制的,所以任何读、写、编辑文件的前提就是要拥有能够进入文件所属目录的权限。</p>
</blockquote>
<p><strong>设置特殊权限</strong></p>
<p>为目录<code>/microsoft/eshop</code>设置SGID权限</p>
<p><code>chmod 2770 /microsoft/eshop</code></p>
<p>使用justmine002账号创建文件,查询文件权限:</p>
<p><img src="https://img.jbzj.com/file_images/article/201806/2018060515484624.png" alt="" /></p>
<p>从上图可以看到,justmine002所属的文件群组自动变更成microsoft,而umask默认为002,两人同属一个群组,自然就可以互相修改彼此的文件了!!!</p>
<p><strong>总结</strong></p>
<p>Linux系统管理员的主要任务其实就是如何管理好系统的文件系统,那么对于文档多租户管理,首先新建一个统一的群组,然后将目录权限设置为2770,最后把需要协作工作的用户加入这个群组,就是这么简单。往往,结果很简短,但是思考分析过程就如同西天取经,希望把整个过程分享给大家,不仅要知其然,更要知其所以然,这样才能举一反三,融汇贯通,达到灵活运用的目的。</p>
頁: [1]
查看完整版本: Linux 文档多租户管理方法