Est-il possible de changer la propriété d'un fichier sans accès root?

21

Si un utilisateur A possède file.txt, l'utilisateur A peut-il changer la propriété du fichier en utilisateur B sans accès root? Lorsque j'exécute un fichier B chown.txt en tant qu'utilisateur A, j'obtiens une erreur Opération non autorisée. Il me semble que puisque l'utilisateur A est propriétaire du fichier, il devrait pouvoir changer de propriétaire, mais je ne vois pas de moyen de le faire. Merci pour l'aide!

Daniel
la source
4
Vous pouvez mettre des données incriminantes dans un fichier et changer sa propriété pour encadrer quelqu'un :) Je suppose que c'est un argument contre l'autorisation de ce que vous proposez.
roadmr
1
Petit plus: AFAIU vous pouvez changer le groupe propriétaire d'un fichier que vous possédez, à condition que vous êtes un membre du groupe que vous changez de .
Matthijs Kooijman
connexes: unix.stackexchange.com/questions/27350/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

7

Si l'utilisateur A possède file.txt, il ne peut pas changer la propriété de l' file.txtautorisation sans accès root / sudo. C'est une fonctionnalité et non un bug. Et l'une des nombreuses raisons pour lesquelles les anciens ont choisi de mettre cette fonctionnalité, a été expliquée dans un commentaire à votre question par roadmr

Bottom-line: Vous pouvez modifier les autorisations du fichier en utilisant chmodsi vous êtes le propriétaire de ce fichier sans autorisations root / sudo mais vous ne pouvez pas changer la propriété, utilisateur ou groupe (en utilisant soit chownou chgrp), d'un fichier même si vous êtes le propriétaire du fichier sans autorisations root / sudo. C'est une fonctionnalité et non un bug.

Nitin Venkatesh
la source
2
Une partie de ce mal. Les utilisateurs non root peuvent changer le groupe des autres groupes dont ils sont membres. Essayez touch t; ls -l t; chgrp lpadmin t; ls -l t(en supposant que vous êtes dans le groupe lpadmin). Voir aussi ma réponse et ma question liée.
Mark Stosberg
1
Les anciens se sont trompés. Si je suis un utilisateur A et que je suis également un utilisateur B, je devrais pouvoir changer la propriété de A à B, si je suis connecté en tant que A et que j'ai également le mot de passe B ou vice versa.
aishu
@aishu Vous pouvez en principe le faire en copiant le fichier comme B puis en le supprimant comme A. Pas très pratique cependant pour les gros fichiers.
Holger Böhnke
4

Non, vous ne pouvez pas changer le propriétaire d'un fichier sans accès, mais si vous êtes propriétaire du fichier, vous pouvez modifier les autorisations du fichier avec chmodet pouvez changer le groupe avec chgrpen un autre groupe dont vous êtes membre.

Question connexe: chown est autorisé aux utilisateurs non root?

Mark Stosberg
la source
2

si vous avez accès à l'utilisateur B, vous pouvez simplement copier le fichier en étant connecté en tant que B. Si vous avez également accès à l'utilisateur A, vous pouvez alors vous connecter et supprimer le fichier d'origine. Et enfin, renommez le fichier copié, au nom d'origine (encore une fois en B), vous laissant essentiellement le même fichier, appartenant à un utilisateur différent.

Ce n'est évidemment pas le même fichier, mais si vous vous souciez uniquement du contenu du fichier, cela fait l'affaire

kuvic
la source
1

Vous pouvez changer la propriété d'un fichier ou d'un dossier sans sudo, tant que vous avez des autorisations de lecture / écriture sur la chose, et vous ne pouvez changer le propriétaire que pour VOUS, pas pour un utilisateur arbitraire. L'astuce consiste simplement à copier quoi que ce soit, à supprimer l'original puis à déplacer votre copie à sa place. Cela implique malheureusement de faire une copie intégrale de tout, mais que faites-vous?

par exemple chuser.sh:

#!/bin/bash

TMP="some_temporary_filename_this_is_dumb"

RECURSIVE=""
POSITIONAL=()
while [[ $# -gt 0 ]]
do
key="$1"

case $key in
    -r|--recursive)
    RECURSIVE="-r"
    shift # past argument
    ;;
    *)    # unknown option
    POSITIONAL+=("$1") # save it in an array for later
    shift # past argument
    ;;
esac
done
set -- "${POSITIONAL[@]}" # restore positional parameters

cp -d --preserve=all $RECURSIVE $1 $TMP || exit 1
rm $RECURSIVE $1
mv $TMP $1
Scott
la source