[wp-trac] [WordPress Trac] #49218: WP_Filesystem_SSH2 ssh2_sftp_mkdir permissions
WordPress Trac
noreply at wordpress.org
Fri Jan 17 13:40:29 UTC 2020
#49218: WP_Filesystem_SSH2 ssh2_sftp_mkdir permissions
----------------------------+-----------------------------
Reporter: bbrdaric | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Filesystem API | Version:
Severity: normal | Keywords:
Focuses: |
----------------------------+-----------------------------
Hello,
I would like to follow up on ticket:10304, especially comments
ticket:10304#comment:1 and ticket:10304#comment:4
When installing plugins from wp-admin using SSH2 connection, I am
observing unexpected behavior regarding plugin folder permissions.
My installations are mostly on VPS servers, and I am counting on group
writeable permissions ({{{775}}} for folders and {{{664}}} for files).
eg. on Debian Linux ({{{bbrdaric}}} being my user account, and {{{wp}}}
being group with members {{{www-data}}} and {{{bbrdaric}}} )
{{{
# bbrdaric @ sandbox in /var/www/wordpress/wp-content
$ la
-rw-rw-r-- 1 bbrdaric wp 28 Jan 8 2012 index.php
drwxrwsr-x 4 bbrdaric wp 4.0K Jan 16 15:10 plugins
drwxrwsr-x 6 bbrdaric wp 4.0K Dec 18 23:16 themes
drwxrwsr-x 2 bbrdaric wp 4.0K Jan 16 15:10 upgrade
}}}
{{{
# bbrdaric @ sandbox in /var/www/wordpress/wp-content/plugins
$ la
drwxrwxr-x 4 bbrdaric wp 4.0K Dec 18 23:16 akismet
-rw-rw-r-- 1 bbrdaric wp 28 Jun 5 2014 index.php
}}}
if I install plugin {{{hello-dolly}}} using SSH2 connection, the result is
{{{
# bbrdaric @ sandbox in /var/www/wordpress/wp-content/plugins
$ la
drwxrwxr-x 4 bbrdaric wp 4.0K Dec 18 23:16 akismet
drwxr-sr-x 2 bbrdaric wp 4.0K Jan 16 15:10 hello-dolly
-rw-rw-r-- 1 bbrdaric wp 28 Jun 5 2014 index.php
}}}
but I expect {{{hello-dolly}}} folder permissions like this
{{{
drwxrwxr-x 2 bbrdaric wp 4.0K Jan 16 15:10 hello-dolly
}}}
So then I tried installing again, but this time using WP-CLI and got this
{{{
# bbrdaric @ sandbox in /var/www/wordpress/wp-content/plugins [14:01:51]
$ wp plugin install hello-dolly
Installing Hello Dolly (1.7.2)
...
Unpacking the package...
Installing the plugin...
Plugin installed successfully.
Success: Installed 1 of 1 plugins.
# bbrdaric @ sandbox in /var/www/wordpress/wp-content/plugins
$ la
drwxrwxr-x 4 bbrdaric wp 4.0K Dec 18 23:16 akismet
drwxrwxr-x 2 bbrdaric wp 4.0K Jan 17 14:02 hello-dolly
-rw-rw-r-- 1 bbrdaric wp 28 Jun 5 2014 index.php
}}}
Well this was what I expected at the first place, but it raised question
why are directory permissions different when installing using wp-admin and
SSH2?
Then I looked up, started debugging and learned how is plugin managment
done, and also grasped a bit of permissions management and Filesystem API
In the process I discovered r25739 which clarified permissions to me, but
I wasn't sure if this is applied when using SSH2 connection.
It turned that yes, {{{FS_CHMOD_DIR}}} is used in {{{WP_Filesystem_SSH2}}}
for creating folders, but no, this permissions are not applied as
expected.
This is because {{{ssh2_sftp_mkdir}}} function is for some reason affected
by system {{{umask}}} settings, and the problem is this isn't documented
in the php documentation.
On the most Linux distributions, {{{umask}}} is set to {{{022}}} that will
effectively cut group write permissions when creating files and folders,
which means permissions won't be applied as wanted.
Luckily, the fix is really simple and has no side effects. In {{{class
WP_Filesystem_SSH2}}}, in {{{mkdir}}} method, just after creating folder,
permissions need to be set explicilty using a {{{ssh2_sftp_chmod}}}
function which will set proper permissions as intended.
I will try to add PR/patch when I figure out how :)
Regards,
Boris.
--
Ticket URL: <https://core.trac.wordpress.org/ticket/49218>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list