public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
From: Brian Inglis <Brian.Inglis@SystematicSW.ab.ca>
To: cygwin@cygwin.com
Subject: Re: cygsshd fails due to bad ownership or modes of /cygdrive/c/Users
Date: Tue, 6 Feb 2024 14:22:34 -0700	[thread overview]
Message-ID: <b6f5af93-a7c1-428a-b6d3-5a9baaea3608@SystematicSW.ab.ca> (raw)
In-Reply-To: <439a4aeb-e8f8-42c7-6c35-c303a9366368@cs.umass.edu>

On 2024-02-05 18:36, Eliot Moss via Cygwin wrote:
> On 2/5/2024 8:28 PM, Frank-Ulrich Sommer via Cygwin wrote:
>> On 05.02.2024 00:53, Frank-Ulrich Sommer via Cygwin wrote:
>>> I'm trying to run cygsshd on my PC with Windows 11 and connect from a linux 
>>> machine. I have added the public key to 
>>> /cygdrive/c/Users/xxx/.ssh/authorized_keys and created a symbolic link from  
>>> /cygdrive/c/Users/xxx/.ssh to /home/xxx/.ssh. As usual I checked the access 
>>> rights and mode of the .ssh directory (700 and belongs to user xxx) and the 
>>> authorized_keys file (600 and also belongs to user xxx) and also of the home 
>>> directory (had to change ownership).

Change the symlink from Cygwin home to your home, as symlinks have a+rwx perms, 
so you can not use one for .ssh:

	$ ln -sv `cygpath -aU "C:/Users/$USER"` /home/

>>> Now I get the following strange messages:
>>> [...]
>>> Feb  5 00:35:50 XXXXX sshd: PID 2798: debug1: temporarily_use_uid: 
>>> 197609/197121 (e=18/18)
>>> Feb  5 00:35:50 XXXXX sshd: PID 2798: debug1: trying public key file 
>>> /home/xxx/.ssh/authorized_keys
>>> Feb  5 00:35:50 XXXXX sshd: PID 2798: debug1: fd 5 clearing O_NONBLOCK
>>> Feb  5 00:35:50 XXXXX sshd: PID 2798: Authentication refused: bad ownership 
>>> or modes for directory /cygdrive/c/Users
>>> Feb  5 00:35:50 XXXXX sshd: PID 2798: debug1: restore_uid: 18/18
>>> [...]
>>> Why is cygsshd complaining about the Windows "Users" directory and not about 
>>> the directory of user xxx (/cygdrive/c/Users/xxx)? And how can I solve this?

>> Looking at the OpenSSH source code (on Github, not from Cygwin) I found a 
>> function "safe_path" that checks that the ownership and access modes for all 
>> path components are correct.  This relies on "platform_sys_dir_uid" which 
>> checks if a UID may own a system directory. The code checks for UID zero and 
>> might also accept an OS specific second value (PLATFORM_SYS_DIR_UID) but for 
>> Cygwin this seems not to be set. But I don't know where to find the source 
>> code for the exact version that is used in Cygwin and I'm unsure about build 
>> settings.

Run Cygwin setup and select package openssh Source checkbox to download the 
source package, or go to your Cygwin upstream mirror and download the source 
tarball shown in setup.ini prefixed with your nearest Cygwin mirror site e.g.

https://ftp.fau.de/cygwin/x86_64/release/openssh/openssh-9.6p1-1-src.tar.xz

Build settings are in the Cygwin package build control script definitions file 
openssh.cygport in the source tarball or build repo:

	https://cygwin.com/cgit/cygwin-packages/openssh/tree/openssh.cygport

...
	--disable-strip
	   --with-kerberos5=/usr
	       --libexecdir=/usr/sbin
	       --with-xauth=/usr/bin/xauth
	   --with-libedit
	   --with-security-key-builtin

>> A comment defines this a safe path as follows:
>> "This is defined as all components of the path to the file must be owned by 
>> either the owner of the file or root and no directories must be group or world 
>> writable."

>> The "Users" directory is owned by "SYSTEM" (numeric: 18 according to stat) and 
>> only writable by Administrators and SYSTEM. The mode cygwin shows for 
>> /cygdrive/c/Users is 0750 which should be OK.

>> So my question is: are "Administrators" and "SYSTEM" different users and does 
>> cygsshd accept SYSTEM (numeric 18) as a valid user who may own system 
>> directories? If the numeric ID is really 18 I can't see how this check can 
>> succeed but I'm not sure the code used in Cygwin is the same.

	$ id SYSTEM
	uid=18(SYSTEM) gid=18(SYSTEM) groups=544(Administrators),18(SYSTEM)

> Administrators and SYSTEM are not the same.  And neither is exactly equivalent
> to the concept of root in POSIX.  SYSTEM (in my experience) is used for things
> like backup tools that needs access to almost every file.  Administrators is for
> system administration.  I don't have deep knowledge of all of this - others can
> give a deeper / more nuanced answer.

Look at permissions at all levels:

$ lsattr -d ~/.ssh/;echo;ls -dl ~/.ssh/;echo;getfacl ~/.ssh/;\
				icacls `cygpath -m ~/.ssh`
------------ /home/BWI/.ssh/

drwx------ 1 $USER None 0 Mar  8  2023 /home/$USER/.ssh/

# file: /home/$USER/.ssh/
# owner: $USER
# group: None
user::rwx
group::---
other::---
default:user::rwx
default:group::---
default:other::---

.../.ssh/ $HOST\$USER:(F)
           $HOST\None:(Rc,S,RA)
           Everyone:(Rc,S,RA)
           CREATOR OWNER:(OI)(CI)(IO)(F)
           CREATOR GROUP:(OI)(CI)(IO)(Rc,S,RA)
           Everyone:(OI)(CI)(IO)(Rc,S,RA)

Successfully processed 1 files; Failed processing 0 files

Try:

# add perm query cmds for info before and after changes
$ chmod -c u+rwx,go-rwx	~/.ssh/
$ setfacl -b		~/.ssh/
$ chmod -c u+rwx,go-rwx	~/.ssh/	# same as before

then ls -l ~/.ssh/ and ensure that:

- non-key ssh files	...		have	u+rw-x,go-rwx 	perms,
- private key files	id_...		have	u+r-wx,go-rwx 	perms, and
- public key files	id_*.pub	have	a+r-wx 		perms.

-- 
Take care. Thanks, Brian Inglis              Calgary, Alberta, Canada

La perfection est atteinte                   Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter  not when there is no more to add
mais lorsqu'il n'y a plus rien à retirer     but when there is no more to cut
                                 -- Antoine de Saint-Exupéry

  reply	other threads:[~2024-02-06 21:22 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-04 23:53 Frank-Ulrich Sommer
2024-02-06  1:28 ` Frank-Ulrich Sommer
2024-02-06  1:36   ` Eliot Moss
2024-02-06 21:22     ` Brian Inglis [this message]
2024-02-07  2:26       ` Frank-Ulrich Sommer
2024-02-07  5:34         ` marco atzeri
2024-02-07 19:01         ` matthew patton
2024-02-07 19:25           ` Corinna Vinschen
2024-02-07 19:23 ` ASSI
2024-02-07 19:27   ` Corinna Vinschen
2024-02-07 19:55     ` Corinna Vinschen
2024-02-07 21:27     ` Frank-Ulrich Sommer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b6f5af93-a7c1-428a-b6d3-5a9baaea3608@SystematicSW.ab.ca \
    --to=brian.inglis@systematicsw.ab.ca \
    --cc=cygwin@cygwin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).