为什么80%的码农都做不了架构师?>>>   

特殊权限之 set uid

权限说明:set uid权限针对二进制可执行文件,使文件在执行阶段具有文件所有者的权限。比如passwd这个命令就具有该权限。当普通用户执行passwd命令时,可以临时获得root权限,从而可以更改密码。
作用 :set uid的作用是保证普通用户临时拥有该命令所有者的身份。给一个文件设置成set uid,前提这个文件是一个二进制,可执行的文件。
**用法:**把一个二进制可执行文件的,所有者的权限上 +s 就添加上了set uid权限。
例如把ls命令设置成set uid 。 #chmod u+s /usr/bin/ls

  • 在更改root密码的时候用到 passwd命令,检查可执行命令passwd的路径。
    如图可看出,权限所有者的权限是 rws,而不是 rwx
    说明: 这里的s 表示:当其他用户执行该命令的时候,赋予该用户临时root权限,也就是set uid

  • 在Linux下,更改密码也就意味着要更改一个密码的文件,路径为:/etc/shadow
    如图可以看出,这个文件的权限为000。普通用户是访问不了的。

如何让普通用户能够更改自己的密码同时又没有写的权限呢。
答:使用普通用户 su 连接到root用户, 在root用户下把ls设置成set uid权限。
具体步骤如下

  • 首先切换到一个普通用户下。

#su 用户名 //切换到user1用户下。
#whoami //查看当前用户

  • 当我们在普通用户的状态下,查看root的时候权限是不够的,需要在root用户下把ls权限设置成set uid。
#chmod u+s /usr/bin/ls //在ls上添加set uid权限

注: #chmod u-s /usr/bin/ls //去除set uid权限
  • 把ls添加set uid权限后,在普通用户下就能查看root了。自然普通用户也就能修改密码而同时又没有写的权限了。

特殊权限之 set gid

set gid不仅能作用在文件上,还能作用在目录上。
权限说明: set gid权限可以作用在文件上(二进制可执行文件),也可以作用在目录上。当作用在文件上时,其功能和set,uid一样,它会使文件在执行阶段具有文件所属组的权限。目录被设置这个权限后,任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。
作用:
当作用在 文件 上的时候 ,其作用和set uid是类似的,它可以让执行这个文件的普通用户临时拥有所属组的身份。
当作用在 目录 上的时候,创建子目录或子文件的所属组和该目录的所属组是保持一致的。
用法: 把一个二进制可执行文件的,所属组的权限上 +s 就添加上了set gid权限。

  • 当作用在 文件*上的时候 ,其作用和set uid是类似的,它可以让执行这个文件的普通用户临时拥有所属组的身份。

  • 例如把ls命令设置成set gid 。 #chmod g+s /usr/bin/ls
    如图可见 ,所属组中的x变成了s

    切换到普通用户下,一样可以进入到/root的子目录下

  • 当作用在目录上的时候,创建子目录或子文件的所属组和该目录的所属组是保持一致的。

例如: 我们把123目录添加set gid权限,然后更改所属组为user1,然后在123目录下创建一个文件dl,其dl的所属组为user1。 如果没有添加set gid权限的话,dl的所属组应该是root。

特殊权限之 sticky bit

权限说明: 可以理解为防删除位。文件是否可以被某用户删除,主要取决于该文件所在的目录是否对该用户具有写权限。如果没有写权限,则这个目录下的所有文件都不能删除,同时也不能添加新的文件。如果希望用户能够添加文件但不能删除该目录下其他用户的文件,则可以对父目录增加该权限。设置该权限后,就算用户对目录具有写权限,也不能删除其他用户的文件。
**作用: ** 防止别人删除自己的文件,root用户除外。

在这里我看到,/tmp的其他用户的权限是rwt,而不是传统的rwx。这个叫做防删除位。

例如: 在user1用户下的 /tmp目录下 创建一个dl文件(dl的权限是默认的644)时,在dl里面编辑一些内容。然后切换到user2用户下,在user2用户下只能查看dl文件,而不能更改(除user1用户和root用户拥有修改的权限,其他用户都不能修改)。

特殊权限总结

一个目录下的文件能不能删除,不取决于这个目录下的文件的权限,而是取决于这个文件所在目录的权限,是否可写。 所以当一个目录的others权限是可读可写时(目录默认权限有可执行,因为打开目录,就相当于执行了该目录),其他人就可以删除这个目录下的任何文件,包括root文件。

软链接

在学软链接和硬链接之前,先要知道什么是链接文件,那么什么是链接文件呢。

  • 用命令ls -l查看的第一个属性为 l 的文件就是链接文件,它类似于windows下的快捷方式。这种文件在Linux中是很常见的。如下图
    图片说明: :可以看到这一行的第一个字母是 l ,这个 l 就代表它是一个链接文件 。/bin 相当于Windows下的快捷方式,而usr/bin才是它真正的目录。

  • 当我们使用命令 #ls -l /lib64 的时候,可以看到一些粉绿色的,第一个属性为 l 文件都是一些软链接文件。

软链接: 也称为符号链接,即“symbolic links/soft links”,是一个通过名称指向另一个不同文件的特殊的文件类型,是一个单独的文件,有着不同于原文件(目标文件)的属性,相当于Windows系统中的快捷方式。当对软链接进行大多数操作(包括打开、读取、写入等等)时,系统内核会自动在软链接的目标文件上执行;但某些操作,例如删除,会直接对链接文件本身操作。

软链接特性:

  1. 软链接和目标文件不是同一个文件,节点号不同。
  2. 目标文件的删除操作会影响软链接文件。当链接文件被删除时,不会对目标文件产生影响;当删除目标文件/目录时,由于失去了目标指向,软链接会失效,变成死链。
  3. 能跨分区创建软链接。(使用命令 #hf -h 查看分区的大小是使用情况的时候,挂载点那一行就是分区。)
  1. 命令语法: ln[-s][来源文件][目的文件]
  2. 命令描述: 建立软链接
  3. 命令参数: -s 建立软链接时,必须要加上 -s 选项,如果不加 -s 选项就是建立硬链接。

软链接实战

  • 有时候我们想查找一个日志,但这个日志必须通过 /root/222/yum.log 目录查找,而 /root/222/yum.log 的实际文件在 /tmp/yum.log 中。当然我们可以把 /tmp/yum.log 拷贝到 /root/222/yum.log 下 ,这样会很消耗你的内存空间。
    这时候我们可以建立一个软链接,这样的话,当我们通过 /root/222/yum.log 目录查找该文件时,就能访问到/ tmp/yum.log 文件了,很方便,而且不会耗费太大的空间。 **那么如何建立软链接呢,如下: **
    如图 可以看出在222的目录下的yum.log指向到了/tmp/yum.log,这就证明了建立软链接成功。

  • 用 #hf -h 查看分区的大小和使用情况,可以看出/root用户下的空间大小所剩不多,而 /目录的空间很大。

    比如/root下有一个 /root/dl.log 日志文件,当dl.log日志文件不停的写入日志时,所占空间是比较大的,这时候我们可以把dl.log软链接到/目录 具体操作如下。

#cp /boot/dl.log /dl.log
#rm -rf /boot/dl.log
#ln -s /dl.log /boot/dl.log

上述命令说明:
1.把 /boot 下的 dl.log 日志拷贝到/目录下。
2.删除 /boot 下的 dl.log 日志。
3.把 / 目录下的 /dl.log 软链接到 /boot/dl.log 这样的话,dl.log在日志的时候,依然写到了/boot/dl.log下。

软链接总结

  1. 当我们建立软链接的时候,目的文件不可以存在,否则建立不成功。
  2. 所有软链接本身就只能是一个文件!这个文件可以指向目录也可以指向文件。
  3. 当我们建立软链接的时候,一般情况下都是绝对路径。如果建立一个相对路径的软链接,会有弊端!当我们把所有的文件拷贝到另一台机器上,会发现源文件不存在。

硬链接

硬链接: 也即“hard link”,其本质为现有文件的另一个名字,因此硬链接和原文件是无法区分的。从技术上讲,它们共享相同的inode,而inode几乎包含文件的所有信息,包括指向数据块的直接/间接指针。

特性:

  1. 创建一个文件,这个文件和另外一个文件的inode号一样,那么这两个文件相互为硬链接文件。
  2. 只能对文件做硬链接,不能对目录做硬链接。
  3. 不能跨系统分区创建硬链接。
  4. 只能对已存在的文件进行创建。
  5. 删除一个硬链接文件并不影响其他有相同inode号的文件。
  • 如图可以看出 ,分别为1.txt创建一个软链接和一个硬链接。
    区别:
  1. 硬链接的inode和源文件的inode是一致的。
  2. 硬链接的内存大小和源文件的内存大小是一致的。
  3. 硬链接和源文件的时间也是相同的。

硬链接总结

硬链接和源文件相当于一皮囊,因为当我们存储数据的时候,会根据文件的inode存储到一个块区域,并不是存储到硬链接或源文件上。 所以 无论在硬链接或源文件中存储数据(在inode相同的情况下),都不影响存储的数据。无论删除其中的那一个(inode相同的硬链接或源文件)也不会影响文件的数据。

硬链接与软链接区别:

硬链接:

  • 当系统要读取一个文件时,就会先去读 inode table, 一个文件对应一个 inode, 然后再根据 inode 中的信息到块区域去将数据取出来。硬链接是直接使用了和源文件相同的 inode, 硬链接文件直接链接到文件放置的块区域。 也就是说,进行硬链接时实际上该文件内容没有任何变化, 只是制定了相同的 inode。
  • 创建硬链接会增加额外的记录项以引用文件,对应于同一文件系统上一个物理文件每个文件引用相同的 inode 号 创建时链接数递增
  • 删除文件时:rm 命令递减计数的链接,文件要存在,至少有一个链接数当链接数为零时,该文件被删除
  • 不能跨越驱动器或分区
    语法 : ln filename [linkname ]

软链接:

  • 软链接是建立一个独立的文件, 而这个文件的作用是当读取这个链接文件时,他会把读取的行为转发到该文件所 链接 的文件上。
  • 一个符号链接指向另一个文件。
  • 可以对目录或文件进行软链接。
  • 可以跨分区
  • 指向的是另一个文件的路径;其大小为指向的路径字符串的长度。
  • 不增加或减少目标文件inode 的引用计数。
    语法: ln -s filename [linkname]

转载于:https://my.oschina.net/991124/blog/1556402

特殊权限之set uid,set gid,sticky bit以及软链接和硬链接相关推荐

  1. 第九课 特殊权限set_uid、stick_bit,软链接,硬链接

    一.特殊权限set_uid 1. ls -l /usr/bin/passwd 看见这个文件有一个s(s=set_uid)权限.它可以让普通用户临时拥有该命令所有者的身份.前提文件是可执行的二进制文件. ...

  2. set uid,set gid,sticky bit的三个权限的详细说明

    一个文件都有一个所有者, 表示该文件是谁创建的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 一般为文件所有者所属的组. 如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的 ...

  3. 修改Linux用户的UID、GID

    对于NFS共享文件,保留文件权限,需要UID.GID与nfs-server端一致! 试验环境:Centos6.5_64/172.24.0.26 01.用户的UID和GID不能被占用 [root@26 ...

  4. linux 命令修改uid,修改Linux用户的UID、GID

    修改Linux用户的UID.GID 对于NFS共享文件,保留文件权限,需要UID.GID与nfs-server端一致! 试验环境:Centos6.5_64/172.24.0.26 01.用户的UID和 ...

  5. 修改linux进程gid,修改Linux用户的UID、GID

    对于NFS共享文件,保留文件权限,需要UID.GID与nfs-server端一致! 试验环境:Centos6.5_64/172.24.0.26 01.用户的UID和GID不能被占用 [root@26 ...

  6. 文件特殊权限suid、sgid、stick_bit、硬链接、软链接

    2019独角兽企业重金招聘Python工程师标准>>> 第二章 文件.目录管理 2.18 特殊权限之 suid SUID的作用就是:让本来没有相应权限的用户运行这个程序时,可以访问没 ...

  7. linux设置共享权限设置命令,Linux系列知识详解(三)--------- Linux链接命令和权限管理命令...

    Linux系列知识详解(三)--------- Linux链接命令和权限管理命令 一:链接命令ln 简介:什么是链接命令?链接命令分为软链接和硬链接.其中软链接产生的新文件是以路径的形式表示原文件,类 ...

  8. UID、GID和权限

    在UNIX系统中,用户有权限.进程有权限.文件有权限,有点混乱,有必要做一个总结. 1.用户权限 2.文件访问权限 <UNIX环境高级编程>p13中提到,对于磁盘上的每个文件,文件系统都存 ...

  9. Liunx UID and GID

    一个文件都有一个所有者, 表示该文件是谁创建的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 一般为文件所有者所属的组. 如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的 ...

最新文章

  1. 使php支持mbstring库以及使用
  2. p1044与p1898
  3. centos6 postgresql安装
  4. python 数组打包_Python:打包多字节数组
  5. python与财务数据挖掘_Python数据挖掘实战2:财政收入影响因素及预测
  6. 【JAVA笔记】线程(1):多线程的介绍和实现
  7. jquery中DOM加载事件,onload事件和ready事件
  8. 5G卡位未来? 万物互联的畅想还是忧伤
  9. java函数的定义方法_java函数的定义以及使用方法介绍
  10. 播放超1200w,仅21w粉的B站UP主靠带货也能引爆B站
  11. Consider revisiting the entries above or defining a bean of type in your configuration.
  12. 使用shell脚本删除rabbitMq的exchange
  13. swing在java中什么意思_“swing”是什么意思,JAVA初学者:swing是什么
  14. GMA Round 1 大吉大利,晚上吃鸡
  15. 2017.9.26 noip模拟赛 总结
  16. 中国茶叶分类图(转载)
  17. MySQL之高性能的索引策略(索引优化)
  18. 2020年12月电子学会Python等级考试试卷(一级)考题解析
  19. Oracle 时间差计算
  20. 常见电脑硬件故障有哪些?如何解决?~~~CPU故障

热门文章

  1. (MyEclipse) MyEclipse完美破解方法(图)
  2. VM Depot 分布式计算框架主题应用精选
  3. mysql 随机数范围取值
  4. android读取SDCard任意路径下的文件
  5. Devexpress XtraGrid 控件编辑的内容,如何实时生效
  6. JQuery -- this 和 $(this) 的区别
  7. [树组BIT]训练两题重新理解ver.
  8. 前端工程化系列[06]-Yeoman脚手架核心机制
  9. NFS介绍、NFS服务端配置安装配置、 NFS配置选项、 客户端的配置
  10. Mac自定义终端的欢迎页