1. Linux 权限位

对于权限,有点绕,因为文件的权限和目录的权限是有一些区别的。

在Linux中,有5种权限,分别是,r、w、x、s、t。

  • 可读权限:r
  • 可写权限:w
  • 可执行权限:x
  • Setuid:s(Set User ID)
  • Setgid:s(Set Group ID)
  • 粘滞位:t

下面依次讲解权限位:

1.1 可读权限

对于文件,可读权限:

  • 用字符表示:r

  • 用八进制表示:4

  • 可以对读取文件里的内容

对于目录,可读权限:

  • 用字符表示:r
  • 用八进制表示:4
  • 可以列出目录下的内容

1.2 可写权限

对于文件,可写权限:

  • 用字符表示:w

  • 用八进制表示:2

  • 可以对文件进行更改

对于目录,可写权限:

  • 用字符表示:w
  • 用八进制表示:2
  • 可以在目录下创建文件或目录

1.3 可执行权限

对于文件,可写权限:

  • 用字符表示:x

  • 用八进制表示:1

  • 可以执行该文件(脚本或命令)

对于目录,可写权限:

  • 用字符表示:x
  • 用八进制表示:1
  • 可以cd进入该目录

1.4 Setuid

这是一个特殊的权限位,

对于文件,Setuid:

  • 用字符表示:s
  • 用八进制表示:4000

Setuid最常用的是配合执行权限x使用,例如,系统中内置命令passwd,它默认是带有s权限位,passwd命令的主要功能是修改用户的密码,而修改密码的流程是:

  1. 将加密后的哈希值写入到/etc/passwd文件对应的用户条目中。
  2. 使用pwconv工具转换到/etc/shadow文件中。
  3. 而普通用户是没有权限修改/etc/passwd 和 /etc/shadow文件

在普通用户尝试执行passwd,该passwd的所有者是root并且设置了Suid,因此passwd以root身份执行。

当你查看进程时,你会发现,进程不是普通用户,而是passwd工具的所有者(root)


1.5 Setgid

这是一个特殊的权限位,

对于目录,Setgid:

  • 用字符表示:s
  • 用八进制表示:2000

当一个目录拥有sgid权限时,其他用户在该目录下创建文件或目录后,它会继承目录的id,即创建的文件或目录的属组为父目录的属组。

[root@self data]# mkdir project
[root@self data]# chmod 2777 project/
[root@self data]# ls -lh
total 0
drwxrwsrwx 2 root root 6 Apr 20 23:42 project
[root@self data]# su bob
[bob@self data]$ mkdir project/test_for_bob
[bob@self data]$ ls -lh project/
total 0
drwxrwsr-x 2 bob root 6 Apr 20 23:42 test_for_bob

1.6 粘滞位

这是一个特殊的权限位,

对于目录粘滞位:

  • 用字符表示:t
  • 用八进制表示:1000

/tmp目录就是使用了粘滞位t,其作用是,在该目录下创建文件或目录后,仅允许其作者(所有者)进行删除操作。其他用户无法删除。


2. Linux 权限表


3. ls -l 输出详解

例如:lrwxrwxrwx. 1 root root 7 Oct 3 02:33 bin -> usr/bin

  • 第一个字符的含义:

    • -:常规文件
    • b:块特殊文件
    • c:字符特殊文件
    • C:高性能(”连续数据“)文件
    • d:目录
    • D:门(Solaris 2.5及以上版本)
    • l:符号链接
    • M:离线(”前已“)文件(Cray DMF)
    • n:网络专用文件(HP-UX)
    • p:FIFO(命名管道)
    • P:断开(Solaros 10及以上)
    • s:套接字
    • ?:其他文件
  • 第二个字符的含义:

    • r:属主的读权限
  • 第三个字符的含义:

    • w:属主的写权限
  • 第四个字符的含义:

    • x:属主的执行权限

    • S:设置了SUID,没有执行权限

    • s:设置了SUID,具有执行权限

  • 第五个字符的含义:

    • r:属组的读权限
  • 第六个字符的含义:

    • w:属主的写权限
  • 第七个字符的含义:

    • x:属组执行权限

    • S:设置了SGID,没有执行权限

    • s:设置了SGID,具有执行权限

  • 第八个字符的含义:

    • r:其他人的读权限
  • 第九个字符的含义:

    • w:其他人的写权限
  • 第十个字符的含义:

    • x:其他人的执行权限
    • T:设置了粘滞位,没有执行权限
    • t:设置了粘滞位,具有执行权限
  • 第十一个字符的含义:

    • .:没有任何其他替代访问方法的SELinux安全上下文(没有设置ACL)
    • +:具有任何其他组合访问方法的SELinux安全上下文(设置了ACL)
  • 第十二个字符的含义:该文件的硬链接数量

  • 第十三个字符的含义:该文件的属主

  • 第十四个字符的含义:该文件的属组

  • 第十五个字符的含义:该文件的大小

  • 第十六到第十八个字符的含义:最后一次修改的时间

  • 第十九个字符的含义:文件或目录的名称

  • 第二十个字符的含义:链接符号

  • 第二十一个字符的含义:链接文件的源文件


4. umask 掩码

umask是一个内置命令。其作用是指定创建的文件或目录的默认权限。

使用方法:umask [-S|-p] [mode]

  • -S:打印出字符权限位
  • -p:打印八进制数权限位(默认)

使用不加任何参数的umask会打印出八进制的权限:默认0022。

  • 第一个数字表示:特殊权限位的八进制数
  • 第二个数字表示:属主的八进制数的反掩码
  • 第三个数字表示:属组的八进制数的反掩码
  • 第四个数字表示:其他人的八进制数的反掩码

例如:手动更改,可使用八进制,也可以使用字符表示

[root@localhost data]# umask
0022
[root@localhost data]# mkdir test_dir
[root@localhost data]# touch test_txt
[root@localhost data]# ls -lh
total 0
drwxr-xr-x 2 root root 6 Apr 21 01:34 test_dir
-rw-r--r-- 1 root root 0 Apr 21 01:34 test_txt
[root@localhost data]# rm -rf *
[root@localhost data]# umask 0777
[root@localhost data]# mkdir test_dir
[root@localhost data]# touch test_txt
[root@localhost data]# ls -lh
total 0
d--------- 2 root root 6 Apr 21 01:37 test_dir
---------- 1 root root 0 Apr 21 01:37 test_txt

注意:尽管你的umask设置为0000,后续创建文件的权限依然是666。出于安全着想,执行权限必须手动添加。所以你会看到,目录权限为777,而文件权限为666

Linux 权限位详解的更多相关文章

  1. Linux chmod命令详解

    Linux chmod命令详解 chmod----改变一个或多个文件的存取模式(mode)   chmod [options] mode files   只能文件属主或特权用户才能使用该功能来改变文件 ...

  2. Linux find命令详解

    转自Linux find命令详解 一.find 命令格式 1.find命令的一般形式为: find pathname -options [-print -exec -ok ...] 2.find命令的 ...

  3. Linux串口编程详解(转)

    串口本身,标准和硬件 † 串口是计算机上的串行通讯的物理接口.计算机历史上,串口曾经被广泛用于连接计算机和终端设备和各种外部设备.虽然以太网接口和USB接口也是以一个串行流进行数据传送的,但是串口连接 ...

  4. Linux常用命令详解—基于CentOS7

    ## Linux 目录- /:根目录,一般只存放目录,不存放文件- /bin -> /usr/bin:可执行二进制文件的目录,也是常用命令目录,如常用的命令 ls.cat.mv 等- /boot ...

  5. Linux常用命令详解下

    Linux常用命令详解 目录 一.Linux常用命令 1.1.查看及切换目录(pwd.cd.ls.du) 1.2.创建目录和文件(mkdir.touch.ln) 1.3.复制.删除.移动目录和文件(c ...

  6. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  7. Linux /dev目录详解和Linux系统各个目录的作用

    Linux /dev目录详解(转http://blog.csdn.net/maopig/article/details/7195048) 在linux下,/dev目录是很重要的,各种设备都在下面.下面 ...

  8. Linux netstat命令详解

    Linux netstat命令详解 一  简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多 ...

  9. Linux crontab 命令详解

    在 Linux 中,任务可以被配置在指定的时间段.指定的日期.或系统平均载量低于指定的数量时自动运行.红帽企业 Linux 预配置了对重要系统任务的运行,以便使系统能够时时被更新.譬如,被 locat ...

随机推荐

  1. Git的安装和使用

    在CentOS 6.x/7.x上安装git及最新版 方式一.yum安装 # yum install git 通过yum方式安装,版本比较旧,CentOS6.5上安装好是1.7.1版.如果想安装最新版或 ...

  2. git撤销commit 并保存之前的修改

    撤销并保留修改 参数 –soft  # 先进行commit ,之后后悔啦  $ git commit -am "对首篇报告研究员字段改为author_name" 执行git log ...

  3. python csv读写

    https://blog.csdn.net/taotiezhengfeng/article/details/75577998

  4. C++标准库之string返回值研究

    先说结论(不一定适用所有环境): 1) GCC默认开启了返回值优化(RVO),除非编译时指定“-fno-elide-constructors”: 2) 现代C++编译器一般都支持返回值优化: 3) s ...

  5. vue学习-自动行合并的table

    测试的效果 测试的html源码截图 v-table在tableGroup.js中定义,以下就render方法,行的所有单元格都在tableGrouper.js中处理 render:function(h ...

  6. python data science handbook1

    import numpy as np import matplotlib.pyplot as plt import seaborn; seaborn.set() rand = np.random.Ra ...

  7. 启动eclipse could not create the java Vittual Machine

    查询并几种方法: 1.都说是 eclipse.ini  环境初始文件的内存问题,续增大堆内存大小,具体配置如,如果找不到问题所在可以试试(该方法是确定环境变量没问题下试行) -Xms64m-Xmx25 ...

  8. @Slf4j注解实现日志输出

    自己写日志的时候,肯定需要: private final Logger logger = LoggerFactory.getLogger(LoggerTest.class); 每次写新的类,就需要重新 ...

  9. sqoop错误集锦1

    1.当时初学Sqoop的时候,mysql导入到hdfs导入命令执行以后,在hdfs上面没有找到对应的数据,今天根据这个bug,顺便解决这个问题吧,之前写的http://www.cnblogs.com/ ...

  10. Converting Recursive Traversal to Iterator

    In this article, I'm going to introduce a general pattern named Lazy Iterator for converting recursi ...