我正在编写一些脚本来检查一个新创build的Windows服务器机器的某些条件,如用户有pipe理权限,存在一个特定的驱动器,用户有读/写访问该驱动器等
当我开始思考时,我正在努力检查读/写权限 – pipe理员是否可能对某个驱动器没有权限?
我通过尝试在其他pipe理员的用户目录中创build文件夹来testing这一点,我能够这样做。 如果不能以pipe理员身份进行写访问,我将放弃此检查。 但是,如果可能的话,我怎么检查我是否没有写权限?
对的,这是可能的。
我创build了用户“testing”并将其添加到本地pipe理员组:
我在桌面上创build了一个文件夹“ServerFault”,并删除了“Administrators”权限:
我以“Test”用户身份启动一个shell,并尝试访问此目录:
所以,即使用户是pipe理员,个人文件夹权限也会阻止访问。
如何以编程方式检查您是否具有写入权限在很大程度上取决于您正在写入什么语言,而不是StackOverflow的问题。
编辑1:但是,嘿,我可以给你指针。 例如,在C ++中,可以使用OpenFile函数来打开文件进行写入。
如果函数失败,可以调用GetLastError(),如果这个错误值是5,那么你就不能像运行程序的用户那样进行写操作。
编辑2:由于您使用Powershell,您可以使用CACLS命令并parsing输出。
PS C:\ Users \ csa> cacls C:\ temp | findstr“pipe理员” C:\ Temp BUILTIN \ Administrators:(ID)F BUILTIN \pipe理员:(OI)(CI)(IO)(ID)的F
从“帮助”:
烫发可以是:R阅读 W写 C改变(写) F完全控制
和
缩写: CI - 容器inheritance。 ACE将被目录inheritance。 OI - 对象inheritance。 ACE将被文件inheritance。 IO - 只inheritance。 ACE不适用于当前文件/目录。 ID - inheritance。 ACE是从父目录的ACLinheritance而来的。
因此,在这种情况下,来自内置pipe理员组的用户具有完全控制权限,因为他们从C:\目录中设置的权限inheritance。