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

    Linux权限管理之基本权限_第1张图片

目录的默认权限

  • 目录的默认权限最大为777
  • 默认权限需要换算成字母再相减
  • 建立目录之后的默认权限,为777减去umask值
    《Linux权限管理之基本权限》

  • 修改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命令
    ### 查看保存密码的文件
    /bin/vi /etc/shadow # 编辑shadow
    ll /etc/shadow      #普通用户这个文件根本没有权限
    
    #但是一旦vi被赋予sudo权限,编辑shadow将加密的密码直接替换原来的,就可以修改密码,
    
    • 超级管理员打开shadow 文件
      Linux权限管理之基本权限_第2张图片

你可能感兴趣的:(Linux权限管理之基本权限)