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