zoukankan      html  css  js  c++  java
  • 文件的权限

    Linux权限

    开启两个窗口  一个root用户  一个普通用户 
    root用户用于更改权限,普通用户用于测试

    对于文件rwx权限

    创建环境

    [root@nfsnobody ~]# mkdir -p /nfsnobody
    [root@nfsnobody ~]# echo  'hostname'  >/nfsnobody/test.sh
    [root@nfsnobody ~]# cat /nfsnobody/test.sh
    hostname
    

    r权限测试

    root下修改权限  让用户只有r权限
    
    [root@nfsnobody nfsnobody]# chmod u=r test.sh                   更改权限 u=r 只有r权限
    [root@nfsnobody nfsnobody]# ll                                  检查
    total 24
    -r--r--r--  1 nfsnobody nfsnobody   9 Aug  6 16:22 test.sh
    nfsnobody用户测试
    [nfsnobody@nfsnobody nfsnobody]$ ll                                nfsnobody用户下检查
    total 24
    -r--r--r--  1 nfsnobody nfsnobody   9 Aug  6 16:22 test.sh
    [nfsnobody@nfsnobody nfsnobody]$ cat test.sh                 可以读取
    hostname
    [nfsnobody@nfsnobody nfsnobody]$ echo 'nfsnobody' >> test.sh    不能写入
    -bash: test.sh: Permission denied
    [nfsnobody@nfsnobody nfsnobody]$ /nfsnobody/test.sh             不能执行
    -bash: /nfsnobody/test.sh: Permission denied
    

    w权限测试

    root下修改权限  让用户只有w权限
    
    [root@nfsnobody nfsnobody]# chmod u=w test.sh            超级用户下修改权限
    [root@nfsnobody nfsnobody]# ll
    total 24
    --w-r--r--  1 nfsnobody nfsnobody   9 Aug  6 16:22 test.sh     检查 只有w权限
    nfsnobody用户下
    [nfsnobody@nfsnobody nfsnobody]$ ll
    total 24
    --w-r--r--  1 nfsnobody nfsnobody   9 Aug  6 16:22 test.sh
    [nfsnobody@nfsnobody nfsnobody]$ cat test.sh             无法读取
    cat: test.sh: Permission denied
    [nfsnobody@nfsnobody nfsnobody]$ echo 'pwd' >> test.sh   可以写入
    [nfsnobody@nfsnobody nfsnobody]$ /nfsnobody/test.sh         无法执行
    -bash: /nfsnobody/test.sh: Permission denied
    只有w权限的时候 vim强制保存退出会导致源文件内容丢失
    

    x权限测试

    root下修改权限  让用户只有x权限
    
    [root@nfsnobody nfsnobody]# chmod u=x test.sh          root下修改
    [root@nfsnobody nfsnobody]# ll
    total 24
    ---xr--r--  1 nfsnobody nfsnobody  13 Aug  6 16:34 test.sh   只有x权限
    nfsnobody用户下测试
    [nfsnobody@nfsnobody nfsnobody]$ ll                       先检查
    total 24
    ---xr--r--  1 nfsnobody nfsnobody  13 Aug  6 16:34 test.sh
    [nfsnobody@nfsnobody nfsnobody]$ cat test.sh              无法查看
    cat: test.sh: Permission denied  
    [nfsnobody@nfsnobody nfsnobody]$ echo 'pwd' >> test.sh    无法写入
    -bash: test.sh: Permission denied
    [nfsnobody@nfsnobody nfsnobody]$ /nfsnobody/test.sh          
    无法执行  因为想要执行一个文件/脚本 可以执行 必须要有读取的权限 先知道内容才能执行
    bash: /nfsnobody/test.sh: Permission denied
    

    文件权限小结

    r   查看/读取 文件的内容
    w  修改文件的内容 需要r权限的配合
    x   执行文件的权限 需要r的权限配合
    只有w权限的时候 强制保存退出会导致源文件内容丢失 

    对于目录rwx的权限

    创建环境

    [root@nfsnobody nfsnobody]# mkdir  -p /nfsnobody/test
    [root@nfsnobody nfsnobody]# cd /nfsnobody/test
    [root@nfsnobody test]# touch /nfsnobody/test/nfsnobody{01..5}.txt
    [root@nfsnobody test]# tree
    .
    ├── nfsnobody01.txt
    ├── nfsnobody02.txt
    ├── nfsnobody03.txt
    ├── nfsnobody04.txt
    └── nfsnobody05.txt
    
    0 directories, 5 files
    

    r权限测试

    root用户下修改权限 修改目录r权限

    [root@nfsnobody nfsnobody]# chmod u=r test                修改权限
    [root@nfsnobody nfsnobody]# chown nfsnobody.nfsnobody test      修改所属用户和组
    [root@nfsnobody nfsnobody]# ll                            检查
    total 28
    dr--r-xr-x  2 nfsnobody nfsnobody 4096 Aug  7 09:21 test
    nfsnobody用户下测试
    [nfsnobody@nfsnobody nfsnobody]$ ll                          先检查
    total 28
    dr--r-xr-x  2 nfsnobody nfsnobody 4096 Aug  7 09:21 test
    [nfsnobody@nfsnobody nfsnobody]$ ls test                     可以看到文件名但是报错
    ls: cannot access test/nfsnobody02.txt: Permission denied
    ls: cannot access test/nfsnobody05.txt: Permission denied
    ls: cannot access test/nfsnobody04.txt: Permission denied
    ls: cannot access test/nfsnobody03.txt: Permission denied
    ls: cannot access test/nfsnobody01.txt: Permission denied
    nfsnobody01.txt  nfsnobody02.txt  nfsnobody03.txt  nfsnobody04.txt  nfsnobody05.txt
    [nfsnobody@nfsnobody nfsnobody]$ ls -l test                  只能看文件名 文件属性不能看
    ls: cannot access test/nfsnobody02.txt: Permission denied
    ls: cannot access test/nfsnobody05.txt: Permission denied
    ls: cannot access test/nfsnobody04.txt: Permission denied
    ls: cannot access test/nfsnobody03.txt: Permission denied
    ls: cannot access test/nfsnobody01.txt: Permission denied
    total 0
    -????????? ? ? ? ?            ? nfsnobody01.txt
    -????????? ? ? ? ?            ? nfsnobody02.txt
    -????????? ? ? ? ?            ? nfsnobody03.txt
    -????????? ? ? ? ?            ? nfsnobody04.txt
    -????????? ? ? ? ?            ? nfsnobody05.txt
    

    r权限 加 x权限

    接r权限  在r的基础上加上x
    root下再给目录加上x权限

    [root@nfsnobody nfsnobody]# chmod u+x test              在r的基础上加上x权限
    [root@nfsnobody nfsnobody]# ll                          检查
    total 28
    dr-xr-xr-x  2 nfsnobody nfsnobody 4096 Aug  7 09:21 test
    nfsnobody用户下测试
    [nfsnobody@nfsnobody nfsnobody]$ ll                        nfsnobody用户下检查
    total 28
    dr-xr-xr-x  2 nfsnobody nfsnobody 4096 Aug  7 09:21 test
    [nfsnobody@nfsnobody nfsnobody]$ ls test                  查看test目录的内容
    nfsnobody01.txt  nfsnobody02.txt  nfsnobody03.txt  nfsnobody04.txt  nfsnobody05.txt
    [nfsnobody@nfsnobody nfsnobody]$ ls -l test               可以查看 没有报错
    total 0
    -rw-r--r-- 1 root root 0 Aug  7 09:21 nfsnobody01.txt
    -rw-r--r-- 1 root root 0 Aug  7 09:21 nfsnobody02.txt
    -rw-r--r-- 1 root root 0 Aug  7 09:21 nfsnobody03.txt
    -rw-r--r-- 1 root root 0 Aug  7 09:21 nfsnobody04.txt
    -rw-r--r-- 1 root root 0 Aug  7 09:21 nfsnobody05.txt
    

    w权限测试

    root下给目录加上w权限

    [root@nfsnobody nfsnobody]# chmod u=w test            加上w权限 只有w权限测试
    [root@nfsnobody nfsnobody]# ll -ld test               检查 只有w权限
    d-w-r-xr-x 2 nfsnobody nfsnobody 4096 Aug  7 09:21 test
    nfsnobody用户下测试
    [nfsnobody@nfsnobody nfsnobody]$ ll -ld test                nfsnobody用户下检查
    d-w-r-xr-x 2 nfsnobody nfsnobody 4096 Aug  7 09:21 test
    [nfsnobody@nfsnobody nfsnobody]$ touch test/linux.txt       创建文件  
    touch: cannot touch `test/linux.txt': Permission denied  报错 无法创建
    [nfsnobody@nfsnobody nfsnobody]$ ls test                    无法查看
    ls: cannot open directory test: Permission denied 
    [nfsnobody@nfsnobody nfsnobody]$ rm -f test/nfsnobody01.txt    无法删除
    rm: cannot remove `test/nfsnobody01.txt': Permission denied  
    

    w权限 加 x权限

    接w权限  在w的基础上加上x
    root下给目录加上x权限

    [root@nfsnobody nfsnobody]# chmod u+x test              给目录在w权限基础上加上x权限
    [root@nfsnobody nfsnobody]# ll -ld test                 检查
    d-wxr-xr-x 2 nfsnobody nfsnobody 4096 Aug  7 09:21 test
    nfsnobody用户下测试
    [nfsnobody@nfsnobody nfsnobody]$ ll -ld test               nfsnobody用户下检查    
    d-wxr-xr-x 2 nfsnobody nfsnobody 4096 Aug  7 09:57 test
    [nfsnobody@nfsnobody nfsnobody]$ touch test/linux          创建新文件  成功
    [nfsnobody@nfsnobody nfsnobody]$ ls test                   无法查看
    ls: cannot open directory test: Permission denied
    [nfsnobody@nfsnobody nfsnobody]$ rm -f test/linux          可以删除
    删除一个文件 需要看 文件所在目录的权限 是否有wx  跟文件本身的权限没有关系
    

    目录权限小结

    目录权限小结:
    1. r 显示目录内容          需要x权限配合 
    2. w 是否能删除目录内容    在目录中创建文件   修改(重命名)
    3. x 是否能进入到目录 cd  (你是否能查看目录中文件的属性)
    4.   删除一个文件          看文件所在目录的权限 是否有wx权限  
    目录的rwx权限 
    r   查看目录内容    ls 
    w   可以删除 创建 重命名  目录中的文件 
    x   是否能进入到目录 cd

    文件访问过程与权限

    相对路径访问

    先通过文件名找到inode号码
    再读取inode中存放的block位置信息
    最后显示block内容,就是显示文件的内容。

    绝对路径访问

    如访问/etc下的文件:
    先访问/目录
    读取目录的block,找对应的文件
    /etc目录的inode
    读取文件的权限
    找到block的位置
    读取文件的内容

    关系

    文件的名字是存放在所在目录的block里面
    文件名与inode的对应关系放在目录的block中

    控制系统默认权限-umask

    系统的默认权限

    file---666 -rw-rw-rw     文件
    dir ---777 drwxrwxrwx    目录
    创建一个文件或目录 默认权限

    [root@nfsnobody nfsnobody]# touch 2.txt    创建文件
    [root@nfsnobody nfsnobody]# ll 2.txt       默认权限644
    -rw-r--r-- 1 root root 0 Aug  7 10:55 2.txt
    [root@nfsnobody nfsnobody]# mkdir  1       创建目录
    [root@nfsnobody nfsnobody]# ls -dl 1       目录权限默认755
    drwxr-xr-x 2 root root 4096 Aug  7 10:55 1
    

    umask 反掩码计算

    默认的最大权限减去 umask

    umask为偶数

    实例 当umask为0022
    文件:
    file-  666-022=644
    目录:
    dir-  777-022=755

    umask为奇数

    实例 当umask为0032
    当umask为奇数时,计算文件的默认权限的时候,要在奇数位加1
    目录不变
    file- 666-032=634
          +010   =644  最终是为644

    umask=035

    [root@nfsnobody ~]# umask 035
    [root@nfsnobody ~]# touch file035
    [root@nfsnobody ~]# mkdir dir035
    [root@nfsnobody ~]# ll file035 && ll -d dir035              使用ls 命令查看
    -rw-r---w- 1 root root 0 Sep  6 10:42 file035
    drwxr---w- 2 root root 4096 Sep  6 10:42 dir035
    

    file=642  dir=742

    修改umask的方法

    [root@nfsnobody ~]# vim /etc/profile
    if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
        umask 002
    else
        umask 022
    fi
    解释:
    如果 [ 用户UID>=199 ] 并且  [ 用户的名字 == 用户组名字 ];然后
        umask 002
    那么
        umask 022
    

    网站权限-让网站更安全

    控制权限

    让网站以www身份运行
    让主要的文件归root用户所有
    对于用户上传的文件处理
    让用户上传的文件放在属于www用户的文件夹中;
    限制文件的后缀;
    上传之后不能查看……
    网站 blog.nfsnobody.com  
    /app/blog  
     1.网站通过www用户运行(虚拟用户)
     2.控制目录/app/blog 权限
      file  644   root root  
      dir   755   root root  
     3.网站上传目录upload 
      file  644   www  www 
      dir   755   www  www

    模拟网站环境试验

    模拟环境

    mkdir -p /app/blog  /app/blog/upload   
    touch    /app/blog/tao.avi /app/blog/dao.mp4  /app/blog/ndd.torrent 
    useradd  www
    
    在www用户下测试
    [www@nfsnobody blog]$ whoami                    检查当前用户
    www
    [www@nfsnobody blog]$ ll                        查看 可以查看
    total 4
    -rw-r--r-- 1 root root    0 Aug  7 11:38 dao.mp4
    -rw-r--r-- 1 root root    0 Aug  7 11:38 ndd.torrent
    -rw-r--r-- 1 root root    0 Aug  7 11:38 tao.avi
    drwxr-xr-x 2 root root 4096 Aug  7 11:38 upload 
    试验  上传文件到upload目录
    [www@nfsnobody blog]$ touch /app/blog/movie.avi           无法写入  报错
    touch: cannot touch `/app/blog/movie.avi': Permission denied
    [www@nfsnobody blog]$ chown www.www /app/blog/upload/     解决方法  给www权限
    

    隐藏权限

    隐藏权限的作用

    lsattr 查看隐藏权限
    chattr 授予文件或目录隐藏的权限  如 +a -a
    a (append只能追加)如果设置了这个权限 只能追加 不能删除 不能修改
    i (immutable无敌) 无法删除 无法修改

    重要的文件或命令加上隐藏权限
    
    主要命令+i
    
    重要的配置文件+a
    
    /etc/passwd
    /etc/shadow
    /etc/group
    /etc/gshadow
    
    测试a权限
    

    只能向文件中追加内容,不能删除
    a (append只能追加)如果设置了这个权限 只能追加 不能删除 不能修改

    [root@nfsnobody /nfsnobody]# chattr +a test.sh          给文件加上a权限
    [root@nfsnobody /nfsnobody]# lsattr  test.sh            检查
    -----a-------e- test.sh 
    [root@nfsnobody /nfsnobody]# #a  append                 只能追加 
    [root@nfsnobody /nfsnobody]# >test.sh                   无法清空
    -bash: test.sh: Operation not permitted
    [root@nfsnobody /nfsnobody]# echo pwd >>test.sh         可以追加
    [root@nfsnobody /nfsnobody]# 
    m -f test.sh             无法删除
    rm: cannot remove `test.sh': Operation not permitted
    

    测试i权限

    i (immutable无敌) 无法删除 无法修改
    不能对文件进行任何操作,root用户也不能操作。

    [root@nfsnobody ~]# chattr +i nfsnobody.txt
    [root@nfsnobody ~]# lsattr nfsnobody.txt
    ----i--------e- nfsnobody.txt
    
  • 相关阅读:
    Unity UGUI基础之Text
    Unity UGUI之Canvas&EventSystem
    ROS(indigo)国外开源示例包括多机器人控制等基于V-Rep和Gazebo的仿真
    lk中内联调用的dsb()
    svn 回退/更新/取消至某个版本命令详解
    ubuntu16.04中可以用于教学的有趣的应用
    高级UI晋升之布局ViewGroup(四)
    高级UI晋升之常用View(三)下篇
    高级UI晋升之常用View(三)中篇
    高级UI晋升之常用View(三)上篇
  • 原文地址:https://www.cnblogs.com/wenrulaogou/p/11982125.html
Copyright © 2011-2022 走看看