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

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


咨詢
建站咨詢
