iMisty的技术栈

iMisty的技术栈

Linux权限管理之基本权限

974
2019-06-10

Linux权限管理之基本权限

在Linux中一切皆文件

文件基本权限

  • -rw-r--r--

    • -文件类型 (-文件,d目录, l软连接)
    • rw-(u所有者) r--(g所属组) r--(o其他人)
    • r读权限 w写权限 x执行权限(execute)

chmod 命令

  • chmod [选项] 模式 文件名

    • -R 递归

    • 模式

      • [ugoa][+-=][rwx]
      • [mode=421]
  • 修改权限的方式

    • chmod u+x test.log 赋予文件拥有者对某个文件的执行权限
    • chmod g+w,o+w test.log 赋予文件所属组和其他用户文件写入权限,多个操作用,隔开
    • chmod a=rwx test.log 赋予全部用户读写和执行权限,=直接赋值即可,不用在意原来的权限

以上操作易用性不高,命令代码量略大,当操作的内容有差别的时候,不方便

  • 权限的数字表示

    • r --- 4
    • w --- 2
    • x --- 1
  • 示例 (常用)

    *   `chmod 777 test.log`   赋予文件读写执行权限给全部用户
    
    • chmod 644 test.log 赋予拥有者读写权限,所属组和其他用户只读权限
    • chmod 755 test.log 赋予拥有者读写执行权限,所有者和所属组读权限和可执行权限
    • chmod 467 test.log 这种权限赋予方式不合理,也不应该出现

权限对文件的作用

  • r:读取文件内容(cat more head tail)

  • w:编辑,新增,修改文件内容(vi echo)

  • 但是不包含删除文件权限,对文件有写权限,对其上一级目录没有写权限,不能删除

  • x:可执行

权限对目录的作用

  • r:可以查询目录下的文件名(ls)
  • w:具有修改目录结构的权限,如新建文件和目录,删除此目录下文件和目录,重命名此目录下文件和目录,剪切(touch rm mv cp)
  • x:可以进入目录(cd)

对文件来讲最高权限是x,对目录来讲最高权限是w ,所以对文件少赋予x权限,目录少赋予w权限;
对目录只能赋予 0(没有权限) 5(rx) 7(rwx) ,其他权限4,1,6没有任何意义

  • 添加用户进行测试
    useradd user1
    passwd 123456
#### 修改文件的所有者
  • chown 用户名 文件名

    *   `chown misty test.log`    >在实际操作过程中,超级用户如果要让一个用户拥有7权限,最合理的方式是直接将当前文件的拥有者修改成这个指定用户,防止为了让这个用户拥有7权限,而不得不赋予其他用户7权限的情况
    

    修改文件的所属组

  • chgrp 组名 文件名

    *   `chgrp group1 test.log`
    
  • 第二种方式 chown 所有者:所属组 文件名

    *   `chown root:root test.log`
    
  • 让用户对文件拥有一定的权限

要求:拥有一个test目录
     让misty拥有所有权限
     让所有学员拥有查看权限
     其他人不许查看这个目录

 mkdir test #创建test目录
 useradd misty # 添加一个用户
 passwd 123456 # 设置密码
 groupadd student #添加一个学生组
 gpasswd -a user1 student #向学生组添加一个用户,用户之前已创建
 useradd user2      # 添加一个用户 不设置密码
 gpasswd -a user2 student    # 向学生组添加第二个用户  
 chown misty:student test  # 修改文件夹的所有者和所属组
 chmod 750 test       # 修改文件夹的权限,赋予拥有者最高权限,用户组读权限和执行权限(可查看可进入),其他用户不给权限
> 分配文件基本权限时,核心原则:`在最小权限情况下能够实现要求即可`,直接赋予777是极其不负责任和不安全的行为

### 文件默认权限
  • 创建文件之后直接赋予的权限就是默认权限

  • umask 查看默认权限(umask值)

  • 0022 默认umask值0022

  • 第一位0:文件特殊权限

  • 022 :文件默认权限

  • 修改umask值 umask umask值 ,临时生效,重启电脑丧失作用

  • umask 033

  • 永久修改umask值 vi /etc/profile 在环境变量配置文件里面修改umask值

  • 文件的默认权限

    • 文件的默认权限不能建立为执行文件,必须手工赋予执行权限,防止直接的执行权限所带来的安群隐患
    • 所以文件默认权限最大为666
    • 默认权限需要换算成字再相减(不是直接相减)
    • 建立文件之后的默认权限 ,为666 减去umask
      img

    目录的默认权限

  • 目录的默认权限最大为777

  • 默认权限需要换算成字母再相减

  • 建立目录之后的默认权限,为777减去umask值
    img

  • 修改umask值为0000

    • 此时创建文件默认权限是666
    • 此时创建目录额默认权限是777
  • 普通用户的默认umask为0002,对应的权限是664

    • root用户的UID为0,普通用户的UID大于500,小于500为管理员

    ACL权限

    文件特殊权限

    不可改变位权限

    sudo权限

    以上都是操作文件的权限,只有sudo是操作命令的权限(严格意义命令也是文件)

    • root把本来只能超级用户执行的命令赋予普通用户执行
    • sudo的操作对象是系统命令

    sudo的使用

  • visudo 实际修改的是/etc/sudoers文件

  • root ALL=[(ALL)] ALL #用户名 被管理主机的地址 = (可使用的身份) 授权命令(绝对路径)

  • #%wheel ALL=[(ALL)] ALL #%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)

  • whereis [命令] 查看命令的路径

  • 例子1:

  • 授权普通用户可以重启服务器

    visudo
    #这里也可以不指定身份
    - user1 All=(ALL) /sbin/shutdown -r now # 这里写的越详细,用户的权限越小,越粗略,用户的权限越高因为命令以及命令的参数可以指定
    :wq
    # 切换成普通用户执行如下命令
    su  - user1 #切换成普通用户
    sudo -l #查看可用的sudo命令
    sudo /sbin/shutdown -r now  #普通用户执行sudo赋予的命令
> 命令赋予的时候需要写绝对路径,普通用户执行的时候也需要写绝对路径;centos 6之后可以不用写绝对路径,做了相关的优化,但是在其他的发行版仍然需要
  • 例子2 :

  • 授权普通用户可以添加其他用户

    visudo
     - user1 ALL=/usr/sbin/useradd #授权添加用户的权限
     - user1 ALL=/usr/bin/passwd #授权用户设定密码的权限 ,因为没有密码是无法登陆的
     #查看用户是否添加成功
     cat /etc/passwd
     sudo /usr/sbin/useradd misty #添加用户
     sudo /usr/bin/passwd misty #修改密码
     #重复输入两次密码,设置完成    ### 非常重要,在这里有一个巨大的隐患,因为权限设置太过于简单,导致权限过大,以至于可以修改root用户的密码
     #补齐下面这句话,不允许设置root用户的密码,三句代码的顺序不能颠倒
     - user1 ALL=/usr/bin/passwd[A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
     # 用户密码要包含字母,不能为""(不能直接passwd ,以sudo的话是以root身份修改密码),不能为root用户设置密码
     ### 重要:当以sudo执行命令的时候身份是root,如果passwd后面不带用户,代表可以修改当前用户身份的密码(sudo 为root身份)
    
  
*   例子三

  *   不可以将sudo权限赋值给`vi`命令

```shell
 ### 查看保存密码的文件
  /bin/vi /etc/shadow # 编辑shadow
  ll /etc/shadow      #普通用户这个文件根本没有权限
  #但是一旦vi被赋予sudo权限,编辑shadow将加密的密码直接替换原来的,就可以修改密码,
  • 超级管理员打开shadow 文件
    img