在上面的章节中,我们知道了文件的权限可以用三个八进制数字表示。其实文件的权限应该用四个八进制来表示,不过用 ls -l 命令时,只显示三个罢了。那个没有显示的八进制数字其实是第一个,它用来设定一些特殊权限。这个八进制数字的三个位是:

SUID SGID sticky-bit

它们的含义是:SUID当设置了SUID位的文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都有文件所有者的特权。如果所有者是root的话,那么执行人就有超级用户的特权了。这时该位将变成一个

SGID与上面的内容类似。文件运行时,运行者将具有所属组的特权。

sticky-bitsticky 位要求操作系统既是在可执行程序退出后,仍要在内存中保留该程序的映象。这样做是为了节省大型程序的启动时间。但是会占用系统资源。因此设置该位,不如把程序写好。

set uid ;set gid;sticky bit区别

每一个文件有所有者及组编号,set uid ;set gid可以改变用户对文件具有的权限:写和执行.

setuid: 在执行时具有文件所有者的权限.

setgid: 设置目录. 一个目录被标上setgid位,此目录下创建的文件继承该目录的属性.

sticky bit: 该位可以理解为防删除位. 设置sticky bit位后,就算用户对目录具有写权限,但也只能添加文件而不能删除文件。

如何设置:

操作这些标志与操作文件权限的命令是一样的, 都是 chmod. 有两种方法来操作,

1) chmod u+s temp -- 为temp文件加上setuid标志. (setuid 只对文件有效,U=用户)

chmod g+s tempdir -- 为tempdir目录加上setgid标志 (setgid 只对目录有效,g=组名)

chmod o+t temp -- 为temp文件加上sticky标志 (sticky只对文件有效)

2) 采用八进制方式. 这一组八进制数字三位的意义如下,

abc

a - setuid位, 如果该位为1, 则表示设置setuid

b - setgid位, 如果该位为1, 则表示设置setgid

c - sticky位, 如果该位为1, 则表示设置sticky

设置后, 可以用 ls -l 来查看. 如果本来在该位上有x, 则这些特殊标志显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T)

如:

rwsrw-r-- 表示有setuid标志 (rwxrw-r--:rwsrw-r--)

rwxrwsrw- 表示有setgid标志 (rwxrwxrw-:rwxrwsrw-)

rwxrw-rwt 表示有sticky标志 (rwxrw-rwx:rwxrw-rwt)

理解文件权限

所谓的文件权限,是指对文件的访问权限,包括对文件的读、写、删除、执行。Linux 是一个多用户操作系统,它允许多个用户同时登录和工作。因此 Linux 将一个文件或目录与一个用户和组联系起来。请看下面的例子:

drwxr-xr-x 5 root root 1024 Sep 13 03:27 Desktop

与文件权限相关联的是第一、第三、第四个域。第三个域是文件的所有者,第四个域是文件的所属组,而第一个域则限制了文件的访问权限。在这个例子中,文件的所有者是 root,所属的组是 root,文件的访问权限是 drwxr-xr-x。对于文件和目录讲,每个文件和目录都有一组权限标志和它们结合在一起,在上例中就是第一个域中的内容。下面来仔细分析这个域中各个符号的意义:

该域由 10 个字符组成,可以把它们分为四组,具体含义分别是:

d rwx r-x r-x

文件类型 所有者权限标志 组权限标志 其他用户权限标志

其中:

文件类型:第一个字符。由于 Linux 系统对与设备、目录、文件都当作是文件来处理,因此该字符表明此文件的类型,字符与对应的意义如下表:文件标志文件类型例子

-普通文件数据文件、ASCII纯文本文件、程序

d目录/bin

b块设备/dev/hda(第一个 IDE 硬盘)

c字符设备/dev/ttyS1(与 DOS 种的串口 2 等同)

s套接字/dev/log

p命名管道/dev/initctl(与“|”等同)

l符号链接/dev/modem->/dev/ttyS1

权限标志:

对每个文件或目录都有 4 类不同的用户。每类用户各有一组读、写和执行(搜索)文件的访问权限,这 4 类用户是:

root:系统特权用户类,既 UID = 0 的用户。

owner:拥有文件的用户。

group:共享文件的组访问权限的用户类的用户组名称。

world:不属于上面 3 类的所有其他用户。

作为 root,他们自动拥有了所有文件和目录的全面的读、写和搜索的权限,所以没有必要明确指定他们的权限。其他三类用户则可以在耽搁文件或者目录的基础上别授权或撤消权限。因此对另外三类用户,一共 9 个权限位与之对应,分为 3 组,每组 3 个,分别用 r、w、x 来表示,分别对应 owner、group、world。

权限位对于文件和目录的含义有些许不同。每组 3 个字符对应的含义从左至右的顺序,对于文件来说是:读文件的内容(r)、写数据到文件(w)、做为命令执行该文件(x)。对于目录来说是:读包含在目录中的文件名称(r)、写信息到目录中去(增加和删除索引点的连接)、搜索目录(能用该目录名称作为路径名去访问它所包含的文件或子目录)。具体来说就是:

1. 有只读权限的用户不能用 cd 进入该目录;还必须有执行权限才能进入。

2. 有执行权限的用户只有在知道文件名并拥有该文件的读权限的情况下才可以访问目录下的文件。

3. 必须有读和执行权限才可以使用 ls 列出目录清单,或使用 cd 进入目录。

4. 如用户有目录的写权限,则可以创建、删除或修改目录下的任何文件或子目录,既是该文件或子目录属于其他用户。

修改文件权限

首先讲修改文件的所有权,使用 chown 和 chgrp 命令:

chown new_user file or directory:修改文件或目录的所有者。

chgrp new_group file or directory:修改文件或目录的所属组。

这里需要注意的是:普通用户不能将文件或目录的所有权交与他人,只有 root 有这一权限。但是普通用户有权改变文件或目录的所属组。

由于每类用户的权限都是由 rwx 三位组成,因此可以用三个八进制数字表示文件的访问权。一个八进制数字可以用三个二进制数字表示,那么与其对应,权值为 4 的位对应 r,权值为 2 的位对应 w,权值为 1 的位对应 x。对于一类用户,将这三位与其对应的权值相乘求和,就可以得出对该类用户的访问权限。

改变文件访问权限的命令是 chmod,格式是:

chmod permission file_name

比如 chmod 764 a.txt,它表示对于文件的所有者,具有对该文件读、写、执行的权限。对于文件所属组的用户,拥有读、写的权限。对于其他用户,只有读权限。

这里需要注意的是:文件的创建者是唯一可以修改该文件访问权限的普通用户,另外一个可以修改文件访问权限的用户是 root。

还有一种表示方法,就是用字符串来设定文件访问权限。其中读用 r 表示,写用 w 表示,执行用 x 表示;所有者用 u 表示,组用户用 g 表示,其他用户用 o 表示,所有用户用 a 表示。那么上面例子就写成西面的模样:

chmod a+r,u+w,u+x,g+w a.txt

理解 SUID 和 SGID

在上面的章节中,我们知道了文件的权限可以用三个八进制数字表示。其实文件的权限应该用四个八进制来表示,不过用 ls -l 命令时,只显示三个罢了。那个没有显示的八进制数字其实是第一个,它用来设定一些特殊权限。这个八进制数字的三个位是:

SUID SGID sticky-bit

它们的含义是:SUID当设置了SUID位的文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都有文件所有者的特权。如果所有者是root的话,那么执行人就有超级用户的特权了。这时该位将变成一个安全漏洞,因此不要轻易设置该位。

SGID与上面的内容类似。文件运行时,运行者将具有所属组的特权。

sticky-bitsticky 位要求操作系统既是在可执行程序退出后,仍要在内存中保留该程序的映象。这样做是为了节省大型程序的启动时间。但是会占用系统资源。因此设置该位,不如把程序写好。

论坛精华帖

linux下测试权限,linux 文件权限相关推荐

  1. (转)Linux 下 查看以及修改文件权限

    场景:Linux环境下远程部署项目,发现因为文件权限问题,不能执行远端的可执行文件.问题还没解决,待议... 1 查看权限 在终端输入: ls -l xxx.xxx (xxx.xxx是文件名) 那么就 ...

  2. linux下的文件属性和文件权限

    linux系统下,一切都是文件,不管是硬件设备接口还是磁盘,都是有一个个的文件组成,称为包.在此,linux下磁盘分区是很重要的,可以看我之前写的关于linux分区.现在我们来看看文件的权限和属性,在 ...

  3. linux下用chmod修改文件权限详解(文件权限与特殊权限)

    chmod 是一条在Unix系统中用于控制用户对文件的权限的命令(change mode单词前缀的组合)和函数.只有文件所有者和超级用户可以修改文件或目录的权限.可以使用绝对模式,符号模式指定文件的权 ...

  4. linux特殊权限是e,linux下用chmod修改文件权限详解(文件权限与特殊权限)

    chmod是一条在Unix系统中用于控制用户对文件的权限的命令(changemode单词前缀的组合)和函数.只有文件所有者和超级用户可以修改文件或目录的权限.可以使用绝对模式,符号模式指定文件的权限. ...

  5. linux下C语言修改文件权限

    头文件 <sys/stat.h> 函数 chmod(char* path , mode_t mode) //文件目录和权限 fchmod(int fd , mode_t mode)//文件 ...

  6. linux下递归修改目录/文件权限命令

    1.切换到该目录下: 1 cd /yourplace 2.递归修改当前目录下所有文件夹的权限755: 1 find -type d -exec chmod 755 {} \; /一般用这条就可以了 2 ...

  7. 【已阅】Linux下的用户分类与su/sudo 命令,Linux下的文件类型/用户文件权限身份/文件权限属性/权限与文件权限/ls-l文件属性详解

    Tips 下载就是把我们的文件拷贝到系统的某个特定路径之下,普通用户是不允许你往系统里面去拷的. Linux下的用户分类 root用户,管理员级别的用户身份,他的话基本上不受权限的约束. 普通用户,普 ...

  8. linux idea 权限,Linux下idea由于缺少相关权限导致的tomcat ERROR

    昨天一天都在倒腾两个系统,也是醉了. 不过还好,系统修好了,在ubuntu下重新安装idea后,出现了这个错误: Intellij Idea Tmocat Error running Tomcat: ...

  9. Linux 常用C函数说明-文件权限控制篇

    chdir(改变当前的工作(目录) 相关函数  getcwd,chroot 表头文件  #include<unistd.h> 定义函数  int chdir(const char * pa ...

  10. Linux 之用户管理与文件权限

    Linux 之用户管理与文件权限 一. 1.查看系统版本    uname       uname -a      uname -r      uname -m 2.特点 :              ...

最新文章

  1. Caused by: org.apache.flink.core.fs.UnsupportedFileSystemSchemeException: Could not find a file syst
  2. php如何获取常量的值,php – 如何获取常量的名称?
  3. PhpStorm 注册相关
  4. Android---Activity 生命周期(三)Stopping Activity Restarting Activity
  5. access 增加字段 工具_Java效率工具之Lombok
  6. 教育部:到2020年全面普及实名制网络学习空间
  7. 浅谈长尾理论--《Makers》读后感
  8. 能识别nvme的pe启动_【腾讯WeTest干货分享】机器学习在启动耗时测试中的应用及模型调优...
  9. 最新声鉴卡H5网页源码_完整可运转,引流专用神器
  10. face++旷世科技实习生面试
  11. 架构师速成4.4-我该学什么语言
  12. 推荐一个好看的极简主义博客网站程序-liveblog
  13. Word文档导出(使用固定模板)
  14. spm + host
  15. JAVA基础 之 String
  16. 关于localhost404打不开
  17. 转自51cto(http://smailes.blog.51cto.com/rss.php?uid=28248)
  18. q群机器人php,QQ机器人接口(加群可见)
  19. robomaster视觉规则细谈
  20. 牛客练习赛31 C 无畏死灵术士莉莲娜与锁链面纱(dfs + 期望dp)

热门文章

  1. 【带权并查集 —— 是否说谎】Parity game【POJ 1733】
  2. html 下划线_web前端实战入门训练之HTML基本元素
  3. java controller的生命周期_一张图搞懂Spring bean的完整生命周期
  4. Centos7 安装MySQL5
  5. eclipse重定向输入输出到文件
  6. undo log、rollback segment
  7. php的substr函数的作用是,PHP substr函数的实现功能技巧讲解
  8. 并发编程学习之JDK1.8的ConcurrentHashMap
  9. 二叉树(Binary Tree)
  10. Testing Flutter apps翻译-使用 Mockito 模拟依赖项