Mailing-List: contact cygwin-developers-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-developers-owner AT sourceware DOT cygnus DOT com Delivered-To: mailing list cygwin-developers AT sourceware DOT cygnus DOT com Message-ID: <38778A0D.5633ADAF@vinschen.de> Date: Sat, 08 Jan 2000 20:03:41 +0100 From: Corinna Vinschen X-Mailer: Mozilla 4.7 [en] (WinNT; I) X-Accept-Language: de,en MIME-Version: 1.0 To: Chris Faylor CC: cygdev Subject: ntsec-patch16 (and some other) Content-Type: multipart/mixed; boundary="------------18BE35AF3BEBB466DF17EAF3" This is a multi-part message in MIME format. --------------18BE35AF3BEBB466DF17EAF3 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hello Chris, hello all. First of all, I have four patches related to the rearrangment of the sources. Chris, would you please take a special look into these changes? - configure: I had to add the directory `mingw/profile' else it was ignored. - cygwin/smallprintf.c: I had to add `#define __INSIDE_CYGWIN__' else the linker said sth. about `undef'd ref to _ctype_'. - cygwin/regexp/regexp.c: Ditto. - mingw/profile/configure: This configure script couldn't find install-sh, because the search paths for $ac_dir didn't reach back enough in the dir hirarchy. Here I have added the path `$srcdir/../../..'. Moreover, I couldn't find any problem with ntsec. What kind of problem did you find, Chris? Do you have more detailed info? The next is to correct an error made in an earlier patch: - My last patch to access() was messy. I forgot to set errno to EACCES in case of missing permissions and to set EINVAL in case of incorrect specified flags. At least, I have made many changes to the ntsec code: - Defined some constants for better readability: MAX_SID_LEN instead of using the constant 40. DONT_INHERIT for no inheritance of permissions. INHERIT_ONLY for permissions that are only inheritid to child objects but are not applied to the object itself. INHERIT_ALL for permissions that are applied to the object and child objects. Extended usage of defines instead of constants. - Eliminated any code that sets special permissions to local administrators group. - Usage of /etc/passwd and /etc/group to get info about the users group membership (including supplementary groups). This is used when constructing POSIX permission bits. - Not only ACCESS_ALLOWED_ACEs but also ACCESS_DENIED_ACEs are resolved when constructing POSIX permission bits. - When constructing ACLs, only ACCESS_ALLOWED_ACEs are used so far they are able to reflect the POSIX permissions. If the rights of the user are less than the rights of group and the user is member of the group, the superfluous rights are explicitly denied using an ACCESS_DENIED_ACE. This is needed because the group allow bits are valid for the user as well. The same is done for the combinations user/world and group/world. This has one disadvantage because M$ has not well thought-out their DACL model. Their documentation contains in short the following: 1. ACCESS_ALLOW_ACEs will be accumulated related to group memberships. 2. Order of ACEs is important, because system reads them in sequence, 'til either any needed right is denied or all needed rights are granted. 3. All ACCESS_DENIED_ACEs _should_ precede any ACCESS_ALLOWED_ACE. Notice, that the last rule is a preference, not the law. The system will correctly deal with the ACEs regardless of the sequence order. Unfortunately, the security tab of the NT4 explorer is completely unable to deal with ACCESS_DENIED_ACEs while the explorer of W2K forces the sort order before you can take a look on them. If you then press cancel, the old sort order remains unchanged (thank God). Why is this sort method not thought-out? It's because it is unable to reflect each possible situation of a POSIX permission. The special case is, when the group has less permissions than the user _and_ less permissions than others. Let's make an example: rw-r-xrw- UserAllow: 110 GroupAllow: 101 OthersAllow: 110 Because of the accumulation of allow rights, user may execute, too, because the group may execute. Next try: UserDeny: 001 GroupAllow: 101 OthersAllow: 110 Now the user may read and write but not execute. Unfortunately, the group may write because others may write. Next try, according to M$ rules: UserDeny: 001 GroupDeny: 010 GroupAllow: 001 OthersAllow: 110 Now the group may not write, but unfortunately the user may not write anymore, too. How should this problem be solved? According to the M$ rules a UserAllow has to follow the GroupDeny but it's easy to see, that this never could solve the problem, because the GroupDeny is harder. So, the only chance to solve this is: UserDeny: 001 UserAllow: 010 GroupDeny: 010 GroupAllow: 001 OthersAllow: 110 As I mentioned earlier this works for both, NT4 and W2K, but the GUI and M$ tools are not able to deal with it. Only in this (unusual) case, ntsec sets the ACEs in the above manner. Of course, if this should be more a burden than a help, it could be solved in another way (slightly incorrect for POSIX rules but in conformance to M$). - For more dealing with ACLs I have (nearly completely) implemented the acl API that is used by newer versions of Solaris. The new data structure for a single ACL entry (ACE in Win32 terminology) is defined as: typedef struct acl { int a_type; /* entry type */ uid_t a_id; /* UID | GID */ mode_t a_perm; /* permissions */ } aclent_t; The new API calls are acl(2), facl(2), aclcheck(3), aclsort(3), acltomode(3), aclfrommode(3), acltopbits(3), aclfrompbits(3), acltotext(3), aclfromtext(3) - Like in Solaris, Cygwin has two new commands for working with ACLs on the command line: getfacl(1) and setfacl(1). They are implemented in the winsup/utils directory. - Online man pages for the aforementioned commands and API calls can be found on eg. docs.sun.com. - Not fully implemented is the CLASS_OBJ or MASK acl entry. I haven't found a way to implement it in the NT security model. - The a_perm member of the aclent_t type contains only the bits for read, write and execute as in the file mode. If eg. read permission is granted, all read bits (S_IRUSR, S_IRGRP, S_IROTH) are set. A point of discussion is the following: ! Should the a_perm element contain POSIX compliant permissions as ! today or should it filled according to NT permission bits to ! reflect the possibilities of the guest os as good as possible??? Best Regards, Corinna ChangeLog: ========== Sat Jan 8 20:00:00 2000 Corinna Vinschen * cygwin.din: Added new acl API calls. * grp.cc (getgroups): Changed to work for any username. * smallprintf.c: Added define for __INSIDE_CYGWIN__ * regexp/regexp.c: Ditto. * security.cc (get_id_from_sid): Changed to work with acl API. (is_grp_member): New function. (get_nt_attribute): Rewritten. (add_access_allowed_ace): New function. (add_access_denied_ace): Ditto. (alloc_sd): Rewritten. (setacl): New function. (getace): Ditto. (searchace): Ditto. (getacl): Ditto. (acl): Ditto. (facl): Ditto. (aclcheck): Ditto. (acecmp): Ditto. (aclsort): Ditto. (acltomode): Ditto. (aclfrommode): Ditto. (acltopbits): Ditto. (aclfrompbits): Ditto. (permtostr): Ditto. (acltotext): Ditto. (permfromstr): Ditto. (aclfromtext): Ditto. * syscalls.cc (access): Sets errno again when needed. * include/cygwin/acl.h: New file. * include/sys/acl.h: Ditto. * utils/Makefile.in: Added getfacl.exe and setfacl.exe to list of PROGS. * utils/getfacl.c: New file. * utils/setfacl.c: New file. --------------18BE35AF3BEBB466DF17EAF3 Content-Type: application/x-gzip; name="CV-patch.gz" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="CV-patch.gz" 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 --------------18BE35AF3BEBB466DF17EAF3--