1 (edited by matteofalcone 2009-07-06 11:34:45)

Topic: Peut-on empêcher de renommer (mv) ?

Bonjour,

Je redirige mes groupes d'utilisateurs (clients1, clients2, ...) vers plusieurs dossiers au sein d'un même "home" :
- dossier1 en lecture pour le groupe clients1
- dossier2 en lecture pour le groupe clients2
- uploads en écriture pour tout le monde

Ce qui donne en droits Linux :

drwxr-x--- 2 root clients1 ... dossier1
drwxr-x--- 2 root clients2 ... dossier2
drwxrwxrwx 2 root root ... uploads

Très bien, chaque groupe a accès à son dossier en lecture et peut écrire dans le seul dossier uploads.

Seul souci, chaque groupe a le droit de renommer les répertoires existants (commande mv).
Peut-on empêcher cela ?

Il existe les directives CanChangeRights, CanChangeTime, CanRemoveDir et CanRemoveFile qui sont très bien mais il manque une sorte de :
CanMoveDir ou CanRenameDir
et de
CanMoveFile ou CanRenameFile

Non ? A moins que ce soit possible en droits Linux ?

---- MISE A JOUR ----

Ok, vu dans le topic http://mysecureshell.free.fr/forum/viewtopic.php?id=55, il faut modifier le code source.

J'ai essayé de modifier les fichiers conf.c ; main.c et sftpwho.h mais ça n'a pas l'air de fonctionner.

main.c  :

(hash_get_int("CanRename") ? SFTPWHO_CAN_RENAME : 0) +
(hash_get_int("CanMove") ? SFTPWHO_CAN_MV : 0) +

conf.c :

    { "CanRename", CONF_IS_BOOLEAN, CONF_SHOW },
    { "CanMove", CONF_IS_BOOLEAN, CONF_SHOW },

et

hash_set_int("CanRename", 1);
hash_set_int("CanMove", 1);

sftpwho.h

#define SFTPWHO_CAN_RENAME    (1 << 25)
#define SFTPWHO_CAN_MV    (1 << 26)

Il y a d'autres choses à modifier ?

Re: Peut-on empêcher de renommer (mv) ?

Teka, en lisant ton post de mars : http://mysecureshell.free.fr/forum/viewtopic.php?id=115
je vois que de nouvelles directives sont implémentées ?

J'ai essayé "DisableRename" mais sftp-verif me rapporte que cette directive est inconnue.

Qu'en est-il ?

Re: Peut-on empêcher de renommer (mv) ?

Bonjour,


Et oui ces nouvelles directives seront disponibles dans la prochaine version de MySecureShell wink

Après si la modification ne te fait pas peur, tu peux éditer la fonction DoRename (dans le fichier SftpServer/Sftp.c) et commenter le code de façon qu'il ne reste que le code suivant:

void    DoRename()
{
  struct stat    sb;
  u_int32_t    id;
  char        *oldPath, *newPath;
  int        flags = 0, status = SSH2_FX_PERMISSION_DENIED;

  id = BufferGetInt32(bIn);
  oldPath = convertFromUtf8(BufferGetString(bIn), 1);
  newPath = convertFromUtf8(BufferGetString(bIn), 1);
  if (cVersion >= 5)
    flags = BufferGetInt32(bIn);
  SendStatus(bOut, id, status);
  free(oldPath);
  free(newPath);
}