新聞中心
在Linux系統(tǒng)中,不光每個(gè)文件都有一個(gè)所有者(owner),還有一個(gè)所屬組(group)的概念。所屬組指的是文件所在的組,在文件訪問(wèn)管理中擔(dān)任著重要角色。一些操作,比如讀取、寫(xiě)入和執(zhí)行,都需要通過(guò)組的定義來(lái)授權(quán)文件訪問(wèn)。在Linux系統(tǒng)中,C語(yǔ)言也提供了API來(lái)處理文件所屬組的操作,開(kāi)發(fā)者可以使用這些API來(lái)進(jìn)行文件訪問(wèn)控制的編程。

成都創(chuàng)新互聯(lián)公司專注于湖口企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開(kāi)發(fā),購(gòu)物商城網(wǎng)站建設(shè)。湖口網(wǎng)站建設(shè)公司,為湖口等地區(qū)提供建站服務(wù)。全流程按需開(kāi)發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
本文將介紹Linux系統(tǒng)中的文件所屬組概念,以及C語(yǔ)言API如何為文件訪問(wèn)提供了支持。
Linux中文件所屬組的概念
在Linux中,每個(gè)文件都有一個(gè)所有者和一個(gè)所屬組。所有者一般指的是文件創(chuàng)建者或擁有者,可以理解為文件的主人。所有者默認(rèn)擁有對(duì)文件的所有訪問(wèn)權(quán)限。每個(gè)文件所屬組也是一個(gè)標(biāo)識(shí)符(ID),可以是一個(gè)用戶組或其他類型的組。組成員可以被授權(quán)在文件級(jí)別上進(jìn)行訪問(wèn)。如果一個(gè)組具有執(zhí)行權(quán)限,組中的任何成員都可以執(zhí)行該文件。
對(duì)于大多數(shù)Linux系統(tǒng)管理員來(lái)說(shuō),文件訪問(wèn)權(quán)限是一個(gè)非常熟悉的主題。權(quán)限由三個(gè)分組控制:文件所有者、文件所屬組以及其他人。每個(gè)分組都可以分別授予讀取(r)、寫(xiě)入(w)和執(zhí)行(x)的權(quán)限。這些權(quán)限的合理分配及控制可以保護(hù)文件安全,并鼓勵(lì)文件共享。
C語(yǔ)言API中的文件所屬組支持
Linux系統(tǒng)提供了訪問(wèn)文件所述組的多個(gè)工具和API,包括C語(yǔ)言API。C語(yǔ)言是一種面向過(guò)程的語(yǔ)言,有著非常豐富的文件訪問(wèn)API,并支持對(duì)文件所屬組的操作。以下是C API中的幾個(gè)實(shí)現(xiàn):
1. getgid(): 獲取進(jìn)程的實(shí)際組ID。
2. getegid(): 獲取進(jìn)程的有效組ID。
3. setgid(): 設(shè)置進(jìn)程的組ID,只有超級(jí)用戶有權(quán)限改變組ID。
4. setegid(): 設(shè)置進(jìn)程的有效組ID,并返回之前的值。
5. getgroups(): 獲取進(jìn)程所在的所有組ID。
6. setgroups(): 設(shè)置進(jìn)程的所有組ID。
使用這些API可以實(shí)現(xiàn)對(duì)文件訪問(wèn)控制的編程。在C語(yǔ)言API中,可以使用組ID或者組名來(lái)獲取或設(shè)置文件所屬組。系統(tǒng)會(huì)在文件中存儲(chǔ)文件所有者及其所在組的信息。
下面是一段C API的示例代碼:
“`
#include
#include
#include
#include
#include
#include
int mn(int argc, char** argv) {
// 文件所有者
uid_t owner_uid = getuid();
// 文件所屬組
gid_t owner_gid = getgid();
// 獲取當(dāng)前進(jìn)程的有效組ID
gid_t process_egid = getegid();
// 打印文件信息
printf(“Owner UID=%d GID=%d\n”, owner_uid, owner_gid);
printf(“Effective GID=%d\n”, process_egid);
return 0;
}
“`
在這個(gè)例子中,使用了幾個(gè)C語(yǔ)言API函數(shù)獲取了文件所有者、所屬組以及當(dāng)前進(jìn)程的有效組ID。這些信息可以實(shí)現(xiàn)編程時(shí)對(duì)文件訪問(wèn)的權(quán)限管理。
相關(guān)問(wèn)題拓展閱讀:
- Linux下的umask、特殊權(quán)限與ACL權(quán)限
Linux下的umask、特殊權(quán)限與ACL權(quán)限
在了解到Linux系統(tǒng)上的文件目錄權(quán)限,有時(shí)候你會(huì)發(fā)現(xiàn)為什么剛創(chuàng)建的文件是
-rw-r–r–
這個(gè)權(quán)限,目錄是
drwxr-xr-x
權(quán)限,有些是
-rwsr-xr-x
,又有些是
drwsrws–T
?這些則與umask、特殊權(quán)限有關(guān)。
什么是umask?umask一般是用在你初始創(chuàng)建一個(gè)目錄或者文件的時(shí)候賦予他們的權(quán)限。它與chmod的效果剛好相反,umask設(shè)置的是權(quán)限“補(bǔ)碼”,而chmod設(shè)置的是文件權(quán)限碼。一般在/etc/profile、
或用戶家目錄下的.bash_profile或.profile中設(shè)置umask值。
默認(rèn)的umask是0022,0022四個(gè)數(shù)字代表是賦值初始化準(zhǔn)備丟棄的權(quán)限。(相對(duì)應(yīng)文件來(lái)說(shuō),x權(quán)限就算沒(méi)說(shuō)明出來(lái)丟棄一樣必須默認(rèn)丟棄)
之一個(gè)0代表suid 丟棄的權(quán)限;
第二個(gè)0代表本文件/目錄擁有者什么權(quán)限都沒(méi)丟棄;
第三個(gè)2代表本文件/目錄的用戶組丟棄了w權(quán)限;
第四個(gè)2代表本文件/目錄的文件/目錄的用戶組丟棄了w權(quán)限。
一般我們會(huì)這樣表示:
umask +default permission(默認(rèn)權(quán)限) =777(目錄)/666(文件)
但存在特殊情況如果把umask設(shè)為135呢?
要了解特殊權(quán)限需對(duì)安全上下文有一個(gè)概念:
前提:進(jìn)程有屬主和屬組;文件有屬主和屬組
(1) 任何一個(gè)可執(zhí)行程序文件能不能啟動(dòng)為進(jìn)程,取決發(fā)起者對(duì)程序文件是否擁有執(zhí)行權(quán)限
(2) 啟動(dòng)為進(jìn)程之后,其進(jìn)程的屬主為發(fā)起者,進(jìn)程的屬組為發(fā)起者所屬的組
(3) 進(jìn)程訪問(wèn)文件時(shí)的權(quán)限,取決于進(jìn)程的發(fā)起者
(a) 進(jìn)程的發(fā)起者,同文件的屬主:則應(yīng)用文件屬限
(b) 進(jìn)程的發(fā)起者,屬于文件屬組;則應(yīng)用文件屬組權(quán)限
(c) 應(yīng)用文件“其它”權(quán)限
1.SUID 權(quán)限僅對(duì)二進(jìn)制程序(binary program)有效;
2.執(zhí)行者對(duì)于該程序需要具有x 的可執(zhí)行權(quán)限;
3.本權(quán)限僅在執(zhí)行該程序的過(guò)程中有效(run-time);
4.執(zhí)行者將具有該程序擁有者(owner) 的權(quán)限。
5.SUID設(shè)置在目錄上無(wú)意義
權(quán)限設(shè)定:
chmod u+s FILE…
chmod u-s FILE…
s 標(biāo)志在文件擁有者的x 項(xiàng)目為SUID,那s 在群組的x 時(shí)則稱為Set GID
# ls -l /usr/bin/locate
-rwx–s–x. 1 root slocateJun/usr/bin/locate
與SUID 不同的是,SGID 可以針對(duì)文件或目錄來(lái)設(shè)定!如果是對(duì)文件來(lái)說(shuō), SGID 有如下的功能:
-1.SGID 對(duì)二進(jìn)制程序有用;
-2.程序執(zhí)行者對(duì)于該程序來(lái)說(shuō),需具備x 的權(quán)限;
-3.執(zhí)行者在執(zhí)行的過(guò)程中將會(huì)獲得該程序群組的支持!
# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
-rwx–s–x. 1 root slocateJun/usr/bin/locate
-rw-r—–. 1 root slocateJun 15 03:44 /var/lib/mlocate/mlocate.db
與SUID 非常的類似,使用xiaoming 這個(gè)賬號(hào)去執(zhí)行l(wèi)ocate 時(shí),那xiaoming將會(huì)取得slocate 群組的支持, 因此就能夠去讀取 mlocate.db 。
SGID 也能夠用在目錄上,這也是非常常見(jiàn)的一種用途
目錄設(shè)定了SGID 的權(quán)限后,他將具有如下的功能:
-1. 用戶若對(duì)于此目錄具有r 與x 的權(quán)限時(shí),該用戶能夠進(jìn)入此目錄;
-2.用戶在此目錄下的有效群組(effective group)將會(huì)變成該目錄的群組;
-3.用途:若用戶在此目錄下具有w 的權(quán)限(可以新建文件),則使用者所建立的新文件,該新文件的群組與此目錄的群組相同。
這個(gè) Sticky Bit, SBIT 目前只針對(duì)目錄有效,sticky 設(shè)置在文件上無(wú)意義。SBIT 對(duì)于目錄的作用是:
-1.當(dāng)用戶對(duì)于此目錄具有w, x 權(quán)限,亦即具有寫(xiě)入的權(quán)限時(shí);
-2.當(dāng)用戶在該目錄下建立文件或目錄時(shí),僅有自己與root 才有權(quán)力刪除該文件
SUID/SGID/SBIT 權(quán)限設(shè)定
-rwSrwSrwT 1 root root 0 Jun 16 02:53 test
設(shè)定權(quán)限成為 -rws–x–x 的模樣:
# chmod u=rwxs,go=x test; ls -l test
-rws–x–x 1 root root 0 Jun 16 02:53 test
承上,加上 SGID 與 SBIT 在上述的文件權(quán)限中!
# chmod g+s,o+t test; ls -l test
-rws–s–t 1 root root 0 Jun 16 02:53 test
1】ACL 是Access Control List 的縮寫(xiě),主要的目的是在提供傳統(tǒng)的owner,group,others 的read,write,execute 權(quán)限之外的細(xì)部權(quán)限設(shè)定。ACL 可以針對(duì)單一使用者,單一文件或目錄來(lái)進(jìn)行
ACL 主要可以針以下來(lái)控制權(quán)限呢:
1.使用者 (user):可以針對(duì)使用者來(lái)設(shè)定權(quán)限;
2.群組 (group):針對(duì)群組為對(duì)象來(lái)設(shè)定其權(quán)限;
3.默認(rèn)屬性(mask):還可以針對(duì)在該目錄下在建立新文件/目錄時(shí),規(guī)范新數(shù)據(jù)的默認(rèn)權(quán)限;
及1.ACL:Access Control List,實(shí)現(xiàn)靈活的權(quán)限管理;2.CentOS7默認(rèn)創(chuàng)建的xfs和ext4文件系統(tǒng)具有ACL功能;3.CentOS7之前版本,默認(rèn)手工創(chuàng)建的ext4文件系統(tǒng)無(wú)ACL功能,需手動(dòng)增加tune2fs –o acl/dev/sdb1
mount –o acl/dev/sdb1 /mnt/test
4.ACL生效順序:所有者,自定義用戶,自定義組,其他人
為多用戶或者組的文件和目錄賦予訪問(wèn)權(quán)限r(nóng)wx
2】ACL 的設(shè)定技巧: getfacl, setfacl
-x :刪除后續(xù)的 acl 參數(shù),不可與 -m 合用;
-b :移除『所有的』 ACL 設(shè)定參數(shù);
-k :移除『預(yù)設(shè)的』 ACL 參數(shù),
-R :遞歸設(shè)定 acl ,亦即包括次目錄都會(huì)被設(shè)定起來(lái);
-d :設(shè)定『預(yù)設(shè) acl 參數(shù)』的意思!只對(duì)目錄有效,在該目錄新建的數(shù)據(jù)會(huì)引用此默認(rèn)值
例:# touch acl_test1
# ll acl_test1
-rw-r–r–. 1 root root 0 Jul 21 17:33 acl_test1
# setfacl -m u:xiaoming:rx acl_test1
# ll acl_test1
-rw-r-xr–+ 1 root root 0 Jul 21 17:33 acl_test1
# setfacl -m u::rwx acl_test1
# ll acl_test1
-rwxr-xr–+ 1 root root 0 Jul 21 17:33 acl_test1
設(shè)定值中的 u 后面無(wú)使用者列表,代表設(shè)定該文件擁有者
2.getfacl 指令用法余setfacl一樣
例:# getfacl acl_test1
file: acl_test1 acl.txt
setfacl -R -b /tmp/dir1
清除dir目錄的ACL權(quán)限
setfacl -R –set-file=acl.txt /tmp/dir1
setfacl –restore acl.txt
linux 文件所屬組 c api的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux 文件所屬組 c api,理解Linux文件所屬組:C API,Linux下的umask、特殊權(quán)限與ACL權(quán)限的信息別忘了在本站進(jìn)行查找喔。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開(kāi)發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。創(chuàng)新互聯(lián)成都老牌IDC服務(wù)商,專注四川成都IDC機(jī)房服務(wù)器托管/機(jī)柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機(jī)房租用、服務(wù)器托管、機(jī)柜租賃、大帶寬租用,可選線路電信、移動(dòng)、聯(lián)通等。
當(dāng)前題目:理解Linux文件所屬組:CAPI(linux文件所屬組capi)
轉(zhuǎn)載注明:http://m.5511xx.com/article/cdjsoei.html


咨詢
建站咨詢
