目录

查看权限

查看文件权限

查看目录权限

对象赋权

普通赋权法

8进制赋权法

粘滞位

sgid位

suid位

改变所属

调整属性

限制文件修改


谈权限的时候,我们其实是在谈一个文件或者一个目录属于谁,能被哪些人进行什么样的操作。把握住这个理解,可以快速理解权限的概念。

查看权限

查看文件权限

ls -l test.txt
ll test.txt

查看目录权限

ls -ld testdir/

我们可以通过下图来理解这些字段的含义。

对象赋权

我们新建一个属于class1组的用户tom(关于用户和组的创建,可以参考上一篇文)

groupadd class1 -g 2000
useradd tom -g class1 -u 600

默认情况下,它是对/tmp/test.txt文件有读权限的。

ls -l test.txt

我们希望将其读权限撤销掉,可以使用chmod命令。

普通赋权法

chmod o-r /tmp/text.txt

chmod的语法是chmod+对象+ 算数运算符 +权限+ 文件

我们如果希望它的权限变成所有者对其有读、写、执行权限,所在组对其有读、写权限,其他人对其有读权限,即其权限为:rwxrw-r--,我们除了使用chmod方法外,还有另外一种方法,即8进制赋权法。

8进制赋权法

chmod 764 test.txt

我们发现实现了我们的需求,并且颜色也发生了改变,这是因为我们赋予其可执行权限的原因。那么刚刚我们写的764是什么意思呢?我们通过下面的表格来理解。

r

w

x

0

0

0

0

---

0

0

1

1

--x

0

1

0

2

-w-

0

1

1

3

-wx

1

0

0

4

r--

1

0

1

5

r-x

1

1

0

6

rw-

1

1

1

7

rwx

rwx就是2的2次方+2的1次方+2的0次方=4+2+1=7.

通过这样的三个值就可以组合成我们需要的权限了。

粘滞位

我们在root用户登录的情况下创建两个普通用户,分别是tom和jerry,它们都处于class1组下,再在/tmp目录下创建一个test目录,给它赋777的权限值,(777代表什么还记得不?)tom用户在test目录下创建一个文件tom.txt。

useradd jerry -g class1 -u 601
useradd tom -g class1 -u 600
id jerry
id tom

mkdir test
chmod 777 test

su tom
cd test
touch tom.txt
ll

我们可以看到tom.txt文件的权限,即tom自己对其有读写权限,同组用户即jerry对其有读权限,其他人也有读权限,注意jerry对其是没有写权限的。

那么这个tom.txt文件jerry能不能删除呢?

它其实不取决于文件本身的权限,而取决于用户对于当前文件的父目录有没有删除的权限。刚刚我们特意指出的jerry对其没有写权限这句话实际上是用来误导大家的。

对于test目录,我们赋予它的权限是777,w是置位的,对目录而言,它表示所有人都可以对其中的文件进行增删。

touch jerry.txt
rm -rf tom.txt

可以看到jerry可以在tmp目录中创建jerry.txt,并且可以删除tom创建的tom.txt文件。

那么有没有例外呢?或者说,我们有没有什么办法防止其他人删除共享目录下我们创建的文件呢?

我们可以使用粘滞位。

粘滞位针对目录进行赋权,目录中的文件只有创建者能够删除,其他人不能删除。

设置粘滞位需要在root权限下进行,具体语法是:

chmod o+t

它表示对所有人操作test目录都赋予粘滞位。

注意看上图,test的权限发生了变化,rwxrwxrwx的权限变成了rwxrwxrwt。t就是粘滞位。

切换回tom用户验证一下。尝试删除jerry创建的jerry.txt。

rm -rf jerry.txt

发现它对jerry创建的jerry.txt无法删除了,这说明之前我们看到的t位生效了。但是自己还是可以删除自己创建的文件。

touch tom.txt
rm -rf tom.txt

这是我们自己手动为/tmp/test/目录创建的粘滞位,实际上系统中一些目录默认就是开启粘滞位的。比如/tmp。tmp是临时文件存放区,为了防止其他用户随意删除别的用户特别是程序用户的临时文件,所以默认设置了粘滞位,防止普通用户删除程序用户创建的文件。

sgid位

针对目录权限。在该目录中建立的文件及目录的所属组权限继承其父目录所属组权限。

我们修改test目录的权限

chmod g+s tmp/test
ls -ld /tmp/test

注意看上图,test的权限发生了变化,rwxrwxrwx的权限变成了rwxrwsrwt。s就是sgid位。

可以看到第二项,即文件所属组变成了root。即其继承了其父目录/tmp/test的所属组权限。

suid位

针对可执行文件。谁运行该文件,就会具有该文件所属者的权限。它的目的是对于一些普通用户而言,有时候需要使用到高级权限来运行某个软件,为了解决这个问题,出现了suid位。但是这个功能比较危险,我们需要谨慎使用。

我们给一个场景来帮助理解它的危险之处:

tom用户希望使用jerry的身份登录系统,不巧的是jerry用户设置了口令,tom用户需要修改/etc/passwd和/etc/shadow文件,它们分别是用户信息和口令信息,一个比一个敏感,作为普通用户的tom,当然不能如愿以偿。

ls -l /etc/passwd
ls -l /etc/shadow

通过分析我们知道tom用户只能查看/etc/passwd文件,并且不能修改它。对于/etc/shadow文件,它连查看都不能。这个文件只有root用户可以查看。需要做解释的是虽然在上图中,我们发现shadow文件的权限一排横杠,但是作为超级管理员的root用户,是不会在乎这些东西的,它对所有东西都有权限!

我们说这些有什么用呢?我们的tom用户不甘心啊,它想到了suig位,我们一开始就提到suig置位的文件,只要执行它,就会具有它的所有者的权限。我们看文件,改文件,不都是使用了vim软件吗?

我们将vim软件的权限进行修改,让其用户位的suig位置位。

which vim
ll /usr/bin/vim
chmod u+s /usr/bin/vim
ll /usr/bin/vim

我们发现其权限发生了变化,在所属者的权限变成了rws。我们之前了解到s位出现在目录的权限中,是用来继承其父目录的所属组权限的,而在文件权限中,它表示了suig位,即谁运行该文件,就会具有该文件所属者的权限。

这时候,tom用户能不能打开呢?

是可以打开的。

tom在shadow中发现了jerry的口令,但是因为sha散列了,他并不能看懂这个口令,但是tom已经有了vim的权限,他可以将口令删除。

这样tom实现了他的目的,他可以在不知道jerry口令的情况下,使用jerry的身份来登录系统了。这实在是太危险了!

那么怎么撤销呢?

chmod u-s /usr/bin/vim

同理,刚刚我们给test目录赋了粘滞位和sgid位,也可以这样撤销

chmod o-t,g-s test

我们的系统中实际上有一些命令字默认就是带有suid位的,我们需要重点关注一下它们,那么怎么才能知道哪些带suid位呢?

我们可以使用echo $PATH来知道命令字放在哪里。简单理解就是我们在屏幕上输入的不完整的命令字用tab键补全的时候,系统从这些目录中进行检索命令字。

我们以/root/bin目录为例。

find /usr/bin -perm 4755

这个755我们可以理解,它代表了rwx r-x r-x的权限,那么前面的4呢?它代表的是suid位,同理,如果是2,代表sgid,如果是1,代表粘滞位。

这说明以上这些命令字都是带有suid位的。

改变所属

改变文件的所属者为tom,所属组为class1组。可以使用chown和chgrp命令。

chown tom test.txt
chgrp class1 test.txt

可以发现,此时tom已经拥有了文件test.txt的可读可写权限。

调整属性

限制文件修改

一个用户要建立,它必然会按照顺序修改或者创建以下几个文件。

/etc/group  注册组信息,如果不指定,则创建同名组

/etc/passwd  注册用户信息

/etc/shadow 注册口令信息

/home/xxx 创建家目录

如果我们希望不再有新的用户被创建,我们可以阻止它的创建过程。比如使passwd和shadow文件不再被修改,它就不能够注册用户信息和口令信息。

这就是对于文件属性的修改,它并不属于权限的范畴,我们再回到本文一开始所说:谈权限的时候,我们其实是在谈一个文件或者一个目录属于谁,能被哪些人进行什么样的操作。把握住这个理解,可以快速理解权限的概念。

具体的方法是:

chattr +i /etc/passwd /etc/shadow

通过上图我们发现,我们已经无法再创建新的用户了。

解除方法也很简单。

chattr -i /etc/passwd /etc/shadow

关于本文所用到的工具,欢迎关注我的公众号:旁骛OtherThing,回复工具获取。

web安全day27:linux下调整文件及目录权限相关推荐

  1. linux下查看文件及目录个数

    linux下查看文件及目录个数 1.查看当前文件和目录总数(不包括子目录): ls -l | wc -l 2.查看当前目录下文件个数(不包括子目录): ls -l |grep "^-&quo ...

  2. linux下判断文件和目录是否存在[总结]

    原文地址为: linux下判断文件和目录是否存在[总结] 1.前言 工作中涉及到文件系统,有时候需要判断文件和目录是否存在.我结合APUE第四章文件和目录,总结一下如何正确判断文件和目录是否存在,方便 ...

  3. 【Linux命令】文件和目录权限

    [Linux命令]文件和目录权限 权限查看 众所周知,可以使用 ls -l 来查看文件和目录的详细信息,那么输出的东西是什么呢? 我们先来看 文件类型: -:普通文件: d:目录文件: b:块特殊文件 ...

  4. Git 提交失败提示无写入权限与 Linux 下创建文件的默认权限

    2019独角兽企业重金招聘Python工程师标准>>> 最近给公司部署了 git 服务器(CentOS 6.3),由于之前没有配置 git server 的经验,搞了半天才把配置搞定 ...

  5. linux下普通文件和目录文件区别

    http://my.oschina.net/michaelyuanyuan/blog/109147 文件权限一般可认为是0 123 456 789,一共十位:  0:表示该文件的文件类型.Window ...

  6. linux 给目录权限命令,Linux命令之文件及目录权限

    1 chmod:修改文件及目录权限 选项:--reference=file    根据参考文件设置权限 -R                  递归设置权限 chmod命令参数中,u代表所有者,g代表 ...

  7. java linux创建文件夹_java web工程在linux下创建文件夹和文件

    具体的创建方法参照下面的实例: public class FileTest { public static void main(String[] args) { // 根据系统的实际情况选择目录分隔符 ...

  8. linux下的文件及目录介绍

    /dev,设备: /proc - proc文件系统所需目录: /etc,系统配置文件: /sbin,重要的系统程序: /bin,基本应用程序: /lib,共享函数库: /mnt,装载其他 磁盘节点: ...

  9. linux下给文件赋予所有权限

    先进入要赋权的文件路径下 cd /weblogic/efmpfs/efmpbase/war/ 回车后执行 chmod -R 777 apache-tomcat-8.5.69 赋予改文件及子文件所有权限 ...

  10. 修改linux ftp共享目录权限,linux系统下修改文件夹目录权限

    文件夹权限问题 Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何修改Linux文件-文件夹权限.以主 ...

最新文章

  1. 成功解决UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 28: illegal multibyte sequenc
  2. 计算机软件侵权责任,对计算机软件侵权行为认定标准
  3. *p++和*(p++)的区别_同是华为顶级旗舰,P系和Mate系谁最值得购买?明白这点很重要!...
  4. springboot2整合mysql5_SpringBoot2整合SSM框架详解
  5. java 设置文本颜色_设置文本中的字体的颜色
  6. Beautiful选择器/遍历文档树Day3-7
  7. leetcode [209]长度最小的子数组/Minimum Size Subarray Sum 【暴力解法】【滑动窗口解法】
  8. RXJAVA之Subject
  9. arch Linux安装到U盘,如何把ArchLinux安装到U盘上
  10. UbuntuSkills
  11. winrar软件如何测试
  12. 怎样运行python_怎样运行python
  13. python 常用快捷键
  14. emoji字符串 php,使用emoji字符组成任意汉字
  15. java csvwriter 追加_CSV文件每行的末尾追加写数据
  16. 锁定计算机耗电吗,我想知道电脑在待机情况下费电吗?
  17. 愿所有程序都有接口,愿所有接口说明都通俗易懂,更新及时
  18. XSL语言(XSL Languages)(1)XSL Languages
  19. MLAT-Autoencoders for Conditional Risk Factors and Asset Pricing---上篇
  20. Java 丢手绢游戏 求和_大班游戏活动_丢手绢

热门文章

  1. 百面机器学习—模型复杂度与模型的方差、偏差的关系
  2. 深度学习14-实战三-Google涂鸦识别挑战项目(上)
  3. 各种VS Code的学习秘诀,全是这六条法则撑起的!
  4. 从你王者荣耀爱玩的英雄类型,我就知道你关注哪些技术领域!
  5. 《linux核心应用命令速查》连载八:kill:杀掉进程
  6. 演说之禅:演说中的 1-7-7法则
  7. 线程与进程的区别及其通信方式
  8. Python必知必会:Classethod与Staticmethod方法
  9. 刺客信条奥德赛缺少dll文件_《刺客信条 奥德赛》免费归来,单人冒险暗杀游戏,搞一搞喽...
  10. 蓝桥杯2015年第六届C/C++B组第六题-加法变乘法