Topic: Suggestion Directive = ForceUser

Bonjour à tous,
Une idée comme ça, ne serait-il pas possible de forcer le sftp avec un autre user que celui de l'authentification afin d'avoir un propriétaire unique des fichiers uploadé (comme c'est possible en samba) ?

Une directive du style :
ForceUser sftpuser

Cordialement

Et encore une fois, bravo pour le produit (in French this time)

JoK

Re: Suggestion Directive = ForceUser

Bonjour,

L'idée est sympa mais il faut faire attention aux problème de sécurité car tout le monde "sera" le même utilisateur wink


Sinon le code est propre, et je vais voir pour implémenter ça rapidement pour la prochaine version big_smile


Merci de votre aide !



Cordialement,
L'équipe MySecureShell.

3 (edited by JoKnarf 2008-05-24 11:47:30)

Re: Suggestion Directive = ForceUser

Cool big_smile

Merci, mon "C" est rouillé, heureusement que j'ai pu m'inspirer de votre code. cool

Naturellement côté sécurité ce sera du style chacun chrooté chez soi wink

Sinon, je pense, par la même occasion, qu'un ForceGroup ne devrait pas couter trop cher big_smile

JoK

Re: Suggestion Directive = ForceUser

Effectivement le ForceGroup ne va pas être très compliqué smile

5 (edited by JoKnarf 2008-05-26 08:15:46)

Re: Suggestion Directive = ForceUser

Yes ! smile

Sinon, j'ai une autre suggestion, une directive DownloadOnly serait super cool. En effet, il y a des users qui ont une facheuse habitude de faire du chmod 777 sur leurs fichiers.
Avec cette Directive pas besoin de faire trop gaffe aux droits sur les fichiers si on ne veut autoriser que du Download.

DownloadOnly true

=> Désactivation put chown chmod rm rmdir mkdir ln

Et puis aussi une directive CanMakeDir en complément de CanRemoveDir roll

Et sinon elle est prévue pour quand la prochaine version tongue

Jok

Re: Suggestion Directive = ForceUser

Hello,
Voici une implémentation possible des Directives :
CanMakeDir (default true)
DownloadOnly (default false)
UploadOnly (default false)

J'espère que vous pourrez l'intégrer à la prochaine version smile
Je vous fais confiance pour corriger les énormes erreurs que j'ai pu commettre wink

conf.c
    { "CanMakeDir", CONF_IS_BOOLEAN, CONF_SHOW },
    { "DownloadOnly", CONF_IS_BOOLEAN, CONF_SHOW },
    { "UploadOnly", CONF_IS_BOOLEAN, CONF_SHOW },
SftpServer/SftpWho.h
#define SFTPWHO_CAN_READ        (1 << 23)
#define SFTPWHO_CAN_WRITE       (1 << 24)
#define SFTPWHO_CAN_SETSTAT     (1 << 25)
#define SFTPWHO_CAN_MKDIR       (1 << 26)
#define SFTPWHO_CAN_RENAME      (1 << 27)
#define SFTPWHO_CAN_SYMLINK     (1 << 28)
main.c
        (hash_get_int_with_default("UploadOnly", 0)? 0 : SFTPWHO_CAN_READ )+
        (hash_get_int_with_default("DownloadOnly", 0)? 0 :
                (hash_get_int_with_default("CanRemoveDir", 1) ? SFTPWHO_CAN_RMDIR : 0) +
                (hash_get_int_with_default("CanRemoveFile", 1) ? SFTPWHO_CAN_RMFILE : 0) +
                (hash_get_int_with_default("CanMakeDir", 1) ? SFTPWHO_CAN_MKDIR : 0) +
                SFTPWHO_CAN_WRITE+
                SFTPWHO_CAN_SETSTAT+
                SFTPWHO_CAN_RENAME+
                SFTPWHO_CAN_SYMLINK
        );
SftpServer/Sftp.c function DoOpen()
after :  flags |= FlagsFromPortable(pflags, &textMode);
 if( ((flags & O_WRONLY) && (gl_var->who->status & SFTPWHO_CAN_WRITE)) || 
     (!(flags & O_WRONLY) && (gl_var->who->status & SFTPWHO_CAN_READ)) )
{
}
  else
   status = SSH2_FX_PERMISSION_DENIED;


and in different functions :
DoSetStat() et DoFSetStat()
      if ((gl_var->who->status & SFTPWHO_CAN_SETSTAT)) ...
DoMkDir()
        if ((gl_var->who->status & SFTPWHO_CAN_MKDIR)) ...
DoRename()
     if((gl_var->who->status & SFTPWHO_CAN_RENAME))...
DoSymLink
     if((gl_var->who->status & SFTPWHO_CAN_SYMLINK))...

JoK

Re: Suggestion Directive = ForceUser

Bonjour,

Concernant le tag UploadOnly / DownloadOnly, il faut regarder côter:
http://mysecureshell.sourceforge.net/fr … rUser.html avec la valeur -1
http://mysecureshell.sourceforge.net/fr … rUser.html avec la valeur -1

Et hop c'est fini wink

Re: Suggestion Directive = ForceUser

Euh, ben ça marche pas sad
Avec les valeurs -1 aux Directives :
MaxWriteFilesForUser    -1
MaxReadFilesForUser    -1

j'arrive très bien à downloader, uploader, chmod ... (testé sur Linux+Solaris)

J'ai loupé quelque chose ?

JoK

Re: Suggestion Directive = ForceUser

Bon, je n'ai pas réussi à limiter les accès avec les Directives
MaxReadFilesForUser
MaxWriteFilesForUser
sad
Mais j'aimerais de toute façon plus de souplesse.

En fait, j'ai finalement implémenté toutes les Directives : smile

CanReadFile
CanReadDir
CanWriteFile
CanSetAttribute
CanMakeDir
CanRename
CanSymLink

Avec Macro Directives :
DownloadOnly true =
   CanWriteFile
   CanSetAttribute
   CanMakeDir
   CanRename
   CanSymLink
à false

UploadOnly true =
   CanReadFile
   CanReadDir
à false

Afin de pouvoir faire des confs aux petits oignons (interdire browsing...)

        (hash_get_int("UploadOnly")? 0 :
                (hash_get_int_with_default("CanReadFile", 1) ? SFTPWHO_CAN_READ : 0) +
                (hash_get_int_with_default("CanReadDir", 1) ? SFTPWHO_CAN_READDIR : 0)
        )+
        (hash_get_int("DownloadOnly")? 0 :
                (hash_get_int_with_default("CanRemoveDir", 1) ? SFTPWHO_CAN_RMDIR : 0) +
                (hash_get_int_with_default("CanRemoveFile", 1) ? SFTPWHO_CAN_RMFILE : 0) +
                (hash_get_int_with_default("CanMakeDir", 1) ? SFTPWHO_CAN_MKDIR : 0) +
                (hash_get_int_with_default("CanWriteFile", 1) ? SFTPWHO_CAN_WRITE : 0) +
                (hash_get_int_with_default("CanSetAttribute", 1) ? SFTPWHO_CAN_SETSTAT : 0) +
                (hash_get_int_with_default("CanRename", 1) ? SFTPWHO_CAN_RENAME : 0) +
                (hash_get_int_with_default("CanSymLink", 1) ? SFTPWHO_CAN_SYMLINK : 0)
        );

Personnellement ce sont des besoins que j'ai réellement de pouvoir finement mettre ces autorisations, car je ne peux compter sur les droits positionnés sur les fichiers/répertoires par les users locaux du serveur sftp hmm

Qu'en pense tu ?

Re: Suggestion Directive = ForceUser

JoKnarf wrote:

Euh, ben ça marche pas sad
Avec les valeurs -1 aux Directives :
MaxWriteFilesForUser    -1
MaxReadFilesForUser    -1

j'arrive très bien à downloader, uploader, chmod ... (testé sur Linux+Solaris)

J'ai loupé quelque chose ?

JoK

Oui, c'est moi qui est loupé mon code... maintenant, on peut mettre -1 (idéal pour interdire) wink