chown not working with exec()

Discussion in 'General' started by bigger_travis, Feb 5, 2010.

  1. bigger_travis

    bigger_travis New Member

    hello, i have ispconfig 2 running on Centos -

    what i'm trying to do:
    i am running a php file which installs a script in the web/ directory to install my custom script, the php file renames the web directory

    from: /var/www/web2/web
    to: /var/www/web2/web_Orginal

    then the the php file creates a web directory:

    /var/www/web2/web

    so when i go to the shell i send the ls command and i can confirm both directories are there, so the script is able to rename the orginal web/ directory and create a new web/ directory (I am using tar to unpack the web/ directory which contains all my script files)

    web/
    web_Orginal/

    however, the new web/ directory is own by apache:

    Code:
    command: ls -la
    
    OUTPUT:
    drwxrwxrwx  8 [B]apache[/B]   [B]apache[/B] 4096 Feb  4 05:16 web
    drwxrwxrwx  8 [B]web2_AnyUser[/B]  web2 4096 Feb  4 05:16 web_Orginal
    
    
    now i try to use exec() function in the php file to change the ower from apache to web2_AnyUser and the group from apache to web2 using this code in the php file:

    PHP:
    # PHP CODE:
    # TO CHANGE OWERSHIP:
    exec('chown -R web2_AnyUser /var/www/web2/web',$ouput,$result);
    exec('chgrp -R web2 /var/www/web2/web',$ouput,$result);


    .
    i dont get any errors, and the value of $result = 1

    so when i go to the shell, i do an ls -la and it does not change the owership of the web/ directory, it still shows apache

    what i want to acheive is to change the owershipt to look like this:

    Code:
    command: ls -la
    
    OUTPUT:
    drwxrwxrwx  8 [B]web2_AnyUser[/B]  web2 4096 Feb  4 05:16 web
    drwxrwxrwx  8 [B]web2_AnyUser[/B]  web2 4096 Feb  4 05:16 web_Orginal
    do you have any suggestions. i think you are my best resource for this. i was looking at your code in /root/ispconfig/scripts/lib/config.lib.php and it shows this code on line 690:

    PHP:
      if($user["user_admin"]){
        
    //exec("usermod -G web".$web_doc_id." ".$user_username."");
        // alten admin herausfinden
        
    $old_admin_uid fileowner($web_path);
        
    $mod->system->usermod($user_username"web".$web_doc_id);
        
    exec("chown $user_username $web_path &> /dev/null");
        
    //exec("chown $user_username $web_path/cgi-bin &> /dev/null");
        
    exec("chown -R --from=$old_admin_uid $user_username $web_path/cgi-bin &> /dev/null");
        
    exec("chown $user_username $web_path/log &> /dev/null");
        
    exec("chown $user_username $web_path/ssl &> /dev/null");
        
    exec("chown $user_username $web_path/user &> /dev/null");
        
    //exec("chown $user_username $web_path/web &> /dev/null");
        
    exec("chown -R --from=$old_admin_uid $user_username $web_path/web &> /dev/null");




    .
    i guess im trying to do the same, but im not sure how you did it.

    if you have any suggestion, please advise,

    Thanks for all your support
     
  2. falko

    falko Super Moderator ISPConfig Developer

    Can you become the apache user with the su command and run the commands
    Code:
    chown -R web2_AnyUser /var/www/web2/web
    chgrp -R web2 /var/www/web2/web
    ? Do you get any errors?
     
  3. bigger_travis

    bigger_travis New Member

    i sent this command:
    Code:
    [root@testvirtual ~]# su apache
    This account is currently not available.
    
    i do get an error: "This account is currently not available."
     
    Last edited: Feb 6, 2010
  4. falko

    falko Super Moderator ISPConfig Developer

    What's the output of
    Code:
    grep apache /etc/passwd
    ?
     
  5. jnsc

    jnsc rotaredoM Moderator

    try
    Code:
    su -s /bin/bash apache
     
  6. bigger_travis

    bigger_travis New Member

    To jnsc:
    ok, i send this command now:

    Code:
    [root@testvirtual ~]# su -s /bin/bash apache
    bash-3.2$ whoami
    apache
    bash-3.2$
    im not getting any error anymore. i do see my my prompt changed from # to $ - so that means i can change user to apache.

    #########################################################################

    To falko:
    so i send the chown command:

    Code:
    bash-3.2$ chown web2_AnyUser /var/www/web2/web/
    chown: changing ownership of `/var/www/web2/web/': Operation not permitted
    RESULTS: Yes, i do get error = "Operation not permitted"

    #########################################################################

    To falko:
    COMMAND RESULTS:
    Code:
    [root@testvirtual ~]# grep apache /etc/passwd
    apache:x:48:48:Apache:/var/www:/sbin/nologin
    Please Advise, Thanks
     
    Last edited: Feb 7, 2010
  7. falko

    falko Super Moderator ISPConfig Developer

    What's the output of
    Code:
    ls -la /var/www/web2/web/
    ?
     
  8. bigger_travis

    bigger_travis New Member

    Code:
    [root@testvirtual www]# ls -la /var/www/web2/web/
    total 76
    drwxrwxrwx 9 apache   apache  4096 Feb  4 04:00 .
    drwxrwxrwx 9 web2_AnyUser web2   4096 Feb  4 04:00 ..
    -rw-rw-rw- 1 apache   apache   237 Apr 17  2009 .htaccess
    drwxrwxrwx 2 apache   apache  4096 May 10  2009 images
    drwxrwxrwx 2 apache   apache  4096 May 10  2009 includes
    -rw-rw-rw- 1 apache   apache   565 Apr 17  2009 index.php
    -rw-rw-rw- 1 apache   apache  1176 May 10  2009 INSTALL.txt
    -rw-rw-rw- 1 apache   apache  2918 Apr 17  2009 oswallpaper-footer.php
    -rw-rw-rw- 1 apache   apache  5202 Apr 17  2009 oswallpaper-header.php
    -rw-rw-rw- 1 apache   apache 15687 May 10  2009 OSWallpaper.sql
    drwxrwxrwx 2 apache   apache  4096 May 10  2009 pages
    drwxrwxrwx 2 apache   apache  4096 May 10  2009 recaptcha
    drwxrwxrwx 3 apache   apache  4096 May 10  2009 theme
    drwxrwxrwx 8 apache   apache  4096 May 10  2009 wallpapers
     
  9. falko

    falko Super Moderator ISPConfig Developer

    Hm, looks ok. I don't know why it doesn't work. :(
     
  10. jnsc

    jnsc rotaredoM Moderator

    It's only possible to execute the chown command from the root user. Here is a very interesting reference post http://www.ale.org/pipermail/ale/2007-November/099333.html, but as it's quite long, I will post the part that is interesting for us.

     

Share This Page