下面幾個(gè)chown函數(shù)可用于更改文件的用戶ID和組ID。
#include <unistd.h>int chown( const char *pathname, uid_t owner, gid_t group );int fchown( int filedes, uid_t owner, gid_t group );int lchown( const char *pathname, uid_t owner, gid_t group );三個(gè)函數(shù)的返回值:若成功則返回0,若出錯(cuò)則返回-1
除了所引用的文件是符號(hào)鏈接以外,這三個(gè)函數(shù)的操作相似。在符號(hào)鏈接的情況下,lchown更改符號(hào)鏈接本身的所有者,而不是該符號(hào)鏈接所指向的文件。
如若兩個(gè)參數(shù)owner或group中的任意一個(gè)是-1,則對(duì)應(yīng)的ID不變。
基于BSD的系統(tǒng)一直規(guī)定只有超級(jí)用戶才能更改一個(gè)文件的所有者。這樣做的原因是防止用戶改變其文件的所有者從而擺脫磁盤(pán)空間限額對(duì)他們的限制。系統(tǒng)V則允許任一用戶更改他們所擁有的文件的所有者。按照_POSIX_CHOWN_RESTRICTED的值,POSIX.1在這兩種形式的操作中選用一種。對(duì)于Solaris 9,此功能是個(gè)配置選項(xiàng),其默認(rèn)值是施加限制。而FreeBSD 5.2.1、linux 2.4.22和Mac OS X 10.3則總對(duì)chown施加限制。
_POSIX_CHOWN_RESTRICTED常量可選地定義在頭文件<unistd.h>中,而且總是可以用pathconf或fpathconf函數(shù)查詢。此選項(xiàng)還與所引用的文件有關(guān)——可在每個(gè)文件系統(tǒng)基礎(chǔ)上,是該選項(xiàng)起作用或不起作用。
若_POSIX_CHOWN_RESTRICTED對(duì)指定的文件起作用,則
(1)只有超級(jí)用戶進(jìn)程能更改該文件的用戶ID。
(2)若滿足下列條件,一個(gè)非超級(jí)用戶進(jìn)程就可以更改該文件的組ID:
(a)進(jìn)程擁有此文件(其有效用戶ID等于該文件的用戶ID)。
(b)參數(shù)owner等于-1或文件的用戶ID,并且參數(shù)group等于進(jìn)程的有效組ID或進(jìn)程的附加組ID之一。
這意味著,當(dāng)_POSIX_CHOWN_RESTRICTED起作用時(shí),不能更改其他用戶文件的用戶ID。你可以更改你所擁有的文件的組ID,但只能改到你所屬的組。
如果這些函數(shù)由非超級(jí)用戶進(jìn)程調(diào)用,則在成功返回時(shí),該文件的設(shè)置用戶ID位和設(shè)置組ID位會(huì)被清除。
新聞熱點(diǎn)
疑難解答
圖片精選