Linux下如何設置權限讓用戶只刪除自己的文件(粘滯位)

之前我們知道如何針對用戶和用戶組來設置文件權限。通常是用三個八進制來設置權限的,這里我要說的是,其實是由四個八進制表示的。其中第一個八進制我們通常是忽略的。第二個到第四個是對應于SUID,SGID,sticky-bit。

SUID:設置了SUID 位的文件被執行時,該文件將以所有者的身份運行,也就是說無論誰來執行這個文件,他都有文件所有者的特權。如果所有者是 root 的話,那么執行人就有超級用戶的特權了
SGID : 設置了SUID 位的文件被執行時,該文件將以具有所屬組的特權
sticky-bit: sticky 位要求操作系統既是在可執行程序退出后,仍要在內存中保留該程序的映象。這樣做是為了節省大型程序的啟動時間。但是會占用系統資源。該位可以理解為防刪除位. 設置sticky bit位后,就算用戶對目錄具有寫權限,但也只能添加文件而不能刪除文件。

SUID和SGID可以對文件的權限進行設置,比如rwx(可讀可寫可執行)

我們引入了chmod來修改文件權限,舉例如下:

linux下文件類型

當我們要修改成user為可寫,group為可寫時,命令如下:

chmod u+w,g+w myfife

那么操作這些標志的權限是什么呢。和文件權限是一樣的,都是用chmod來修改權限的。

這里寫圖片描述

chmod u+s myfife:為用戶設置s權限,具有文件所有者的權限

chmod g+s Code:為用戶組設置s權限,具有用戶組的權限,可以對該目錄下的文件執行權利,Code為目錄

chmod o+t myfife:為其他用戶設置t權限,說明其他用戶不能對其進行刪除操作

這里寫圖片描述

大家有沒有看到myfife文件中的T呢,這是因為我們給sticky位設置了權限,這個有什么作用呢?就是為了防止刪除。我們有時候會遇到A用戶對其有寫權限,寫了之后,B用戶覺得那個文件沒用,就把文件給刪了。這樣的結果可想而知……

為了避免上述的事情發生,所以就有粘滯位的引入。就是為了防止other用戶對其刪除。只有用戶自己可以對其添加、修改、刪除等操作。


使用chmod 1777 myfife 即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382749.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382749.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382749.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CentOS安裝yum 鏡像 舉例阿里云鏡像

如何安裝yum 鏡像 CentOS 1、備份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2、下載新的CentOS-Base.repo 到/etc/yum.repos.d/ CentOS 5 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.r…

python在ubuntu執行sh腳本,提示權限不夠的解決方法, 轉載

https://blog.csdn.net/weixin_40320794/article/details/81772194

Vim簡單配置

vim配置: (在Centos6.5下配置vim) 1.找到用戶的主工作目錄,ls看是否有.vimrc文件,有的話打開即可。沒有的話自己touch一個。vim進入.vimrc中: set nu 設置行數 colorscheme desert syntax enabl…

運算符面試題(劍指offer,面試寶典,牛客網)

利用一個宏實現兩個數的交換?不使用if,?,switch或者其他判斷語句比較兩個變量的大小?利用位運算實現加法?以下程序輸出結果是?用位運算實現求平均數?不用循環判斷一個數是不是2的N次方? 利用一個宏實現兩個…

js 出現 replace 無法完全替換 指定字符串的時候的解決辦法

/{/g 通過這種方式替換掉 replace( /這里填寫需要被替換的字符串/g , "");

[WPS筆試題]實現棧的push,pop,max且時間復雜度為O(1)

今天做了一下WPS的筆試題,遇到了一道關于棧的題,覺得挺有意思的,就寫篇博客分享一下吧~~ 題目要求:要求實現棧的數據結構,在該類型中實現一個能夠得到棧的最大元素的max函數,在該棧中,調用max,…

MarkDown生成目錄索引

123 在第一行開頭寫[TOC] 必須是第一行,不可以在前面加別的東西。 1 2 3

ubuntu 如何用root身份進行登錄

公司有個小項目, 需要用python調用 sh腳本來執行一些東西, 執行腳本的時候需要輸入密碼 類似 sudo S paaswd 腳本, 但是給客戶部署的話, 再讓客戶客戶 保存密碼到配置文件, 就顯得麻煩, 就想到用root方式去登陸系統, 結果用了網上的方法, 還是登陸不進去, 最后結合簡書的一個方…

[劍指Offer]替換空格

今天看題的時候,遇到一個替換空格的題目,分析一下哈。 題目要求:把字符串中的每個空格替換成“%20”。例如輸入“we are happy”,則輸出“we%20are%20happy”。 解題思路:我們首先想到的是:移位思想。遇到…

C語言關鍵字 ISO/ANSI C90 C99 C11

面試考點 https://blog.csdn.net/csdn_kou/article/details/81113215 * 有的常用的我們都不知道是關鍵字,比如sizeof.這是面試中的考點,要注意。 * 同時當回答C語言中有多少關鍵字時,要回答前題條件,時針對哪一個版本

vm15 安裝 mac虛擬機的過程 轉載的

https://blog.csdn.net/weixin_43299649/article/details/82881567

task_struct解析

task_struct是Linux內核的一種數據結構,它用task_struct結構體來描述進程的信息。下面來剖析一下進程中保存的主要的信息有哪些? struct task_struct {//進程的運行時狀態volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */void …

ubuntu上有個小項目 ,需要調用xx.sh腳本, 出現無法識別 某些環境變量的解決辦法,僅供參考

項目是用python 調用 同事寫好的 xx.sh腳本, 在手動調用的時候 發現能正常調用, 當用python代碼的時候, 就不行了, 通過日志發現, python調用的時候 不識別 ADNROID_NDK這個環境變量, 在python中 我是通過&…

關于sudo

之前,我們使用sudo的時候,是因為其用戶本身具有root權限,所以可以sudo后執行相關操作,但是對于普通用戶來說,它是既不具有sudo權限,又不在sudo用戶組中,那么我們來研究一下如何將新創建的用戶添…

在使用 python 封裝的進程池 from concurrent.futures import ProcessPoolExecutor 遇到的問題

在ubuntu中,用的是python3.5 executeprebuildpath ExecutePrebuild()processpool ProcessPoolExecutor(1)processpool.submit(executeprebuildpath.run).add_done_callback(self.precallback)processpool.shutdown(waitFalse)self.runsign Trueself.runningprebu…

對pthread_create未定義的引用

pthread庫不是Linux系統默認的庫,連接時需要使用庫libpthread.a,在編譯中要加-lpthread [koulocalhost practive]$ gcc creat.c /tmp/ccPULtaF.o:在函數‘main’中: creat.c:(.text0x58):對‘pthread_create’未定義的引用 coll…

Bash入門

Bash簡介: Bash(GNU Bourne-Again Shell)是一個為GNU計劃編寫的Unix shell,它是許多Linux平臺默認使用的shell。 shell是一個命令解釋器,是介于操作系統內核與用戶之間的一個絕緣層。準確地說,它也是能力…

ubuntu 設置分辨率 親測可用 轉載的

網上試了很多方法, 這家管用 https://blog.csdn.net/qq_35661436/article/details/72802040

線程之售票系統pthread_mutex,_lock,_unlock

先看一下這篇文章 https://blog.csdn.net/csdn_kou/article/details/81148268 四個人同時買票票,引出線程 #include "head.h" int ticket 100; void * route(void *arg) {char *id (char *)arg;while(1){if(ticket>0){usleep(1000);printf("…