web-dev-qa-db-fra.com

Configurez les autorisations de téléchargement pour un dossier partagé sur le serveur via ssh

J'ai mis en place un serveur de fichiers sans tête à la maison avec Ubuntu Server 17.04. J'y accède via WiFi en utilisant SSH à partir de mon ordinateur portable fonctionnant sous Ubuntu 17.04. J'ai constaté que SSH (SFTP) suffisait pour répondre aux besoins de la transmission de fichiers (musique et photographies, par exemple) à mon réseau domestique.

Maintenant, j'aimerais pouvoir télécharger des fichiers dans un dossier situé sur le disque dur de mon serveur /dev/sda1, actuellement monté en tant que /media/a. Il utilise le système de fichiers ext4 Linux et je l'ai monté à l'aide de la commande Sudo mount /dev/sda1 /media/a.

Je peux exécuter des commandes SSH à partir du terminal (en me connectant avec ssh username@servername) et accéder aux fichiers via l'interface graphique de mon ordinateur portable (fichiers> autres emplacements> se connecter au serveur> sftp: // nomutilisateur @ nomutilisateur). Cependant, lorsque j'essaie de créer un nouveau dossier (par exemple), il est indiqué

Erreur lors de la création d'un nouveau dossier: autorisation refusée.

J'ai essayé de définir les autorisations sur un dossier upload (créé récemment via ma session ssh) avec Sudo chmod o=rwx /media/a/upload. Cependant, lorsque je tente maintenant de créer un dossier via l'interface graphique de mon ordinateur portable, le message

Erreur lors de la création du nouveau dossier: raison inconnue.

Comment puis-je télécharger des fichiers sur mon serveur à partir de mon ordinateur portable?

EDIT: Voici le contenu de mon fichier /etc/ssh/sshd_config, comme demandé:

#   $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey /etc/ssh/ssh_Host_rsa_key
#HostKey /etc/ssh/ssh_Host_ecdsa_key
#HostKey /etc/ssh/ssh_Host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

#PubkeyAuthentication yes

# Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody

# For this to work you will also need Host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation sandbox
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

# no default banner path
#Banner none

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

# override default of no subsystems
Subsystem   sftp    /usr/lib/openssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#   X11Forwarding no
#   AllowTcpForwarding no
#   PermitTTY no
#   ForceCommand cvs server

EDIT: Ce qui suit est la sortie des différentes commandes demandées dans les commentaires

username@servername:~$ findmnt /media/a

TARGET   SOURCE    FSTYPE OPTIONS
/media/a /dev/sdc1 ext4   rw,relatime,data=ordered
username@servername:~$ namei -lx /media/a
f: /media/a
Drwxr-xr-x root root /
drwxr-xr-x root root media
Drwxr-xr-x root root a
username@servername:~$ id
uid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(Sudo),30(dip),46(plugdev),111(lxd),116(sambashare),117(lpadmin)
username@servername:~$ getfacl /media/a
getfacl: Removing leading '/' from absolute path names
# file: media/a
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

username@servername:~$ mkdir -v /media/a/upload
mkdir: cannot create directory ‘/media/a/upload’: Permission denied
1
Ivan

Bien que restreindre la suppression des dossiers non possédés comme David suggère est peut-être une bonne idée pour votre cas d'utilisation, ce n'est pas la cause première de votre problème.

Le commutateur o = pour chmod indique les autres (pas l'utilisateur, pas le membre du groupe), pas tout le monde. Je ne pense pas que ce soit ce que vous avez en tête. Pour définir lire et écrire pour vous, vous souhaitez utiliser le commutateur u = comme dans Sudo chmod u=rwx /media/a/upload

Bien entendu, cela suppose que vous avez un accès en écriture au répertoire parent, ce que votre question indique. Vous devez disposer d’une autorisation d’écriture sur un répertoire pour pouvoir y créer un répertoire, raison pour laquelle vous ne pouvez pas utiliser mkdir -v /media/a/upload, car vous ne disposez que des autorisations de lecture et d’exécution sur/media/a /

Notez que puisque les autorisations s'appliquent au groupe (U) ser (G) et aux autres (O) si vous souhaitez un contrôle d'accès précis, vous devez changer l'utilisateur ou le groupe, ou les deux, à partir de la propriété actuelle root: root. plus sur chown ci-dessous.

Si mon nom d'utilisateur était ivan et que je voulais un accès rwx pour moi uniquement sur le répertoire media/a/upload, j'émettrais les commandes suivantes.

Sudo chown ivan/media/a/upload (ce qui laisserait le statut du groupe inchangé) ou plus génériquement

Sudo chown username:groupname /media/a/upload

suivi par

Sudo chmod u=rwx /media/a/upload

Etant donné que d’autres ont accès via/avec l’autorisation x à/media/a /, vous devriez être autorisé à parcourir ce répertoire, ce qui permet le changement de propriété et les paramètres d’autorisation sur/media/a/upload /.

Pour plus d'informations sur chown, voir man chown ou https://linux.die.net/man/1/chown Pour plus d'informations sur chmod, consultez man chmod ou https: //en.wikipedia.org/wiki/Chmod ou https://linux.die.net/man/1/chmod

Sources:

man chown

man chmod

https://en.wikipedia.org/wiki/Chmod

Edit: Le message Modifier les autorisations et la propriété des dossiers contient de nombreux détails sur ce sujet.

3
Elder Geek

Il semble que vous souhaitiez un répertoire "persistant" comme /tmp dans lequel chaque utilisateur ayant un accès en écriture peut créer des entrées mais ne peut pas modifier le répertoire lui-même ni supprimer les entrées créées par d'autres utilisateurs. Le bit collant a le masque octal 1000 ou le symbole t.

Pour définir le drapeau "post-it" ou "suppression restreinte":

Sudo chmod +t /media/a

Pour définir le drapeau "post-it" et , autorisez tout le monde à créer des entrées de répertoire:

Sudo chmod a=rwxt /media/a

La page de manuel de unlink(2) décrit l’effet de l’indicateur permanent sur les répertoires dans sa section sur les conditions d’erreur:

EPERM ou EACCES: le répertoire contenant le chemin a le bit collant (S_ISVTX) défini et l'UID effectif du processus n'est ni l'UID du fichier à supprimer ni celui du répertoire qui le contient et le processus n’est pas privilégié (Linux: n’a pas la capacité CAP_FOWNER).

Voir également

3
David Foerster