1. 程式人生 > >活用三種許可權 理解Samba的許可權控制

活用三種許可權 理解Samba的許可權控制



很多人都很奇怪,為什麼我們需要學習這三種許可權?在實際工作中我們發現,這些特殊許可權讓Linux的許可權理解,尤其是samba顯得極為困難,但又的確有使用的必要。本文試圖用淺顯的講解,讓大家能充分理解這三種許可權的作用。理解了它們,就可以更方便的理解samba的許可權控制。 

首先需要提醒大家注意的是,samba的許可權由兩方面構成:一是目錄本身的許可權,二是samba的配置許可權。最終許可權定義是兩者的最小交集。

OK,我們接著來理解這三種許可權: 

  1. 一個檔案都有一個所有者,表示該檔案是誰建立的。
  2. 同時,該檔案還有一個組編號,表示該檔案所屬的組,一般為檔案所有者所屬的組。
  3. 如果是一個可執行檔案,那麼在執行時,一般該檔案只擁有呼叫該檔案的使用者具有的許可權。

許可權標誌通過三個“位”來定義,分別是:

  1. setuid:設定使檔案在執行階段具有檔案所有者的許可權。比如/usr/bin/passwd,如果一般使用者執行該檔案,則在執行過程中,該檔案可以獲得root許可權,從而可以更改使用者的密碼。 
  2. setgid:該許可權只對目錄有效。目錄被設定該位後,任何使用者在此目錄下建立的檔案都具有和該目錄所屬的組相同的組。 
  3. sticky bit:該位可以理解為防刪除位。 一個檔案是否可以被某使用者刪除,主要取決於該檔案所屬的組是否對該使用者具有寫許可權。如果沒有寫許可權,則這個目錄下的所有檔案都不能被刪除,同時也不能新增新的檔案。 如果希望使用者能夠新增檔案但同時不能刪除檔案,則可以對檔案使用sticky bit位。設定該位後,就算使用者對目錄具有寫許可權也不能刪除該檔案。 

三個許可權的特點

Sticky(範例:/tmp目錄)

①sticky只能應用在目錄上,並且是應用在其它人上。

②只有root和檔案的擁有人才能刪除該檔案。

③小寫表示能執行,大寫表示不能執行 

Suid(範例:/usr/bin/passwd目錄)

①suid只能應用在二進位制檔案中

②當一個檔案應用了suid,那麼任何人在執行該命令的時候他就臨時擁有該檔案擁有人的許可權

③suid只能應用在檔案的擁有人上

④小寫表示能執行,大寫表示不能執行 

Sgid(應用環境為用於一組開發人員共用資源,保證安全)

①sgid既可以應用在檔案上,也可以應用在目錄上

②當sgid應用在目錄上時,任何人在該目錄中建立健全的檔案和目錄的擁有者屬於目錄所屬組

③應用在擁有組上

④sgid應用在檔案上時,任何人在執行該檔案時,臨時擁有該檔案所屬組許可權

⑤小寫表示可執行,大寫反之。 

如何操作這些標誌

操作這些標誌與操作檔案許可權的命令是一樣的, 都是 chmod。有兩種方法來操作:

① chmod u+s temp -- 為temp檔案加上setuid標誌。 (setuid 只對檔案有效)

chmod g+s tempdir -- 為tempdir目錄加上setgid標誌 (setgid 對目錄和檔案有效)

chmod o+t temp   -- 為temp檔案加上sticky標誌 (sticky只對檔案有效) 

② 採用八進位制方式。對一般檔案通過三組八進位制數字來置標誌,如 666,777,644等。如果設定這些特殊標誌,則在這組數字之外外加一組八進位制數字,如4666,2777等。這一組八進位制數字三位的意義如下,

abc

a - setuid位。如果該位為1,則表示設定setuid

b - setgid位。如果該位為1,則表示設定setgid

c - sticky位。如果該位為1,則表示設定sticky

我習慣用第一種方法來做,但許多時候檔案的許可權表示都是用數字為執行;所以,建議兩種方法都要掌握熟悉。

設定完這些標誌後, 可以用 ls -l 來檢視。 如果有這些標誌,則會在原來的執行標誌位置上顯示。 如

rwsrw-r-- 表示有setuid標誌

rwxrwsrw- 表示有setgid標誌

rwxrw-rwt 表示有sticky標誌

那麼原來的執行標誌x到哪裡去了呢?系統是這樣規定的,如果本來在該位上有x,則這些特殊標誌顯示為小寫字母 (s, s, t)。否則, 顯示為大寫字母 (S, S, T) 

這三個許可權的數字位可以這麼理解,這是我的理解和記憶參考法,僅供大家參考學習

[[email protected] test]# 1 1 1
[[email protected] test]# rws rws rwt
[[email protected] test]#
[[email protected] test]# SUID SGID Sticky 

所以,可以得出

chmod 4777是設sid

chmod 2777是設定gid

chmod 1777是設sticky 

最後,介紹兩個常用操作。

常用操作

找出所有危險的目錄(設定目錄所有人可讀寫卻沒有設定sticky位的目錄)

find / -perm -0007 -type d

找出所有設定了suid的檔案

find / -perm -4000 -type f

相關推薦

許可權 理解Samba許可權控制

 很多人都很奇怪,為什麼我們需要學習這三種許可權?在實際工作中我們發現,這些特殊許可權讓Linux的許可權理解,尤其是samba顯得極為困難,但又的確有使用的必要。本文試圖用淺顯的講解,讓大家能充分理解這三種許可權的作用。理解了它們,就可以更方便的理解samba的許可權

C++: 繼承和多型(一)繼承方式與許可權

繼承 在C++中,我們常要對某個函式進行多次複用,例如: 資訊管理系統中,對於教師、學生、教務人員等"類"而言,有部分資訊是通用的:姓名,性別,年齡,聯絡方式等。如果為每一種角色都編寫一個"類",會有不少重複的程式碼,造成效率上的浪費。       &nbs

HDOJ--1869--六度分離(算法寫的,希望能比較出來他們之間的差別)

tdi pty time 著名 連接 clu 展開 mil 他在 六度分離 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm

循環實現0-100相加的linux腳本

linux腳本1、 #!/bin/bash#0~100相加,for循環 declare -i ideclare -i sum for i in {1..100};dolet sum+=ilet i++done echo $sum2、 #!/bin/bash#0~100相加,until循環 declare -i

dubbo異步調方式

需要 lib oos 通知 ext.get action con 主動 bean 異步通訊對於服務端響應時間較長的方法是必須的,能夠有效地利用客戶端的資源,在dubbo中,消費端<dubbp:method>通過 async="true"標識。 <du

[C++]方法求最大子段和

規劃 amp pan 分治 一位 max 組成 所有 ret 問題描述:給定n個整數組成的序列,求其中子段和的最大值。當所有整數均為非負整數時定義其最大子段和為0 方法一:O(n2)用一個值存儲最大和,用枚舉所有和的方法,來與這個值比較並更新最大值。 1 int

ASP.NET中 C#訪問資料庫方式顯示資料表

第一種方式:使用DataReader從資料庫中每次提取一條資料,用迴圈遍歷表                下面是我寫的一個例子:  &nbs

語言寫的人民幣小寫轉換大寫的小程式

package cn.faisco.jenkin.lowToUper; import java.awt.GridLayout; import java.awt.LinearGradientPaint; import java.awt.event.ActionListener; import java.awt

從遞迴求和的方式理解遞迴思想

#include <stdio.h> int f1(int *a, int begin, int end) //折半遞迴求和 { int mid; if(be

教你怎麼辦法找到發給你QQ的坦白說的那個人

今天先不寫關於技術的,另外關於建站的文章我這幾天會更新,畢竟還有工作要做,沒有那麼多的精力寫教程,今天要寫的是一個比較簡單的,通過抓包的方式定位到給你發坦白說的那個人。ok,廢話不多說,我們開始做。 沒做之前說一下,網上很多的辦法可以破解的,如果您不是程式設計師的話看,可以

方法遍歷陣列

//宣告一個數組 int[] num =new int[3]{4,6,2}; int a = num.Length;//得到陣列的長度 for (int i = 0; i < a; i++)

.NET的快取(頁面快取,控制元件快取,自定義快取)

BLL.Area bll = new BLL.Area(); protected void Page_Load(object sender, EventArgs e) { if (Cache["tList"] != null) { Response.Write("已經有

shiro 許可權校驗方式

此文是在已經配置好shiro的前提下。 一、程式設計方式:通過java程式碼  @RequestMapping(value="/main",method=RequestMethod.GET) public String loginForm(HttpServletResponse r

linxu基本許可權的設定和方法

linxu 分為三種許可權 1.基本許可權:r,w,x(讀寫執行) ls -ld /root/zf drwxr-xr-x. 2 root root 6 11月 15 10:09 /root/zf drwxr-xr-x. d表示目錄,第一組(rwx)所有者的許可權讀寫執行 ,第二組(r-x)讀

java中內部類的建立四情況,方式,及內部資料訪問許可權

內部類和外部類的關係,及內部靜態類的資料訪問許可權,宣告方式。 第一種,在外部類內部宣告使用內部類,內部類的型別為static和非 static型別,內部類資料型別為private,protected,public 型別的訪問許可權。外部類為非靜態宣告和許可權如下: p

特殊許可權(suid、sgid、sticky)

先看看這兩個檔案的許可權: [[email protected] ~]# ls -ld /usr/bin/passwd  /tmp drwxrwxrwt 4 root root  4096 Jun  2 17:33 /tmp -rwsr-xr-x 1 root root 22984 Jan  7 

簡單理解Shiro許可權驗證/登入

通過請求方式來判斷是初始請求還是驗證請求 一、 @RequestMapping(value ="/login", method =RequestMethod.GET)publicString sho

例子理解Java許可權修飾符(private,default,protected和public)

許可權修飾用於限定物件起作用的範圍,也就是,在什麼地方我們能夠訪問到這個物件,在什麼地方我們訪問不到這個物件了,這裡的物件是指屬性、方法、類和介面。 一、許可權修飾符作用於屬性和方法。private,

許可權詳解

之前接觸了兩種許可權,分別是public 公開的,類的內部外部均可呼叫。protected 受保護的,只允許類的內部呼叫,外部無權呼叫。有了繼承,那許可權在有繼承出現以後,又會是什麼樣?  public 公開的 1 class Lyz{ 2 //手裡有30萬塊錢, 3 publ

專案中加入activiti後,使用者許可權管理處理的方式

相信每個涉及到使用者的系統都有一套使用者許可權管理平臺或者模組,用來維護使用者以及在系統內的功能、資料許可權,我們使用的Activiti工作流引擎配套設計了包括User、Group的Identify模組,怎麼和業務資料同步呢,這個問題是每個新人必問的問題之一,下面介紹幾種同步方案,最後總結比較。 方案一:呼