• Linux文件和文件夹权限管理


    Linux有用户和用户组的概念,为了区分不同用户和用户组对资源的利用管理''范围'',还需要配合Linux权限管理,下面简单记录下,以下操作全部基于centos6.5。

    权限及其操作

    权限一般有逻辑权限、物理权限,以及用户root权限的说法。

    逻辑权限

    随便打开一个文件或文件夹,使用ll命令后可以查看逻辑权限的内容。

    # 这个文件的权限为:root用户可读可写,root用户组可读,其他用户可读
    -rw-r--r--. 1 root root    0 Oct 16 13:12 messi
    

    那具体前面那一串-rw-r--r--是什么意思,参考如下表格。

    字符 含义
    - 占1位,-代表普通文件类型,d代表目录,l代表符号链接文件,b代表块文件等
    用户权限 占2-4位,r代表读权限,w代表写权限,x代表执行权限
    用户组权限 占5-7位,权限同上
    其他权限 占8-10位,权限同上

    这就是逻辑权限的概念,对应的命令就是chmod,下面演练一下,具体命令解释在注释中。

    给hadoop目录设置用户可读可写可执行,给用户组设置可读可执行,给其他用户设置可读可执行权限。

    # 直接用数字
    [root@node02 /home]# chmod 755 hadoop
    # 指定用户使用u,指定用户组使用g,指定其他使用o,如果是所有都执行则指定a
    [root@node02 /home]# chmod u+rwx,g+rx,o+rx hadoop
    [root@node02 /home]# ll
    total 20
    # 修改hadoop目录权限成功
    drwxr-xr-x. 2 root root 4096 Oct 16 16:47 hadoop
    

    给hadoop设置不可读写操作权限,再修改为用户,用户组和其他都具有可执行权限。

    [root@node02 /home]# chmod 000 hadoop
    [root@node02 /home]# ll
    total 20
    # 修改成功
    d---------. 2 root root 4096 Oct 16 16:47 hadoop
    [root@node02 /home]# chmod +x hadoop
    [root@node02 /home]# ll
    total 20
    # 修改成功
    d--x--x--x. 2 root root 4096 Oct 16 16:47 hadoop
    
    

    物理权限

    物理权限可以修改某个文件或文件夹不可以修改、增加和删除等权限,一般不给根目录/、临时文件夹/tmp、日志文件夹/var,挂载文件夹/dev设置。

    添加物理权限语法为 chattr [选项] 文件名或目录名

    [root@node02 /home]# chattr --help
    Usage: chattr [-RVf] [-+=AacDdeijsSu] [-v version] files..
    

    其中常用选项如下:

    选项 解释
    i 表示不能对文件或文件夹进行修改、增加和删除
    a 表示文件或文件夹只能追加操作,不能修改和删除
    R 递归处理
    S 即时更新文件或目录
    s 保密删除文件或目录
    + <属性> 开始某个物理权限
    - <属性> 关闭某个物理权限

    查看物理权限语法为 lsattr [选项] 文件或文件夹

    -R     Recursively list attributes of directories and their contents.
    -a     List all files in directories, including files that start with ‘.’.
    -d     List directories like other files,  rather  than  listing their contents.
    

    将hadoop文件夹设置为不可修改、增加和删除操作,然后尝试在文件夹里新建文件。

    # 修改物理权限
    [root@node02 /home]# chattr +i hadoop
    # 查看物理权限,包括隐藏文件
    [root@node02 /home]# lsattr -a hadoop
    -------------e- hadoop/..
    ----i--------e- hadoop/.
    [root@node02 /home]# cd hadoop
    # 在hadoop文件夹下新建文件,提示不允许
    [root@node02 /home/hadoop]# touch log.txt
    touch: cannot touch `log.txt': Permission denied
    

    修改hadoop文件夹为可追加,再次尝试在文件夹里新建文件。

    # 关闭i物理权限
    [root@node02 /home]# chattr -i hadoop
    # 增加a物理权限,代表可追加
    [root@node02 /home]# chattr +a hadoop
    # 查看已添加可追加权限
    [root@node02 /home]# lsattr -a 
    -----a-------e- ./hadoop
    [root@node02 /home]# cd hadoop
    [root@node02 /home/hadoop]# touch log.txt
    [root@node02 /home/hadoop]# ll
    total 0
    # 添加文件成功
    -rw-r--r--. 1 root root 0 Oct 16 17:21 log.txt
    [root@node02 /home/hadoop]# 
    

    普通用户root权限

    sudo命令让普通用户也可以拥有root的权限,这样在普通用户下可以执行root用户部分操作,它有如下优点。

    (1)可以使用root用户配置的环境

    (2)不需要切换root用户也可以执行操作

    (3)限制用户执行有限的root权限

    (4)可以记录sudo命令,方便后续查看操作日志,排查危险操作

    下面是参考博文完成的sudo操作日志记录。

    a 修改/etc/rsyslog.conf文件,添加如下内容到文件最后

    [root@node02 /var/log]# vim /etc/rsyslog.conf 
    
    # 打印sudo操作记录
    local2.debug                                            /var/log/sudo.log
    

    b 使用visudo命令编辑/etc/sudoers,添加如下内容到最后

    [root@node02 /var/log]# visudo
    
    ## 记录sudo日志配置
    Defaults logfile=/var/log/sudo.log
    Defaults loglinelen=0
    Defaults !syslog
    

    c 在/etc/log目录下新建一个sudo.log文件,然后重启rsyslog服务

    [root@node02 /var/log]# touch sudo.log
    [root@node02 /var/log]# cat sudo.log 
    [root@node02 /var/log]# service rsyslog restart
    Shutting down system logger:                               [  OK  ]
    Starting system logger:                                    [  OK  ]
    

    d 切换到hadoop用户,执行一个cd操作

    [root@node02 /home]# su hadoop
    [hadoop@node02 /home]$ sudo cd /root
    
    We trust you have received the usual lecture from the local System
    Administrator. It usually boils down to these three things:
    
        #1) Respect the privacy of others.
        #2) Think before you type.
        #3) With great power comes great responsibility.
    
    [sudo] password for hadoop: 
    # 提示没有在sudoers添加hadoop sudo权限,需要修改/etc/sudoers文件
    hadoop is not in the sudoers file.  This incident will be reported.
    

    e 添加hadoop sudo权限

    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL
    # 代表hadoop用户可以执行sudo命令,需要密码
    hadoop  ALL=(ALL)       ALL
    # 代表hadoop用户组可以执行sudo命令,需要密码
    # %hadoop  ALL=(ALL)      ALL
    # 代表hadoop用户可以执行sudo命令,不需要密码
    # hadoop   ALL=(ALL)      NOPASSWD:ALL
    # 代表hadoop用户组可以执行sudo命令,不需要密码
    # %hadoop  ALL=(ALL)      NOPASSWD:ALL
    

    f 重新执行发现成功执行sudo命令

    [root@node02 /home]# su hadoop
    [hadoop@node02 /home]$ sudo ls /home
    [sudo] password for hadoop: 
    book  hadoop  messi  passwd  test  
    [hadoop@node02 /home]$ cat /var/log/sudo.log 
    # 第一条就是上面提示的没有添加hadoop到sudoers文件的日志
    Oct 16 20:03:42 : hadoop : user NOT in sudoers ; TTY=pts/1 ; PWD=/home ; USER=root ; COMMAND=cd /root
    # 正常执行 ls /home命令后的日志
    Oct 16 20:19:00 : hadoop : TTY=pts/1 ; PWD=/home ; USER=root ; COMMAND=/bin/ls /home
    

    权限应用实操

    实操1:创建两个文件夹hadoop和hive,让文件夹对不同用户组的用户进行开放,用户组名bigdata01,bigdata02。

    以下是实现的一种方式,利用权限,用户和组的知识来完成。

    a 创建用户组bigdata01和bigdata02

    [root@node02 /home]# groupdel bigdata01
    [root@node02 /home]# groupdel bigdata02
    [root@node02 /]# cat /etc/group
    ...
    # 查看发现创建group成功
    bigdata01:x:1000:
    bigdata02:x:1001:
    

    b 在/根目录下创建用户根目录bigclub,创建4个用户,让用户家目录在/bigclub目录下。

    [root@node02 /]# mkdir bigclub
    # 创建四个用户,指定家目录和用户组
    [root@node02 /]# useradd -d /bigclub/stu1 -m -g bigdata01 stu1
    [root@node02 /]# useradd -d /bigclub/stu2 -m -g bigdata01 stu2
    [root@node02 /]# useradd -d /bigclub/stu3 -m -g bigdata02 stu3
    [root@node02 /]# useradd -d /bigclub/stu4 -m -g bigdata02 stu4
    [root@node02 /]# id stu1
    uid=501(stu1) gid=1000(bigdata01) groups=1000(bigdata01)
    [root@node02 /]# id stu2
    uid=502(stu2) gid=1000(bigdata01) groups=1000(bigdata01)
    [root@node02 /]# id stu3
    uid=503(stu3) gid=1001(bigdata02) groups=1001(bigdata02)
    [root@node02 /]# id stu4
    uid=504(stu4) gid=1001(bigdata02) groups=1001(bigdata02)
    [root@node02 /]# cd /bigclub
    # 查看家目录
    [root@node02 /bigclub]# ll
    total 16
    drwx------. 2 stu1 bigdata01 4096 Oct 16 21:37 stu1
    drwx------. 2 stu2 bigdata01 4096 Oct 16 21:37 stu2
    drwx------. 2 stu3 bigdata02 4096 Oct 16 21:37 stu3
    drwx------. 2 stu4 bigdata02 4096 Oct 16 21:37 stu4
    

    c 创建两个文件夹hadoop和hive,修改用户组,一个为bigdata01,一个为bigdata02,并将文件夹赋予770权限

    # 创建文件夹
    [root@node02 /tmp]# mkdir hadoop
    [root@node02 /tmp]# mkdir hive
    [root@node02 /tmp]# ll
    total 8
    drwxr-xr-x. 2 root root 4096 Oct 16 21:42 hadoop
    drwxr-xr-x. 2 root root 4096 Oct 16 21:42 hive
    -rw-------. 1 root root    0 Oct 11 17:39 yum.log
    # 修改用户组
    [root@node02 /tmp]# chown root:bigdata01 hadoop
    [root@node02 /tmp]# chown root:bigdata02 hive
    [root@node02 /tmp]# ll
    total 8
    drwxr-xr-x. 2 root bigdata01 4096 Oct 16 21:42 hadoop
    drwxr-xr-x. 2 root bigdata02 4096 Oct 16 21:42 hive
    -rw-------. 1 root root         0 Oct 11 17:39 yum.log
    # 修改文件夹权限为770,这样其他组的成员将无法访问
    [root@node02 /tmp]# chmod 770 hadoop
    [root@node02 /tmp]# chmod 770 hive
    [root@node02 /tmp]# ll
    total 8
    drwxrwx---. 2 root bigdata01 4096 Oct 16 21:42 hadoop
    drwxrwx---. 2 root bigdata02 4096 Oct 16 21:42 hive
    -rw-------. 1 root root         0 Oct 11 17:39 yum.log
    

    d 测试,使用stu1进入hadoop是ok的,但是stu1进入hive会被限制,同理stu3进入hive是ok的,但是stu3进入hadoop会被限制。

    # 切换stu1
    [root@node02 /tmp]# su - stu1
    # 可进入hadoop
    [stu1@node02 ~]$ cd /tmp/hadoop
    [stu1@node02 /tmp/hadoop]$ cd ..
    # 无法进入hive
    [stu1@node02 /tmp]$ cd hive
    -bash: cd: hive: Permission denied
    [stu1@node02 /tmp]$ su root
    Password: 
    # 切换stu3
    [root@node02 /tmp]# su stu3
    # 可进入hive
    [stu3@node02 /tmp]$ cd hive
    [stu3@node02 /tmp/hive]$ cd ..
    # 不可进入hadoop
    [stu3@node02 /tmp]$ cd hadoop
    bash: cd: hadoop: Permission denied
    

    这样就完成了实操1的功能。

    实操2:在上面案例基础上,在hadoop文件夹下使用stu1创建两个文件,一个可以被stu2读取和修改,另外一个可以被读取但是不能修改。

    [root@node02 /tmp]# su stu1
    [stu1@node02 /tmp]$ ll
    total 8
    drwxrwx---. 2 root bigdata01 4096 Oct 16 21:42 hadoop
    drwxrwx---. 2 root bigdata02 4096 Oct 16 21:42 hive
    -rw-------. 1 root root         0 Oct 11 17:39 yum.log
    [stu1@node02 /tmp]$ cd hadoop/
    [stu1@node02 /tmp/hadoop]$ ll
    total 0
    # stu1用户下创建两个文件
    [stu1@node02 /tmp/hadoop]$ touch file1.txt
    [stu1@node02 /tmp/hadoop]$ touch file2.txt
    # 分别给两个文件留下stu1签名
    [stu1@node02 /tmp/hadoop]$ echo "stu1 come here and sign" >> file1.txt
    [stu1@node02 /tmp/hadoop]$ echo "stu1 come here and sign" >> file2.txt
    [stu1@node02 /tmp/hadoop]$ cat file1.txt 
    stu1 come here and sign
    [stu1@node02 /tmp/hadoop]$ cat file2.txt 
    stu1 come here and sign
    [stu1@node02 /tmp/hadoop]$ ll
    total 8
    -rw-r--r--. 1 stu1 bigdata01 24 Oct 16 21:53 file1.txt
    -rw-r--r--. 1 stu1 bigdata01 24 Oct 16 21:53 file2.txt
    # 修改file1.txt权限为组内可读可写
    [stu1@node02 /tmp/hadoop]$ chmod 760 file1.txt
    # 修改file2.txt权限为组内只读
    [stu1@node02 /tmp/hadoop]$ chmod 740 file2.txt
    [stu1@node02 /tmp/hadoop]$ ll
    total 8
    -rwxrw----. 1 stu1 bigdata01 24 Oct 16 21:53 file1.txt
    -rwxr-----. 1 stu1 bigdata01 24 Oct 16 21:53 file2.txt
    [stu1@node02 /tmp/hadoop]$ su root
    Password: 
    [root@node02 /tmp/hadoop]# su stu2
    [stu2@node02 /tmp/hadoop]$ ll
    total 8
    -rwxrw----. 1 stu1 bigdata01 24 Oct 16 21:53 file1.txt
    -rwxr-----. 1 stu1 bigdata01 24 Oct 16 21:53 file2.txt
    # stu2用户尝试对file1.txt进行修改成功
    [stu2@node02 /tmp/hadoop]$ echo "stu2 come here and sign" >> file1.txt
    # stu2用户尝试对file2.txt进行修改失败
    [stu2@node02 /tmp/hadoop]$ echo "stu2 come here and sign" >> file2.txt
    # 不允许
    bash: file2.txt: Permission denied
    # file1留下了stu2的签名
    [stu2@node02 /tmp/hadoop]$ cat file1.txt 
    stu1 come here and sign
    stu2 come here and sign
    # file2依然只有stu1的签名
    [stu2@node02 /tmp/hadoop]$ cat file2.txt 
    stu1 come here and sign
    

    以上为linux下权限的相关知识,供参考。

    参考博文:

    (1)https://www.cnblogs.com/garfieldcgf/p/8323489.html

    (2) https://www.cnblogs.com/okokabcd/p/8724263.html

    (3) https://www.cnblogs.com/52py/p/9598237.html 记录sudo日志配置

    (4) https://blog.csdn.net/sinat_36118270/article/details/62899093 在sudoers里设置普通用户

  • 相关阅读:
    【百度之星2014~初赛(第二轮)解题报告】Chess
    Cocos2d-x3.0游戏实例之《别救我》第二篇——创建物理世界
    【CSS】使用CSS控制文字过多自动省略号
    【jar】JDK将单个的java文件打包为jar包,并引用到项目中使用【MD5加密】
    【JSP EL】el表达式判断是否为null
    【redis】5.spring boot项目中,直接在spring data jpa的Repository层使用redis +redis注解@Cacheable直接在Repository层使用,报错问题处理Null key returned for cache operation
    【Exception】查看异常出现在具体的文件名/类名/方法名/具体行号
    【bootstrap】使用支持bootstrap的时间插件daterangepicker
    【css】设置div位于浏览器的最底层,离用户最远
    【前台】【单页跳转】整个项目实现单页面跳转,抛弃iframe
  • 原文地址:https://www.cnblogs.com/youngchaolin/p/11687710.html
Copyright © 2020-2023  润新知