cygwin的坑坑洼洼
弄清楚cygwin的哪些操作或者特性会跟windows本身的冲突,以便更好的使用cygwin管理Windows Server系统。
环境操作系统:WindowsServer2012 x64
Cygwin版本: CYGWIN_NT-6.2 TEST 2.0.2(0.287/5/3)2015-05-0817:00 x86_64 Cygwin
Cygwin核心概念Windows安全概述Windows NT系统包含了一个基于ACL的复杂的安全模型,cygwin默认情况下在支持它们的文件系统(通常会是NTFS)上将Win32文件的属主和权限映射为ACL。拥有Administrator权限的用户可以修改文件的属主。
在Windows安全模型中,几乎所有的object都是安全的。这里的object指的是文件、进程、线程、信号量等。每一个object都有一个叫做SD(security descriptor)的数据结构,SD包含了所有的权限管理信息。
SD包含下面几个要素:
Flags which control several aspects of this SD. This is not discussed here.
object属主的SID
object属组的SID
一个ACE(Access Control Entries)列表,称为DACL(Discretionary Access Control List)
另外一个ACE列表,称为SACL(Security Access Control List)
每个ACE都包含一个SID(Security IDentifier)。SID是所有用户、组、计算机、AD域的唯一标识符。与POSIX中的UID/GID不同的是,SID是跨计算机、域全局唯一的。
例如:一个计算机“foo”的SID为:
S-1-5-21-165875785-1005667432-441284377该计算机“foo”中的一个用户“johndoe”的SID为:
S-1-5-21-165875785-1005667432-441284377-1023格式:
第1段恒为S;第2段为SID结构的版本号,目前为1;
第3、4段代表SID的类型或类别,计算机和域永远以S-1-5-21开始;
接下来的3段是一个32位的值,代表一个计算机系统的96位唯一标识;
用户的SID是在计算机SID的后面加上一个编号,这个编号称为RID(relative identifier),当用户创建的时候,RID就跟着一起创建出来了。
对域而言,也是类似的结构。
SID of a domain “bar.local”:
SID of a user “johndoe” in the domain “bar.local”:
S-1-5-21-186985262-1144665072-740312968-1207注意:虽然上面的johndoe用户在计算机中存在,又在域中存在,但是他具有不同的SID,因此这两个SID并不是同一个账户。不同的SID,就是不同的账户。
从Cygwin 1.7.34版本之后,cygwin就会自动的将Windows中的SID翻译成POSIX的UID、GID。Windows系统中的RID会被转换成/etc/passwd、/etc/group中的UID、GID。
ACE包含3个部分:
ACE类型:allow ACE或deny ACE
32位的权限位
这些权限允许或拒绝的SID
文件权限cygwin将Windows系统的文件权限实现成POSIX的文件权限,而POSIX文件是以ACL来管理文件权限的。POSIX的文件、目录权限是被mount选项来控制的,默认设置为acl。
也就是说在默认情况下,/etc/fstab文件内容为:
这说明cygwin会模拟POSIX文件权限,从而可能会导致Windows系统中应用程序的文件权限产生混乱,为了解决这个问题,需要添加noacl参数,将/etc/fatab改为:
none /cygdrive cygdrive binary,user,noacl,posix=000在D:\(即/cygwin/d)下分别创建3个文件测试一下权限,效果分别如下图所示:
左图为Windows系统中创建的文件的权限,中间为cygwin在默认情况下模拟POSIX文件权限创建出来的文件权限,右图为cygwin添加了noacl参数之后,在cygwin中创建的文件的权限。可以看出,添加noacl参数之后,cygwin将不会模拟POSIX文件权限,在cygwin中创建的文件的权限跟Windows系统的文件权限保持一致。
但是上面的改动仅仅是修改了/cygdrive目录,也就是windows系统中的所有的磁盘(C:、D:、E:、F:等),而cygwin本身的/并未修改,同样会存在上述的权限问题,因此需要一并修改,最终完整的/etc/fatab文件内容如下:
none /cygdrive cygdrive binary,user,noacl,posix=000 D:\cygwin64 / ntfs binary,noacl,override00 D:\cygwin64\bin/usr/bin ntfs binary,noacl,override00 D:\cygwin64\lib /usr/lib ntfs binary,noacl,override00cygservercygserver 是为Cygwin作为后台服务运行而设计的,默认安装Cygwin的时候并没有启动它。我们需要打开它,并将它作为Windows的标准服务来安装。
在Cygwin中输入命令:
cygserver-config按照界面提示进行cygserver的安装,并同意将其安装为服务。
运行该服务:
cygrunsrv --start cygservercygrunsrv其实是启动的Windows标准服务cygserver,这个命令也可以在Cmd下这样做: net start cygserver,或者也可以按下按键 Windows+R ,键入 services.msc 回车,找到CYGWI cygwerver服务,并启动之。
查看cygserver服务的状态:
cygrunsrv --qurey cygservercygserver的配置文件:
/etc/cygserver.confcygwin命令行工具温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/71239.html