[s]:当一个具有执行权限的文件设置 [s](SetUID) 权限后,用户执行这个文件时将以文件所有者的身份执行。passwd 命令具有 SetUID 权限,所有者为 root(Linux 中的命令默认所有者都是 root),也就是说当普通用户使用 passwd 更改自己密码的时候,那一瞬间突然 “灵魂附体” 了,实际在以 passwd 命令所有者 root 的身份在执行,root 当然可以将密码写入 /etc/shadow 文件(root 是一个 bug 的存在,在 Linux 中就没有它不能干的事),命令执行完成后该身份也随之消失。

0. SetUID 条件:

必须具备以下几个条件(前提):

  • 只有可执行的二进制程序才可以设置 SetUID
  • 所有者必须对欲设置SetUID的文件具备 可执行 (x) 权限
  • 命令执行过程中,其它用户获取所有者的身份(灵魂附体)
  • SetUID 具有时间限制,即完成该程序执行后就消失(不能霸占住不放吧?)

1. 设置和取消 SetUID

设置 SetUID:

chmod 4xxx < file-name >chmod u+s < file-name >

取消 SetUID:

chmod xxx < file-name >chmod u-s < file-name >

案例:

SetGID

其实,SetGID 基本与 SetUID 相同,无非也就是一个设置所有者的权限,GID 为设置所属组的特殊权限!区别点在于:SetGID 也可以设置目录的相关 SetGID 权限!

0. SetGID条件:

针对文件:

  • 可执行的二进制文件
  • 命令执行者(即所属组)对该文件具备 x 权限
  • 执行时,执行者被所属组灵魂附体
  • 权限只在执行过程中有效

针对目录:

  • 普通用户对目录具备 r 和 x 权限,才可以进入到该目录
  • 普通用户在此目录中的有效组会变成此目录的所属组
  • 如普通用户对该目录具备w权限,新建文件的所属组为该目录的所属组

1. 设置和取消 SetGID

设置 SetGID

chmod 2xxx chmod g+s

取消 SetGID

chmod xxx chmod g-s

案例:
先用管理员身份在wang用户的家目录里建一个叫test1的目录
cd /home/wang
mkdir test1 之后切换wang这个用户,进入test1目录建一个叫hello.txt的文件
会发现,所有者为wang用户,但是组为root所有的组 su wang
cd /home/wang
vi hello.txt
随便输入点东西,shift+: wq保存退出,
会看见下图

[t]: 任何用户均可以往此目录写入文件,可以删除自己所创建的文件,root 自然有权限删除

0.作用:

  • 只对目录有效
  • 普通用户对该目录有 w 和 x 权限
  • 若没有粘滞位,则普通用户可以对目录下的文件/子目录进行删除操作(因为普通用户对目录具有 w 权限),包括其它用户建立的目录/文件;但若赋了 SBIT,则普通用户只能删除自己创建的文件/目录,而不能删除不属于自己的文件/目录!

案例:

使用root建立文件helloworld
mkdir helloworld
chmod 1777 helloworld

切换wang用户进入其中建文件hello.txt

切换zhang用户进入其中建文件 world.txt

zhang可以删除world.txt但是无法删除hello.txt

 

关于【s】和[t]字符的更多相关文章

  1. C语言 · 字符转对比

    问题描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字符串长度不等.比如 Beijing 和 Hebei 2:两个字符串不仅长度相 ...

  2. java字符乱码

    在java中处理字符时,经常会发生乱码,而主要出现的地方在读取文本文件时发生,或者是写入到文件中,在其他地方打开乱码. 如下例子: BufferedReader br = null; try { br ...

  3. java 字节流与字符流的区别

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...

  4. Linux字符设备驱动框架

    字符设备是Linux三大设备之一(另外两种是块设备,网络设备),字符设备就是字节流形式通讯的I/O设备,绝大部分设备都是字符设备,常见的字符设备包括鼠标.键盘.显示器.串口等等,当我们执行ls -l ...

  5. [LeetCode] Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子字符串

    Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...

  6. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

  7. 字符型图片验证码识别完整过程及Python实现

    字符型图片验证码识别完整过程及Python实现 1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...

  8. 全网络最正确的让 Linux 开机进入字符界面的方法及设置 FrameBuffer 分辨率的方法

    引言 这个标题有点长,是为了在标题中就把问题说清楚,以便搜索引擎能够把有需要的朋友准确地带到我这里来.目前在网络上,很多关于 Linux 方面的知识是过时的和错误的.我标题中指出的两个知识点就是其中的 ...

  9. EasyPR--开发详解(7)字符分割

    大家好,好久不见了. 一转眼距离上一篇博客已经是4个月前的事了.要问博主这段时间去干了什么,我只能说:我去“外面看了看”. 图1 我想去看看 在外面跟几家创业公司谈了谈,交流了一些大数据与机器视觉相关 ...

  10. C#经典笔试题-获取字符串中相同的字符以及其个数

    public Dictionary<char,int> GetStrSameAs(string str){ //将字符串转换成一个字符数组. char[] charArray=str.To ...

随机推荐

  1. C003:计算球体体积 自行输入球体半径

    程序: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { float sphereRadius; do{ pri ...

  2. [bash] 打印到屏幕相关语法

    程序: #!/bin/bash function showAlertMsg(){ echo -e "\e[1;31m"$"\e[0m" } function s ...

  3. JVM 中的对象及引用

    JVM中对象的创建过程 对象的内存分配 虚拟机遇到一条 new 指令时,首先检查是否被类加载器加载,如果没有,那必须先执行相应的类加载过程. 类加载就是把 class 加载到 JVM 的运行时数据区的 ...

  4. 读网文《将20M文件从30秒压缩到1秒,我是如何做到的?》做实验

    先在微信公众号上看到网文<将20M文件从30秒压缩到1秒,我是如何做到的?>,然后在网上搜索了一下,看到了原文:https://www.jianshu.com/p/2e46ccb125ef ...

  5. 字符串对象跟xml格式的转换

    package com.sunshen.jfids.testWebService.task; import java.io.File; import java.io.StringWriter; imp ...

  6. Linux:安装php

    一.环境准备(lamp环境:linux+apache+php+mysql) 1.安装php之前,首先要检查一下相关lib库 rpm -qa  zlib libxml libjpeg freetype ...

  7. 一文解开java中字符串编码的小秘密

    目录 简介 Unicode的发展史 Unicode详解 UTF-8 UTF-16 UTF-32 Null-terminated string 和变种UTF-8 简介 在本文中你将了解到Unicode和 ...

  8. Docker 学习笔记一

    Docker 学习笔记一 1.Docker是什么?         Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源.让开发者打包他们的应用以及依赖包到一 ...

  9. Codeforces Round #670 (Div. 2) 深夜掉分(A - C题补题)

    1406A. Subset Mex https://codeforces.com/contest/1406/problem/A Example input 4 6 0 2 1 5 0 1 3 0 1 ...

  10. ajax之---“伪”ajax

    views.py def ajax1(request): ret={'status':'true','message':'successful'} return HttpResponse(json.d ...