0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何分配特殊文件權(quán)限

Linux愛好者 ? 來源:YXQ ? 2019-08-09 17:46 ? 次閱讀

Linux 上查看文件權(quán)限時(shí),有時(shí)你會(huì)看到的不僅僅是普通的 r、w、x 和 -。除了在所有者、組和其他中看到 rwx 之外,你可能會(huì)看到 s 或者 t,如下例所示:

drwxrwsrwt

要進(jìn)一步明確的方法之一是使用 stat 命令查看權(quán)限。stat 的第四行輸出以八進(jìn)制和字符串格式顯示文件權(quán)限:

$ stat /var/mail  File: /var/mail  Size: 4096            Blocks: 8          IO Block: 4096   directoryDevice: 801h/2049d      Inode: 1048833     Links: 2Access: (3777/drwxrwsrwt)  Uid: (    0/    root)   Gid: (    8/    mail)Access: 2019-05-21 19:23:15.769746004 -0400Modify: 2019-05-21 19:03:48.226656344 -0400Change: 2019-05-21 19:03:48.226656344 -0400 Birth: -

這個(gè)輸出提示我們,分配給文件權(quán)限的位數(shù)超過 9 位。事實(shí)上,有 12 位。這些額外的三位提供了一種分配超出通常的讀、寫和執(zhí)行權(quán)限的方法 - 例如,3777(二進(jìn)制 011111111111)表示使用了兩個(gè)額外的設(shè)置。

該值的第一個(gè) 1 (第二位)表示 SGID(設(shè)置 GID),為運(yùn)行文件而賦予臨時(shí)權(quán)限,或以該關(guān)聯(lián)組的權(quán)限來使用目錄。

011111111111 ^

SGID 將正在使用該文件的用戶作為該組成員之一而分配臨時(shí)權(quán)限。

第二個(gè) 1(第三位)是“粘連”位。它確保只有文件的所有者能夠刪除或重命名該文件或目錄。

011111111111  ^

如果權(quán)限是 7777 而不是 3777,我們知道 SUID(設(shè)置 UID)字段也已設(shè)置。

111111111111^

SUID 將正在使用該文件的用戶作為文件擁有者分配臨時(shí)權(quán)限。

至于我們上面看到的 /var/mail 目錄,所有用戶都需要訪問,因此需要一些特殊值來提供它。

但現(xiàn)在讓我們更進(jìn)一步。

特殊權(quán)限位的一個(gè)常見用法是使用 passwd 之類的命令。如果查看 /usr/bin/passwd 文件,你會(huì)注意到 SUID 位已設(shè)置,它允許你更改密碼(以及 /etc/shadow 文件的內(nèi)容),即使你是以普通(非特權(quán))用戶身份運(yùn)行,并且對(duì)此文件沒有讀取或?qū)懭霗?quán)限。當(dāng)然,passwd 命令很聰明,不允許你更改其他人的密碼,除非你是以 root 身份運(yùn)行或使用 sudo。

$ ls -l /usr/bin/passwd-rwsr-xr-x 1 root root 63736 Mar 22 14:32 /usr/bin/passwd$ ls -l /etc/shadow-rw-r----- 1 root shadow 2195 Apr 22 10:46 /etc/shadow

現(xiàn)在,讓我們看一下使用這些特殊權(quán)限可以做些什么。

如何分配特殊文件權(quán)限

與 Linux 命令行中的許多東西一樣,你可以有不同的方法設(shè)置。 chmod 命令允許你以數(shù)字方式或使用字符表達(dá)式更改權(quán)限。

要以數(shù)字方式更改文件權(quán)限,你可以使用這樣的命令來設(shè)置 SUID 和 SGID 位:

$ chmod 6775 tryme

或者你可以使用這樣的命令:

$ chmod ug+s tryme <== 用于 SUID 和 SGID 權(quán)限

如果你要添加特殊權(quán)限的文件是腳本,你可能會(huì)對(duì)它不符合你的期望感到驚訝。這是一個(gè)非常簡單的例子:

$ cat tryme#!/bin/bashecho I am $USER

即使設(shè)置了 SUID 和 SGID 位,并且 root 是文件所有者,運(yùn)行腳本也不會(huì)產(chǎn)生你可能期望的 “I am root”。為什么?因?yàn)?Linux 會(huì)忽略腳本的 SUID 和 SGID 位。

$ ls -l tryme-rwsrwsrwt 1 root root 29 May 26 12:22 tryme$ ./trymeI am jdoe

另一方面,如果你對(duì)一個(gè)編譯的程序之類進(jìn)行類似的嘗試,就像下面這個(gè)簡單的 C 程序一樣,你會(huì)看到不同的效果。在此示例程序中,我們提示用戶輸入文件名并創(chuàng)建它,并給文件寫入權(quán)限。

#include int main(){    FILE *fp;   /* file pointer*/    char fName[20];    printf("Enter the name of file to be created: ");    scanf("%s",fName);    /* create the file with write permission */    fp=fopen(fName,"w");    /* check if file was created */    if(fp==NULL)    {        printf("File not created");        exit(0);    }    printf("File created successfully\n");    return 0;}

編譯程序并運(yùn)行該命令以使 root 用戶成為所有者并設(shè)置所需權(quán)限后,你將看到它以預(yù)期的 root 權(quán)限運(yùn)行 - 留下新創(chuàng)建的 root 為所有者的文件。當(dāng)然,你必須具有 sudo 權(quán)限才能運(yùn)行一些需要的命令。

$ cc -o mkfile mkfile.c            <== 編譯程序$ sudo chown root:root mkfile       <== 更改所有者和組為 “root”$ sudo chmod ug+s mkfile        <== 添加 SUID and SGID 權(quán)限$ ./mkfile              <== 運(yùn)行程序Enter name of file to be create: emptyFile created successfully$ ls -l empty-rw-rw-r-- 1 root root 0 May 26 13:15 empty

請(qǐng)注意,文件所有者是 root - 如果程序未以 root 權(quán)限運(yùn)行,則不會(huì)發(fā)生這種情況。

權(quán)限字符串中不常見設(shè)置的位置(例如,rwsrwsrwt)可以幫助提醒我們每個(gè)位的含義。至少第一個(gè) “s”(SUID) 位于所有者權(quán)限區(qū)域中,第二個(gè) (SGID) 位于組權(quán)限區(qū)域中。為什么粘連位是 “t” 而不是 “s” 超出了我的理解。也許創(chuàng)造者想把它稱為 “tacky bit”,但由于這個(gè)詞的不太令人喜歡的第二個(gè)定義而改變了他們的想法。無論如何,額外的權(quán)限設(shè)置為 Linux 和其他 Unix 系統(tǒng)提供了許多額外的功能。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11212

    瀏覽量

    208723
  • 權(quán)限
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    7255

原文標(biāo)題:更深入地了解 Linux 權(quán)限

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    LINUX修改文件權(quán)限

    本帖最后由 Stark揚(yáng) 于 2018-9-28 16:56 編輯 用戶權(quán)限在Windows操作系統(tǒng)里也不陌生,但是Linux操作系統(tǒng)的用戶權(quán)限文件權(quán)限要比Windows操作系
    發(fā)表于 09-26 13:58

    淺析Linux命令與Linux文件的分類

    查看當(dāng)前目錄(2)Linux文件的分類:普通文件(-),目錄文件(d),設(shè)備文件(c字符設(shè)備/ b塊設(shè)備),鏈接文件(l)(3)Linux
    發(fā)表于 12-15 06:15

    Linux 中文件權(quán)限管理的探討

    Linux 是一種多用戶的操作系統(tǒng),其文件權(quán)限管理在文件管理中占有重要的地位。為了更好地把握Linux 的文件權(quán)限的相關(guān)內(nèi)容,本文以多種Li
    發(fā)表于 06-11 09:37 ?11次下載

    Linux改變文件或目錄的訪問權(quán)限命令

    Linux改變文件或目錄的訪問權(quán)限命令 Linux改變文件或目錄的訪問權(quán)限命令  Linux系統(tǒng)中的每個(gè)文件和目錄都有訪問許可
    發(fā)表于 01-18 12:46 ?1195次閱讀

    設(shè)備文件系統(tǒng)devfs詳細(xì)解析

    ,典型的 /dev 樹包含數(shù)百個(gè)塊特殊文件和字符特殊文件,它們?nèi)荚诟?b class='flag-5'>文件系統(tǒng)上。每個(gè)特殊文件都可以讓用戶空間進(jìn)程輕松地與內(nèi)核設(shè)備實(shí)現(xiàn)交互。舉例來說,通過對(duì)這些
    發(fā)表于 11-01 15:36 ?0次下載

    Linux系統(tǒng)文件權(quán)限細(xì)節(jié)分析

    linux是一個(gè)安全的操作系統(tǒng),她是以文件為基礎(chǔ)而設(shè)計(jì)的,其文件權(quán)限是比較復(fù)雜的,可以用stat命令以及l(fā)sattr命令來顯示某個(gè)文件的詳細(xì)信息: 可以看到,
    發(fā)表于 11-07 11:08 ?9次下載

    使用Python復(fù)制文件的方法有哪些

    的內(nèi)容復(fù)制到目的地。如果您沒有寫入權(quán)限,則會(huì)引發(fā)IOError 。它通過打開輸入文件進(jìn)行閱讀,忽略其文件類型。接下來,它不會(huì)對(duì)特殊文件進(jìn)行任何不同的處理,也不會(huì)將它們復(fù)制
    發(fā)表于 08-13 17:43 ?6次下載
    使用Python復(fù)制<b class='flag-5'>文件</b>的方法有哪些

    如何修改權(quán)限命令chmod用法

    Linux中的Chmod命令用于更改或分配文件和目錄的權(quán)限。在Linux/Unix系統(tǒng)中,文件和目錄的可訪問性是由文件所有權(quán)和
    的頭像 發(fā)表于 11-03 17:16 ?6653次閱讀
    如何修改<b class='flag-5'>權(quán)限</b>命令chmod用法

    第1期Ubuntu入門篇:【12】Ubuntu文件權(quán)限管理

    文章目錄簡介目標(biāo)參考資料閱讀基礎(chǔ)環(huán)境說明參考資料文件信息解讀文件權(quán)限的作用文件權(quán)限文件
    發(fā)表于 12-07 17:51 ?8次下載
    第1期Ubuntu入門篇:【12】Ubuntu<b class='flag-5'>文件</b><b class='flag-5'>權(quán)限</b>管理

    如何遞歸更改文件和目錄的權(quán)限

    如果您使用Linux作為主要操作系統(tǒng)或管理Linux服務(wù)器,當(dāng)您嘗試創(chuàng)建或編輯文件并收到權(quán)限拒絕Permission deny錯(cuò)誤時(shí)。
    的頭像 發(fā)表于 12-09 16:52 ?3941次閱讀

    linux修改文件權(quán)限

    我們首先使用`ls -l`指令查看文件權(quán)限信息(以/etc/fstab為例)。
    的頭像 發(fā)表于 01-11 10:45 ?1005次閱讀

    Linux系統(tǒng)如何修改文件屬性與權(quán)限

    我們已經(jīng)深入學(xué)習(xí)了Linux系統(tǒng)中用戶和用戶組的基本概念。每個(gè)文件和目錄都具有“所屬用戶”和“所屬用戶組”這兩個(gè)屬性,這兩個(gè)屬性對(duì)文件權(quán)限及安全性至關(guān)重要。本節(jié)我們就來學(xué)習(xí)如何修改一個(gè)文件
    的頭像 發(fā)表于 05-12 15:29 ?2559次閱讀
    Linux系統(tǒng)如何修改<b class='flag-5'>文件</b>屬性與<b class='flag-5'>權(quán)限</b>

    linux文件訪問權(quán)限怎么設(shè)置

    Linux 文件訪問權(quán)限是操作系統(tǒng)中一個(gè)非常重要的概念。正確地設(shè)置文件訪問權(quán)限可以保護(hù)系統(tǒng)的安全性,防止未經(jīng)授權(quán)的人員對(duì)文件進(jìn)行修改、刪除或
    的頭像 發(fā)表于 11-23 10:20 ?1418次閱讀

    Linux文件權(quán)限及Makefile

    的詳細(xì)信息 //man -L zh_CN open man 1 open man 2 open man 3 open Part2文件權(quán)限 2.1 權(quán)限理解 在 Ubuntu(以及其他類 UNIX
    的頭像 發(fā)表于 11-24 16:06 ?530次閱讀
    Linux<b class='flag-5'>文件</b><b class='flag-5'>權(quán)限</b>及Makefile

    Linux文件權(quán)限詳解

    權(quán)限的意義在于允許某一個(gè)用戶或某個(gè)用戶組以規(guī)定的方式去訪問某個(gè)文件。
    的頭像 發(fā)表于 11-01 09:45 ?78次閱讀