Изменение владельца после переноса файлов сайта в tar-архиве
Опубликовано robot on 30 May 2012 16:05

Бывают случаи, когда нужно распаковать на сервере tar-архив (сделанный на другом сервере), в котором находятся файлы сайта.

В этом случае нужно учитывать, что контейнер tar сохраняет права на файлы такими, какие они были в старой системе. И uid владельца файлов может не совпадать с новой системой.

Возьмем пример - мы загрузили на сайт example.com (владелец этого сайта - системный пользователь с именем ftpuser) архив с сайтом site.tar:

# cd /var/www/vhosts/example.com/httpdocs/

# pwd
/var/www/vhosts/example.com/httpdocs

# ls -la
total 7197
drwxr-x---  2 ftpuser psaserv    1024 May 30 16:50 .
drwxr-xr-x 14 root    root       1024 May 30 16:38 ..
-rw-r--r--  1 root    root    7337109 May 30 16:49 site.tar

Распаковываем архив, и видим его содержимое принадлежит вперемешку пользователям apache и какому-то неизвестному на нашем сервере пользователю с uid 501, а также - есть несколько директорий, принадлежащих apache. Вероятно, в эти директории веб-сервер должен иметь права на запись.

# pwd
/var/www/vhosts/example.com/httpdocs

# tar -xzf site.tar

# ls -la
total 7249
drwxr-x--- 17 ftpuser psaserv    1024 May 30 16:53 .
drwxr-xr-x 14 root    root       1024 May 30 16:38 ..
-rw-r--r--  1     501      80   17816 Dec 12  2009 LICENSE.txt
-rw-r--r--  1     501      80    4244 Sep 25  2011 README.txt
drwxr-xr-x 10     501      80    1024 Apr  2 19:05 administrator
drwxrwxrwx  2 apache  apache     1024 Mar 15 01:49 cache
drwxr-xr-x  2     501      80    1024 Mar 15 01:49 cli
drwxr-xr-x 14     501      80    1024 Apr  2 19:05 components
-rw-rw-rw-  1     501      80    1825 May 28 17:58 configuration.php
-rw-r--r--  1     501      80    3189 Apr  7  2011 htaccess.txt
drwxr-xr-x  4     501      80    1024 Mar 15 01:49 images
drwxr-xr-x  2     501      80    1024 Apr  2 19:05 includes
-rw-r--r--  1     501      80    1319 Apr  1 02:03 index.php
drwxr-xr-x 10     501      80    1024 Mar 15 01:49 installation
-rw-r--r--  1     501      80    1754 Apr  1 02:07 joomla.xml
drwxr-xr-x  5     501      80    1024 Apr  2 19:05 language
drwxr-xr-x  7     501      80    1024 Apr  2 19:05 libraries
drwxrwxrwx  2 apache  apache     1024 Mar 15 01:49 logs
drwxr-xr-x 16     501      80    1024 Apr  2 19:05 media
drwxr-xr-x 26     501      80    1024 Apr  2 19:05 modules
drwxr-xr-x 13     501      80    1024 Apr  2 19:05 plugins
-rw-r--r--  1     501      80     865 Mar 15 01:49 robots.txt
-rw-r--r--  1 root    root    7337109 May 30 16:49 site.tar
drwxr-xr-x  6     501      80    1024 Apr  2 19:05 templates
drwxrwxrwx  2 apache  apache     1024 Mar 15 01:49 tmp
-rw-r--r--  1     501      80    1715 Apr  1 02:03 web.config.txt

Хотя на директории, принадлежащие apache - и так установлены права 777, и мы могли бы попросту рекурсивно поменять владельца всей текущей директории на нашего ftpuser, можно это сделать более красиво, изменив на ftpuser владельца лишь файлов и директорий, которые сейчас принадлежат несуществующему пользователю с uid 501.
Напоминаем, в данной директории сайта под управлением панели Plesk - файлы и директории, принадлежащие FTP-пользователю, должны иметь следующх владельцев:

  • user: ftpuser
  • group: psacln

Как реализовать описанное нерекурсивное изменение владельца:

1. Проверяем, в какой директории мы находимся, проверяем кто является владельцем указанной директории:

# cd /var/www/vhosts/example.com/httpdocs/

# pwd
/var/www/vhosts/example.com/httpdocs

# ls -la /var/www/vhosts/example.com/ | grep httpdocs
drwxr-x--- 17 ftpuser psaserv 1024 May 30 16:53 httpdocs

2. Находясь внутри изменяемой директории httpdocs - выполняем команду, которая найдет все файлы и директории с владельцем 501 и изменит их владельца на ftpuser:psacln:

# pwd
/var/www/vhosts/example.com/httpdocs

# find ../httpdocs/ -user 501 -exec chown ftpuser:psacln {} \;

3. Проверяем, что все получилось успешно:

# ls -la
total 7249
drwxr-x--- 17 ftpuser psaserv    1024 May 30 16:53 .
drwxr-xr-x 14 root    root       1024 May 30 16:38 ..
-rw-r--r--  1 ftpuser psacln    17816 Dec 12  2009 LICENSE.txt
-rw-r--r--  1 ftpuser psacln     4244 Sep 25  2011 README.txt
drwxr-xr-x 10 ftpuser psacln     1024 Apr  2 19:05 administrator
drwxrwxrwx  2 apache  apache     1024 Mar 15 01:49 cache
drwxr-xr-x  2 ftpuser psacln     1024 Mar 15 01:49 cli
drwxr-xr-x 14 ftpuser psacln     1024 Apr  2 19:05 components
-rw-rw-rw-  1 ftpuser psacln     1825 May 28 17:58 configuration.php
-rw-r--r--  1 ftpuser psacln     3189 Apr  7  2011 htaccess.txt
drwxr-xr-x  4 ftpuser psacln     1024 Mar 15 01:49 images
drwxr-xr-x  2 ftpuser psacln     1024 Apr  2 19:05 includes
-rw-r--r--  1 ftpuser psacln     1319 Apr  1 02:03 index.php
drwxr-xr-x 10 ftpuser psacln     1024 Mar 15 01:49 installation
-rw-r--r--  1 ftpuser psacln     1754 Apr  1 02:07 joomla.xml
drwxr-xr-x  5 ftpuser psacln     1024 Apr  2 19:05 language
drwxr-xr-x  7 ftpuser psacln     1024 Apr  2 19:05 libraries
drwxrwxrwx  2 apache  apache     1024 Mar 15 01:49 logs
drwxr-xr-x 16 ftpuser psacln     1024 Apr  2 19:05 media
drwxr-xr-x 26 ftpuser psacln     1024 Apr  2 19:05 modules
drwxr-xr-x 13 ftpuser psacln     1024 Apr  2 19:05 plugins
-rw-r--r--  1 ftpuser psacln      865 Mar 15 01:49 robots.txt
-rw-r--r--  1 root    root    7337109 May 30 16:49 site.tar
drwxr-xr-x  6 ftpuser psacln     1024 Apr  2 19:05 templates
drwxrwxrwx  2 apache  apache     1024 Mar 15 01:49 tmp
-rw-r--r--  1 ftpuser psacln     1715 Apr  1 02:03 web.config.txt

В результате мы не затронули файлы и директории, которые принадлежали apache, изменив лишь владельца файлов, принадлежавших до этого другому ftp-пользователю.

(2 голос(а))
Эта статья помогла
Эта статья не помогла