Comment changer les permissions Unix quand je n'ai pas le fichier mais que vous avez la permission d'écriture sur le répertoire?

Je partage un dépôt git avec un collègue, et parce que git ne propage pas la panoplie complète de fichiers Unix autorisations, nous avons un "crochet" qui s'exécute sur la mise à jour qui définit les "autres", les autorisations dont ils ont besoin pour être ensemble. Le problème? Le crochet utilise chmod, et il s'avère que lorsque mon collègue commet un fichier, il en est le propriétaire, donc je ne peux pas courir chmod sur elle, et vice versa. Les répertoires de groupe en écriture, collant, donc je crois que l'un de nous a le droit de supprimer tout fichier et de le remplacer avec un autre du même nom, le même contenu, mais différente de la propriété. Sans doute, puis nous avons pu chmod il. Mais cela semble être un très gros marteau, et je suis un peu réticent à l'idée de vissage jusqu'à. Donc, deux questions:

  1. Quelqu'un peut-il penser à un autre moyen de le faire?

  2. Si non, quelle est la meilleure conception pour un pare-balles script shell qui implémente "rendre ce fichier appartient à moi"? Pas de cross-système de fichiers se déplace, etc etc...

Pour ceux qui n'ont pas réalisé, l'autorisation d'écriture ne confère pas le droit de chmod:

% ls -l value.c
-rw-rw---- 1 agallant ta105 133 Feb 10 13:37 value.c
% [ -w value.c ] && echo writeable
writeable
% chmod o+r value.c               
chmod: changing permissions of `value.c': Operation not permitted

Nous sommes à la fois dans le ta105 groupe.


Notes:

  1. Nous utilisons git non seulement de coordonner les changements, mais de publier le repo comme un site web du cours. La publication du site web est le but principal de l'opération. Les autorisations de script s'exécute à chaque mise à jour à l'aide d'un git crochet, et il s'assure que les étudiants n'ont pas l'autorisation de lire les solutions qui n'ont pas encore été dévoilée.

  2. S'il vous plaît ne suggèrent pas que j'ai du mal umask. Pas tous les fichiers dans le repo doit avoir les mêmes autorisations, et quelle que soit umask est choisi, les autorisations sur certains fichiers doivent être modifiés. Pour ne pas mentionner qu'il serait discourtois pour moi d'imposer mon umask préférences sur mes collègues.

  3. Mise à JOUR: je viens d'apprendre que dans notre environnement, la racine est annulée à nobody sur toutes les machines, nous avons accès, de sorte qu'une solution qui s'appuie sur les privilèges de root ne fonctionne pas.

  • Désolé, les mods n'ont pas la capacité de changer la réponse est acceptée et la réponse devient le bounty.
  • Je suis probablement manquant une partie de votre scénario, mais il semble que vous devriez être à la recherche sur les autorisations de répertoire. La capacité de modifier les autorisations d'un fichier est déduit à partir du mode de réglage sur le répertoire dans lequel le fichier est en. Vous n'avez pas afficher les paramètres de ce répertoire. Sont-ils drwxrwxr_x ou quelque chose comme ça? Vous voulez probablement drwxrwsr_x. Votre les permissions du répertoire courant aiderait à clarifier.
  • selon man 2 chmod, vous devez être le propriétaire ou le super-utilisateur pour modifier les autorisations d'un fichier. Le répertoire parent, les permissions ne sont pas mentionnés, et semblent comme ils devraient être sans incidence sur les autorisations sont stockées dans l'inode, pas dans le répertoire (sinon deux liens en dur vers le même fichier peut avoir différentes autorisations).