FreeBSD 标志 simmutable/uimmutable 和 sunlink/uunlink 之间有什么区别或相似之处?
阅读手动更改标志,我看到这些标志:
schg, schange, simmutable
set the system immutable flag (super-user only)
sunlnk, sunlink
set the system undeletable flag (super-user only)
uchg, uchange, uimmutable
set the user immutable flag (owner or super-user only)
uunlnk, uunlink
set the user undeletable flag (owner or super-user only)
我目前对不可变属性的理解与 Linux 手册页描述的方式相同chattr
:
具有“i”属性的文件无法修改:无法删除或重命名,无法创建到该文件的链接,也无法向该文件写入任何数据。只有超级用户或拥有 CAP_LINUX_IMMUTABLE 能力的进程才能设置或清除该属性。
FreeBSD 中“不可变”和“不可删除”有何不同?
答案1
来自系统调用的联机帮助页更改标志(2):
SF_IMMUTABLE The file may not be changed. SF_NOUNLINK The file may not be renamed or deleted. [...] UF_IMMUTABLE The file may not be changed. UF_NOUNLINK The file may not be renamed or deleted.
带有前缀的标志SF_
只能由超级用户设置或取消设置。其他前缀为UF_
可以由文件所有者或超级用户设置或取消设置。
笔记:如果设置了其中一个SF_
标志,则非超级用户无法更改任何标志,甚至超级用户也只能在 securelevel 为 0 时更改标志。
可以使用 sysctl(8) 对 kern.securelevel 变量设置安全级别。