我在具有Solaris内核模块的OmniOS服务器上设置了SMB / CIFS文件共享,该模块使用可与 Windows客户端正常工作的NFSv4 ACL.

我想创建一个具有以下目标的共享目录:用户(比如alice)应该能够创建和修改文件,但不能删除它们.还应该防止创建子目录.应允许读访问权限.

我尝试过以下ACL,它基本上可以工作:

/usr/bin/chmod A=\
user:root:rwxpdDaARWcCos:fd-----:allow,\    # root has full access
user:alice:rwx---a-R-c--s:-------:allow,\   # dir: create files,read everything
user:alice:rwxp--aARWc--s:f-i----:allow \   # files: wpAW is needed for full file write access,everything is only inherited to files
/pool/share

但是,如果alice在Windows资源管理器中查看新添加文件的“安全”选项卡,则她可以授予自己完全访问权限并在之后删除该文件,即使她没有Co权限也是如此.

如何解释这种行为?我怎样才能更改它以便无法修改ACL?

编辑:ls的输出似乎正常:

# /usr/bin/ls -v
total 1
-rwx------+  1 alice staff          3 2016-03-21 test.txt
    0:user:root:read_data/write_data/append_data/read_xattr/write_xattr
        /execute/delete_child/read_attributes/write_attributes/delete
        /read_acl/write_acl/write_owner/synchronize:inherited:allow
    1:user:alice:read_data/write_data/append_data/read_xattr
        /write_xattr/execute/read_attributes/write_attributes/read_acl
        /synchronize:inherited:allow

# /usr/bin/ls -V
total 1
-rwx------+  1 alice staff          3 2016-03-21 test.txt
    user:root:rwxpdDaARWcCos:------I:allow
    user:alice:rwxp--aARWc--s:------I:allow

输出目录本身的ls:

# /usr/bin/ls -Vd
drwx------+  3 root     root           4 2016-03-21 .
 user:root:rwxpdDaARWcCos:fd-----:allow
user:alice:rwx---a-R-c--s:-------:allow
user:alice:rwxp--aARWc--s:f-i----:allow

# /usr/bin/ls -vd
drwx------+  3 root     root           4 2016-03-21 .
    0:user:root:list_directory/read_data/add_file/write_data
        /add_subdirectory/append_data/read_xattr/write_xattr/execute
        /delete_child/read_attributes/write_attributes/delete/read_acl
        /write_acl/write_owner/synchronize:file_inherit/dir_inherit:allow
    1:user:alice:list_directory/read_data/add_file/write_data
        /read_xattr/execute/read_attributes/read_acl/synchronize:allow
    2:user:alice:list_directory/read_data/add_file/write_data
        /add_subdirectory/append_data/read_xattr/write_xattr/execute
        /read_attributes/write_attributes/read_acl/synchronize
        :file_inherit/inherit_only:allow

共享的文件系统是ZFS.最有趣的非默认属性如下:

NAME        PROPERTY        VALUE          SOURCE
pool/share  type            filesystem     -
pool/share  compression     lz4            inherited from pool
pool/share  atime           off            local
pool/share  aclmode         restricted     local
pool/share  aclinherit      passthrough    local
pool/share  version         5              -
pool/share  utf8only        on             -
pool/share  normalization   formD          -
pool/share  casesensitivity insensitive    -
pool/share  nbmand          on             local
pool/share  sharesmb        name=testshare local

CIFS共享权限设置为允许每个人完全访问权限,因此只应应用文件权限.

更新:

This thread与我的问题非常相似,虽然将/pool/share/.zfs/shares/testshare中的ACL减少到每个人的modify_set(或拒绝用户特定的删除权限)的解决方案在我的情况下似乎不起作用我不喜欢不知道为什么.

恕我直言,如果你删除用户,组,每个人的琐碎acls,一切都会让人感到困惑.需要考虑的事项:

>如果拒绝权限或缺少文件的访问权限,则权限子系统将确定为文件所有者或超级用户授予的访问权限请求.此机制可防止文件所有者被锁定在其文件之外,并使超级用户能够修改文件以进行恢复.
>基于POSIX草案的ACL使用单个条目来定义允许哪些权限以及拒绝哪些权限.新的ACL模型有两种类型的ACE影响访问检查:ALLOW和DENY
>即使明确拒绝了权限,也会无条件地授予文件所有者write_acl权限.
>如果更改文件的权限,则会相应地更新文件的ACL.此外,如果删除授予用户访问文件或目录的非平凡ACL,则该用户仍可以访问该文件或目录,因为文件或目录的权限位可授予对组或每个人的访问权限

所以我的方法是根据需要修改普通的acls(使用deny模式),然后为所有特殊用例添加非平凡的acls.记住这一点:

>授予允许权限后,相同ACL权限集中的后续ACL拒绝条目不能拒绝该权限.

如果不知道OmniOS是什么,但这些文件帮助我理解了NFS ACL.我们将Solaris与ZFS一起使用
https://docs.oracle.com/cd/E53394_01/html/E54801/ftyxi.html#scrolltoc

Windows用户可以覆盖CIFS / SMB共享上的文件的NFSv4 / Solaris ACL权限(授予自己完全访问权限),我该如何防止这种情况?的更多相关文章

  1. nodejs acl的用户权限管理详解

    这篇文章主要介绍了nodejs acl的用户权限管理详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. windows – 将“Everyone”组添加到目录及其所有子目录中

    我目前正在使用Vista32位.如何添加Windows安全组“Everyone”并完全控制目录及其所有子目录和所有文件?是否有我可以使用的powershell脚本?我扩展了martona的代码片段,并且能够访问所有文件夹和子文件夹.这是我的代码–

  3. Windows存储ACL和ACL的位置遵循从一台计算机到另一台计算机的文件?

    在我的开发机器(机器1)上生成文件后,通过其支持站点(机器2)将其上载到组件供应商,然后支持人员将其下载到他们的机器上进行检查(机器3)?我不确定这一点,但我假设每台Windows机器都将ACL存储在由NTFS管理的某个中心目录/list/table中,而不是存储在文件中.当原始文件的ACL从一台机器复制到另一台机器,存储在Subversion中,打包到MSI中等时会发生什么?有人能指出我可以阅读的一些很好的参考资料吗?

  4. windows – 使用powershell删除文件夹上的所有ACL

    我是PowerShell脚本的新手.我目前正在使用powershell2.0编写一个脚本来清理文件夹NTFSACL.我想删除除管理员之外的每个acl.我的问题是我找不到删除每个非管理员的acl的方法,而不知道它们.所以我来到这里寻求powershellpro.此代码删除acl:此代码添加管理员acl:希望这会帮助别人:)

  5. .net – 通过SetSecurityDescriptor设置WMI ACL

    我似乎无法通过Powershell设置WMIACL.调用返回此异常:SetSecurityDescriptor只接受__SecurityDescriptor类型的一个参数,而我在-Arguments中使用的$acl对象本身似乎没问题:从Icangetoffthedocs开始,我调用参数集:路径重载,因此参数集似乎不会缺少必需的参数.我基本上是在thisMSDNblogpostontheverysa

  6. 安装的ZFS池上的Ubuntu cp -p

    在我的ubuntu服务器上,我有几个自动挂载的zfs池.我遇到的问题是,当我尝试在保留权限的同时复制文件时,我收到以下错误:cp:preservingpermissionsfor`blah.txt’:Operationnotsupported尽管如此,该文件仍然与原始文件属性重复.任何人都可以帮助解决这个问题吗?解决方案:禁用ACL制作它因为额外的ACL权限见&给予好评:https://super

  7. ubuntu – NFSv4 – ACL无效

    我已经设置了NFSv4服务器和客户端.似乎uid用户名映射开箱即用,但ACL不能正常工作.我已经安装了nfs4-acl-tools,我可以在客户端上正确读取ACL,但是它们没有得到应用.ACL需要做什么才能工作?澄清;用户名映射适用于常规权限.使用uid/gid应用ACL.你需要nfs4acls,而不是posixacls.据我所知,还没有linuxnfs服务器提供.获得它的简单方法是获得一个支持zfs的系统,比如nexentastor.如果你有一个Netapp文件管理器,那么一个也很好用.

  8. php – 持久化Zend Framework ACL列表

    ZendFramework是否提供了持久ACL列表的任何机制,还是单独的系统/应用程序开发人员的详细信息?

  9. php – 基于角色的访问控制 – 正确的MVC模式

    半年前我开始使用MVC模式,我仍然有一些误解.现在我想在我的应用程序中实现基于角色的访问控制.但是,我的问题不是关于RBAC,而是关于MVC.我对RBAC的实现是这样的:用户>角色的>许可所以每个用户都可以拥有多个角色,每个角色都可以拥有许多权限.MySQL表>用户>角色>权限>roles_permissions>users_roles现在我的问题是我应该如何在MVC中实现它?有一个单独的模型:用户,角色,权限,roles_permissions,users_roles,而不是具有创建用户,roles_p

  10. Windows用户可以覆盖CIFS / SMB共享上的文件的NFSv4 / Solaris ACL权限(授予自己完全访问权限),我该如何防止这种情况?

    我怎样才能更改它以便无法修改ACL?

随机推荐

  1. static – 在页面之间共享数据的最佳实践

    我想知道在UWP的页面之间发送像’selectedItem’等变量的最佳做法是什么?创建一个每个页面都知道的静态全局变量类是一个好主意吗?

  2. .net – 为Windows窗体控件提供百分比宽度/高度

    WindowsForm开发的新手,但在Web开发方面经验丰富.有没有办法为Windows窗体控件指定百分比宽度/高度,以便在用户调整窗口大小时扩展/缩小?当窗口调整大小时,可以编写代码来改变控件的宽度/高度,但我希望有更好的方法,比如在HTML/CSS中.在那儿?

  3. 使用Windows Azure查询表存储数据

    我需要使用特定帐户吗?>将应用程序部署到Azure服务后,如何查询数据?GoogleAppEngine有一个数据查看器/查询工具,Azure有类似的东西吗?>您可以看到的sqlExpressintance仅在开发结构中,并且一旦您表示没有等效,所以请小心使用它.>您可以尝试使用Linqpad查询表格.看看JamieThomson的thispost.

  4. windows – SetupDiGetClassDevs是否与文档中的设备实例ID一起使用?

    有没有更好的方法可以使用DBT_DEVICEARRIVAL事件中的数据获取设备的更多信息?您似乎必须指定DIGCF_ALLCLASSES标志以查找与给定设备实例ID匹配的所有类,或者指定ClassGuid并使用DIGCF_DEFAULT标志.这对我有用:带输出:

  5. Windows Live ID是OpenID提供商吗?

    不,WindowsLiveID不是OpenID提供商.他们使用专有协议.自从他们的“测试版”期结束以来,他们从未宣布计划继续它.

  6. 如果我在代码中进行了更改,是否需要重新安装Windows服务?

    我写了一个Windows服务并安装它.现在我对代码进行了一些更改并重新构建了解决方案.我还应该重新安装服务吗?不,只需停止它,替换文件,然后重新启动它.

  7. 带有双引号的字符串回显使用Windows批处理输出文件

    我正在尝试使用Windows批处理文件重写配置文件.我循环遍历文件的行并查找我想要用指定的新行替换的行.我有一个’函数’将行写入文件问题是%Text%是一个嵌入双引号的字符串.然后失败了.可能还有其他角色也会导致失败.如何才能使用配置文件中的所有文本?尝试将所有“在文本中替换为^”.^是转义字符,因此“将被视为常规字符你可以尝试以下方法:其他可能导致错误的字符是:

  8. .net – 将控制台应用程序转换为服务?

    我正在寻找不同的优势/劣势,将我们长期使用的控制台应用程序转换为Windows服务.我们为ActiveMQ使用了一个叫做java服务包装器的东西,我相信人们告诉我你可以用它包装任何东西.这并不是说你应该用它包装任何东西;我们遇到了这个问题.控制台应用程序是一个.NET控制台应用程序,默认情况下会将大量信息记录到控制台,尽管这是可配置的.任何推荐?我们应该在VisualStudio中将其重建为服务吗?我使用“-install”/“-uninstall”开关执行此操作.例如,seehere.

  9. windows – 捕获外部程序的STDOUT和STDERR *同时*它正在执行(Ruby)

    哦,我在Windows上:-(实际上,它比我想象的要简单,这看起来很完美:…是的,它适用于Windows!

  10. windows – 当我试图批量打印变量时,为什么我得到“Echo is on”

    我想要执行一个简单的批处理文件脚本:当我在XP中运行时,它给了我预期的输出,但是当我在Vista或Windows7中运行它时,我在尝试打印值时得到“EchoisOn”.以下是程序的输出:摆脱集合表达式中的空格.等号(=)的两侧可以并且应该没有空格BTW:我通常在@echo关闭的情况下启动所有批处理文件,并以@echo结束它们,所以我可以避免将代码与批处理文件的输出混合.它只是使您的批处理文件输出更好,更清洁.

返回
顶部