2014-05-13 6 views
1

J'ai la configuration d'environnement suivante.Ubuntu Tomcat CIFS: Permet à l'utilisateur de tomcat d'écrire le fichier en utilisant le servlet

Server: Ubuntu  
App Server: Tomcat7 
Java: JDK 7 

Une servlet doit écrire un fichier dans un dossier de montage. Tomcat s'exécute en utilisant un utilisateur appelé tomcat7 et un CIFS est lié à /mntt/mydir/ avec un utilisateur différent appelé coder.

L'autorisation est définie sur 777 pour /mntt/mydir

service va créer un dossier et essayer de télécharger/écrire un fichier dans ce dossier.

Lorsque le dossier est créé, il a l'autorisation mis à 755 et le fichier a la permission mis à 644, propriétaire des deux fichiers et dossiers est coder et non tomcat7

Alors, quand mon programme tente d'écrire quelque chose dans le fichier, il jette Permission denined exception.

MISE À JOUR Code Création du fichier

//Create directory 
File uploadFile = new File(dirpath); 
uploadFile.mkdirs(); 

//Create and Write to File 
OutputStream stream = new FileOutputStream(new File(dirPath+"/upload")); 

S'il vous plaît guider. Aussi, s'il vous plaît laissez-moi savoir si vous avez besoin de plus amples informations.

Merci

+0

Je n'utilise pas linux si souvent, mais je pense que le fait de placer l'indicateur gid sur/mntt/mydir ferait que les nouveaux répertoires hériteront de l'utilisateur/groupe du répertoire parent. http://en.wikipedia.org/wiki/Setuid#setgid_on_directories –

+1

Quel est ce service qui crée les fichiers/répertoires en tant qu'utilisateur 'coder'? Est-ce quelque chose que vous pouvez contrôler/changer? – mavroprovato

+0

@mavroprovato C'est du code java simple. Veuillez trouver la question mise à jour –

Répondre

0

Enfin j'ai résolu le problème !!

Je lance le service tomcat en tant qu'utilisateur coder en modifiant /etc/defaults/tomcat7.

De plus, je dois modifier les permissions de quelques répertoires tomcat.

0

Vous pouvez modifier le service Java comme suit, de sorte que le fichier créé obtient 777 la permission, et l'autre utilisateur sera en mesure d'y écrire:

Path path = FileSystems.getDefault().getPath(
      file.getAbsolutePath()); 
    Files.setPosixFilePermissions(path, 
      EnumSet.allOf(PosixFilePermission.class)); 

file est le java.io.File objet qui représente le fichier. Vous pouvez faire la même chose dans le répertoire qui contient le fichier, si vous voulez que l'utilisateur tomcat puisse créer des fichiers dans ce répertoire.

+0

J'ai essayé mais cela dit que je n'ai pas la permission de changer la permission du fichier –

+0

Si vous allez dans ce répertoire en utilisant la ligne de commande en tant qu'utilisateur 'coder' et que vous exécutez' chmod 777 file' aussi? C'est bizarre, dans Linux le propriétaire d'un fichier peut changer les permissions de ce fichier ... – mavroprovato

+0

Je me suis connecté en tant qu'utilisateur root puis je peux changer les permissions. Le programme crée le répertoire en tant que propriétaire 'coder' mais après cela quand j'ai essayé de changer la permission en utilisant le code ci-dessous il montre' Permission Denied' –