zoukankan      html  css  js  c++  java
  • linux上如何让other用户访问没有other权限的目录

    目前遇到一个问题,一个other用户要访问一个目录,他需要在这个目录下创建文件,因此这个目录需要一个写权限,于是就给了这个目录777的权限,这样这个权限有点太大了,很容易出现安全问题,那我们应该怎么办呢。

    我们先来看为什么一定要给这个目录777的权限呢?例如这个other用户为lbh,这个目录为/home/tmp_test/。我们在/home目录下创建tmp_test目录,创建好后,这个目录的默认权限是与umask值相关的。

    ~]:/home # umask
    0027
    ~]:/home # mkdir tmp_test
    ~]:/home # ll | grep tmp_test
    drwxr-x---  2 root      root            4096 Apr 19 11:59 tmp_test
    ~]:/home # umask 0077
    ~]:/home # mkdir tmp_test_1
    ~]:/home # ll | grep tmp_test_1
    drwx------  2 root      root            4096 Apr 19 12:01 tmp_test_1

    默认情况下,这个目录是不会给other权限的用户有读写权限的,所以以lbh这个用户来访问这个目录时访问不到的,更何况是写。

    [lbh@linux-home]$ cd tmp_test
    bash: cd: tmp_test: Permission denied

    所以如果other要访问这个目录,需要修改这个目录的权限,我们将这个目录改为777权限,这个样lbh这个用户就可以访问了,但是这样其他用户也可以访问这个目录了,这对安全造成很大的隐患。那怎么办呢?

    一、给这个目录加一个组账号,然后访问的other用户加入到这个组里。

    1、我们先创建一个组账号:

    groupadd lbh_grp

    创建之后,可以在/etc/group这个文件中看到新增的组名,以及组ID信息。

    lbh_grp:x:1004:

    2、修改tmp_test目录的所属组

    root创建的目录默认的所属组都是root,使用chgrp命令来修改所属组。

    chgrp lbh_grp tmp_test

    3、将other用户加入到所属组中

    先用groups lbh命令查看这个用户所属组

    :~ # groups lbh
    lbh : lbh

    然后使用命令usermod -g lbh_grp lbh  为lbh这个用户添加一个组,主要要加-a选项,-a表示append,这样不会改变lbh原来所属的组,只是给lbh添加一个组。

    :~ # groups lbh
    lbh : lbh lbh_grp

    这时再使用lbh这个用户,就可以访问/home/tmp_test这个目录了

    二、第二种办法,为进程添加capabilities

    Capabilities机制,是在Linux内核2.2之后引入的。它将root用户的权限细分为不同的领域,可以分别启用或禁用。从而,在实际进行特权操作时,如果euid不是root,便会检查是否具有该特权操作所对应的capabilities,并以此为依据,决定是否可以执行特权操作。linux 本身对权限的检查就是基于 capabilities 的,root 用户有全部的 capabilities,所以啥都能干。也就是说给进程加入相应的cap能力后,其他用户使用这个进程时,就可以像root用户一样使用这个cap能力。cap能力有很多,可以参考capabilities(7)。

    比如我们现在给touch这个命令加入一个cap能力,如下:

    setcap 'cap_dac_override+epi' /usr/bin/cd//多个cap能力可以用,分隔,如  
    setcap 'cap_chown,cap_dac_override,cap_kill,cap_net_bind_service,cap_sys_nice+eip' /home/register
    使用getcap来查询

    + 表示启用,- 表示禁用。

    e:表示是否激活该 capability
    p:是否允许进程设置该 capability
    i:子进程是否能继承 capabilities

    查看linux手册,这个cap_dac_override的解释如下:

    CAP_DAC_OVERRIDE
    Bypass file read, write, and execute permission checks. (DAC is an abbreviation of "discretionary access control".)

    这样,lbh这个用户,就可以使用cd命令访问/home/tmp_test这个目录了。

    参考 http://www.cnblogs.com/chenmh/p/5459359.html

    http://blog.51yip.com/linux/1137.html

    http://blog.51cto.com/343308530/1249842

    http://blog.51cto.com/343308530/1249842

    capabilities 参考:

    https://xiezhenye.com/2017/06/linux-capabilities.html

    http://rk700.github.io/2016/10/26/linux-capabilities/

    http://man7.org/linux/man-pages/man7/capabilities.7.html

    https://feichashao.com/capabilities_basic/

  • 相关阅读:
    JAVA基础(十六)Super关键字
    JAVA基础(十五)this关键字
    JAVA基础(十四2.0)
    JAVA基础(十三)多态
    JAVA基础(十二)抽象类与接口
    git基本使用
    vuetify中treeview部分属性梳理
    vuetify初次使用心得
    react-常见面试题
    maven中profile的使用
  • 原文地址:https://www.cnblogs.com/xingmuxin/p/8884707.html
Copyright © 2011-2022 走看看