对于强制性锁定,文件必须是设置了 set-group-ID 位且未设置组执行权限位的常规文件。如果不符合其中任一条件,则所有记录锁定均为建议性锁定。
按照如下方式设置强制性锁定。
#include <sys/types.h> #include <sys/stat.h> int mode; struct stat buf; ... if (stat(filename, &buf) < 0) { perror("program"); exit (2); } /* get currently set mode */ mode = buf.st_mode; /* remove group execute permission from mode */ mode &= ~(S_IEXEC>>3); /* set 'set group id bit' in mode */ mode |= S_ISGID; if (chmod(filename, mode) < 0) { perror("program"); exit(2); } ...
当系统在执行文件时,操作系统会忽略记录锁定。所有带有记录锁定的文件都不应设置执行权限。
chmod(1) 命令还可用于将文件设置为允许强制性锁定。
$ chmod +l file |
此命令在文件模式中设置 O20n0 权限位,它指示对文件进行强制性锁定。如果 n 是偶数,则此位将会解释为启用强制性锁定。如果 n 是奇数,则此位将会解释为“执行时设置组 ID”。
当使用 -l 选项请求长列表格式时,ls(1) 命令显示以下设置:
$ ls -l file |
此命令显示以下信息:
-rw---l--- 1 user group size mod_time file |
权限中的字母 "l" 指示 set-group-ID 位已设置。由于设置了 set-group-ID 位,因此启用强制性锁定。此外,还启用了 set group ID 的一般语义。