LINUX.ORG.RU

Сообщения manik207

 

Sed - Как добавить строку с текстом ПЕРЕД найденным выражением

Добрый вечер, есть блок с инфой в конфиге. Выглядит так:

#anketa143.domen.ru#
backend anketa143.domen.ru
server server1 192.168.1.143:80

Нужно добавить перед server server1 192.168.1.143:80 строку, чтобы блок выглядел так:

#anketa143.domen.ru#
backend anketa143.domen.ru
redirect scheme https if !{ ssl_fc }
server server1 192.168.1.143:80

Нужно вставить строку именно перед найденной строкой, а не после, т.к. backend anketa143.domen.ru - не уникальная инфа в конфиге и встречается в документе в других местах.

Нашла, как добавить пустую строку перед найденным:

sed -i '/server server1 192.168.1.143:80/{x;p;x;} ' /etc/haproxy/haproxy.cfg

Нигде не могу найти, как реализовать задуманное.

 

manik207
()

Проброс IP-адреса клиента на nginx через haproxy

Добрый вечер, есть HAProxy в качестве балансера, который слушает порты 80 и 443 и направляет на разные бекенды на nginx'е.

При этом сайты на nginx, видят, что запрос пришел с IP-адреса балансера. И в логах только IP балансера.

Конфиг HAProxy:

 [root@140 ~]# cat /etc/haproxy/haproxy.cfg
global
  log         127.0.0.1 local2    
  chroot      /var/lib/haproxy    
  pidfile     /var/run/haproxy.pid
  maxconn     10000
  user        haproxy             
  group       haproxy
  daemon                          
  stats socket /var/lib/haproxy/stats
#---------------------------------------------------------
defaults
  mode     http   
  log      global  
  option   httplog   
  option   dontlognull
  option   http-server-close
  option   redispatch 
  retries  3 
  timeout http-request    10s
  timeout queue           1m
  timeout connect         10s        
  timeout client          1m
  timeout server          1m
  timeout http-keep-alive 10s
  timeout check           10s
  maxconn                 3000
#----------------------------------
# Конфигурация фронтенда http
#----------------------------------
frontend http_proxy
bind 192.168.1.140:80
option forwardfor header X-Real-IP
default_backend localhost

# 143.domen.ru
redirect scheme https code 301 if { hdr_end(host) -i 143.domen.ru } !{ ssl_fc }

# 180.domen.ru
acl 180.domen.ru hdr_dom(host) -i 180.domen.ru
use_backend 180.domen.ru if 180.domen.ru

#----------------------------------
# Конфигурация фронтенда https
#----------------------------------
frontend https-in
mode tcp
option tcplog
bind 192.168.1.140:443
option socket-stats
# option forwardfor header X-Real-IP
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
http-request add-header X-Forwarded-Proto https if { ssl_fc }

# 143.domen.ru
use_backend 143.domen.ru if { req_ssl_sni -i 143.domen.ru }

#----------------------------------
# Бекенды
#----------------------------------
backend localhost
server server1 127.0.0.1:8070

# 180.domen.ru
backend 180.domen.ru
server 180.domen.ru 192.168.1.180:80

# 143.domen.ru
backend 143.domen.ru
mode tcp
stick-table type binary len 32 size 30k expire 30m
acl clienthello req_ssl_hello_type 1
acl serverhello rep_ssl_hello_type 2
tcp-request inspect-delay 5s
tcp-request content accept if clienthello
tcp-response content accept if serverhello
stick on payload_lv(43,1) if clienthello
stick store-response payload_lv(43,1) if serverhello
option ssl-hello-chk
server stn_container 192.168.1.143:443

Нашла, что проброс нужно делать опцией

 option forwardfor header X-Real-IP

Но она работает только в режиме mode http, а у меня ssl ходит по tcp, сертификаты хранятся на nginx, т.е. HAProxy получает шифрованный запрос, перенаправляет его на бекендный nginx, а nginx уже морочается с сертификатами.

Как тут приделать опцию, чтобы nginx знал ip клиента, а не HAProxy?

 , ,

manik207
()

Настройка анонимного подключения к svn по http

Добрый вечер. Есть настроенный доступ к svn-серверу через http. Настроен mod-dav-svn. Авторизация - через апач. Конфиг апача для этого сайта:

subversion.conf
<VirtualHost *:80>
    ServerName www.svn143.domen.ru
    ServerAlias svn143.domen.ru
    <Location />
        DAV svn
        SVNParentPath /var/www/svn143.domen.ru
        SVNListParentPath off
        AuthType Basic
        AuthName "SVN-143"
        AuthUserFile /etc/svnusers.SVN-143
        AuthzSVNAccessFile /etc/svnaccess.SVN-143
       Require valid-user
     </Location>
    ErrorLog "/var/www/svn143.domen.ru_apache_error.log"
    CustomLog "logs/svn143.domen.ru-access.log" common
 </VirtualHost>

Сейчас все репозитории создаю в директории /var/www/svn143.domen.ru, права на репозитории задаю в AuthzSVNAccessFile /etc/svnaccess.SVN-143.

Как отключить авторизацию, не сильно меняя конфиг?

Что сделано:

1. Файл /etc/svnaccess.SVN-143 приведен к виду:

[/]
*=rw

2. Для теста закомменчена строка в subversion.conf:

# AuthzSVNAccessFile /etc/svnaccess.SVN-143

Авторизационное окно выскакивает.

Как его отключить?

 , ,

manik207
()

Настройка двух фрондендов на HAProxy, для 80 и 443 портов

Добрый день. Есть haproxy, настроен на 80 порту как балансировщик. Перенаправляет запросы разных доменов на разные машины.

Задача: хапрокси принимает запросы и на 80-й, и на 443-й порт и перенаправляет на разные хосты. При этом не обрабатывает ssl-запросы, а перекидывает на бекэнды (сертификаты на бекэндах и находятся)

С конфигом хапрокси перенаправление работает, но сам хапрокси ругается при проверке статуса.

Конфиг:

global
       log 127.0.0.1 local2 notice
       chroot /var/lib/haproxy
       user haproxy
       group haproxy
       daemon
       maxconn 10000
       ca-base /etc/ssl/certs
       crt-base /etc/ssl/private
       ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
       ssl-default-bind-options no-sslv3
defaults
       log     global
       mode    http
       option  httplog
       option  dontlognull
       retries 3
       option redispatch
       maxconn 10000
       option httpclose
       option forwardfor
       timeout connect 5000
       timeout client  50000
       timeout server  50000
       stats enable
       stats uri /haproxy
       stats realm Haproxy\ Statistics
       stats auth admin:123456
       stats refresh 30s
####### Описание секции frontend #######
frontend http-in
        bind 192.168.1.140:80
        redirect scheme https code 301 if { hdr_end(host) -i bbb159.domen.ru } !{ ssl_fc }
        acl othersite hdr(host) -i disk.domen.ru
        use_backend disk.domen if othersite

frontend https-in
      mode tcp
      option tcplog
      bind 192.168.1.140:443
        option socket-stats
        tcp-request inspect-delay 5s
        tcp-request content accept if { req_ssl_hello_type 1 }
        use_backend stn if { req_ssl_sni -i bbb159.domen.ru }
 default_backend stn
#####################################################################
backend stn
  mode tcp
  stick-table type binary len 32 size 30k expire 30m
  acl clienthello req_ssl_hello_type 1
  acl serverhello rep_ssl_hello_type 2
  tcp-request inspect-delay 5s
  tcp-request content accept if clienthello
  tcp-response content accept if serverhello
  stick on payload_lv(43,1) if clienthello
  stick store-response payload_lv(43,1) if serverhello
  option ssl-hello-chk
  server stn_container 192.168.1.159:443  ## note that when doing mode tcp, you do not need the ending `ssl`
#disk.domen.ru#
backend disk.domen
server server1 192.168.1.180:80

Ругается так:

янв 20 15:12:51 conf140 haproxy-systemd-wrapper[16109]: [WARNING] 019/151251 (16111) : config : 'stats' statement ignored for frontend 'https-in' as it requires HTTP mode.
янв 20 15:12:51 conf140 haproxy-systemd-wrapper[16109]: [WARNING] 019/151251 (16111) : config : 'option forwardfor' ignored for frontend 'https-in' as it requires HTTP mode.
янв 20 15:12:51 conf140 haproxy-systemd-wrapper[16109]: [WARNING] 019/151251 (16111) : config : 'stats' statement ignored for backend 'stn' as it requires HTTP mode.
янв 20 15:12:51 conf140 haproxy-systemd-wrapper[16109]: [WARNING] 019/151251 (16111) : config : 'option forwardfor' ignored for backend 'stn' as it requires HTTP mode.

В каких строках исправить ошибки, подскажите.

 

manik207
()

Как правильно создать пользователя в Ubuntu Server 16.04 с домашней директорией

Добрый день. Нужно создать пользователя для конкретного сервиса. До этого использовала Centos, тут столкнулась с непонятностями. Тапками не бейте.

Вопрос один: Как создать пользователя, чтобы при его создании создавалась директория с его настройками?

1. Создаю пользователя командой:

 useradd -G sudo -s /bin/bash -d /home/t5 t5

Проверяю успешное создание командой:

cat /etc/passwd |grep t5
t5:x:1001:1001::/home/t5:/bin/bash

Домашняя директория при этом НЕ создается. Это норма для Ubuntu?

2. Создаю директорию для следующего пользователя руками, потом создаю самого пользователя.

 mkdir /home/r4 && useradd -G sudo -s /bin/bash -d /home/r4 r4

Директория «числится» домашней в файле /etc/passwd, но по факту - владелец root.

cat /etc/passwd |grep r4
r4:x:1002:1002::/home/r4:/bin/bash
root@comp:/home# ls -la
total 16
drwxr-xr-x  4 root root 4096 Jan 17 14:54 .
drwxr-xr-x 23 root root 4096 Jan 17 14:19 ..
drwxr-xr-x  4 user user 4096 Jan 17 13:34 user
drwxr-xr-x  2 root root 4096 Jan 17 14:54 r4

3. Задаю пароль пользователю и авторизуюсь им по ssh. В консольной строке putty отображается сообщение:

Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-109-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 packages can be updated.
0 updates are security updates.

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.


The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
$
Проверяю, где нахожусь и что видно (в начале строки нет ни имени пользователя, ни имени компа):
$ pwd
/home/r4
$ ls -la
итого 8
drwxr-xr-x 2 root root 4096 янв 17 14:54 .
drwxr-xr-x 4 root root 4096 янв 17 14:54 ..
$

4. Проверила, какие параметры заданы по умолчанию для создания пользователя, неизменны с установки системы:

root@comp]:/home# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no

Подскажите, как правильно создавать пользователя?

 , ,

manik207
()

Права пользователя через sudoers на директорию в home

Пробую настроить проверку AIDE с одного сервера на клиентах через прилагающийся в документации скрипт sshaide.sh.

Делаю по мануалу:https://kezhong.wordpress.com/2016/11/23/building-a-centralized-aide-server-o... только на Centos 7.

По мануалу создаю на удаленном клиенте пользователя, в /etc/sudoers прописываю ему права:

aideuser ALL=(ALL) NOPASSWD: /home/aideuser/*/aide, /bin/chmod 644 /home/aideuser/*/aide.newdb

При выполнении скрипта (скрипт большой, команд много), появляется ошибка:

scp: /home/aideuser/furfuramid.12510/aide.newdb: Permission denied

Если на удаленном компе поменять запись в /etc/sudoers для пользователя на:

aideuser ALL=(ALL) NOPASSWD: /home/aideuser/*/aide, /bin/chmod 774 /home/aideuser/*/aide.newdb

При запуске скрипта появляется запрос пароля и после него ошибка с указанием на права:

[sudo] пароль для aideuser:

Sorry, user aideuser is not allowed to execute '/bin/chmod 644 /home/aideuser/indispensableness.12573/aide.newdb' as root on name_client_comp

Подскажите, где ошибка? В правах на директорию, в правах sudoers?

 , ,

manik207
()

Как правильно через sed поменять значение на значение переменной

Есть конфиг, в нем нужно поменять два значения:

database=file:@@{DBDIR}/aide.db.gz

database_out=file:@@{DBDIR}/aide.db.new.gz

Нужно значение aide.db.gz заменить на aide.db.20171212.gz, т.е. вчерашнюю дату подставить, а aide.db.new.gz заменить на aide.db.20171213.gz, подставить сегодняшнюю дату.

Т.е. результат должен быть таким:

database=file:@@{DBDIR}/aide.db.20171212.gz

database_out=file:@@{DBDIR}/aide.db.20171213.gz

Насколько я поняла, должно сначала выводится сегодняшнее число через

 date +%Y%m%d
А после этот вывод добавить в команду sed:
sed -i "s/aide.db.new.gz/aide.db.{$date +%Y%b%d}.gz/g" /etc/file.conf

Пробовала через единую строку команды, через экранирование кавычками, апострофами, в итоге, если переменная читается, в значении получается aide.db..gz или

 sed -i "s/aide.db.new.gz/aide.db.`$date +%Y%b%d`.gz/g" /etc/file.conf
-bash: +%Y%b%d: команда не найдена

sed -i "s/aide.db.new.gz/aide.db.${date +%Y%b%d}.gz/g" /etc/file.conf
-bash: s/aide.db.new.gz/aide.db.${date +%Y%b%d}.gz/g: bad substitution

Как-то можно через echo вывести дату, обозначить ее за переменную (в командной строке), а потом ее подставить во второе значение в команде sed?

 ,

manik207
()

Как настроить отправку почты с Linux на реальный почтовый ящик

Поднят Centos 7 на виртуалке, за шлюзом. У Centos доступ в инет есть. Обновляется, скачивает.

Хочу настроить отправку сообщений на свой емайл на яндексе (есть и майл, и gmail для проверки).

Установила:

yum install mailx sendmail -y

Отправляю:

echo "Текст сообщения" | mail -s "Тема" real_mail@yandex.ru

Письмо не приходит. В логах:

tail /var/log/maillog

tail maillog
Nov 30 16:23:52 [localhost] sendmail[16768]: vAUDNqPa016768: from=root, size=249, class=0, nrcpts=1, msgid=<201711301323.vAUDNqPa016768@conf125>, relay=root@localhost
Nov 30 16:23:52 [localhost] postfix/smtpd[16769]: connect from localhost[127.0.0.1]
Nov 30 16:23:52 [localhost] postfix/smtpd[16769]: 515FD197160: client=localhost[127.0.0.1]
Nov 30 16:23:52 [localhost] postfix/cleanup[16772]: 515FD197160: message-id=<201711301323.vAUDNqPa016768@conf125>
Nov 30 16:23:52 [localhost] postfix/qmgr[1060]: 515FD197160: from=<root@conf125.localdomain>, size=668, nrcpt=1 (queue active)
Nov 30 16:23:52 [localhost] sendmail[16768]: vAUDNqPa016768: to=real_mail@yandex.ru, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30249, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (Ok: queued as 515FD197160)
Nov 30 16:23:52 [localhost] postfix/smtpd[16769]: disconnect from localhost[127.0.0.1]
Nov 30 16:23:52 [localhost] postfix/smtp[16773]: 515FD197160: lost connection with mx.yandex.ru[77.88.21.89] while receiving the initial server greeting
Nov 30 16:23:52 [localhost] postfix/smtp[16773]: 515FD197160: lost connection with mx.yandex.ru[93.158.134.89] while receiving the initial server greeting
Nov 30 16:23:52 [localhost] postfix/smtp[16773]: 515FD197160: lost connection with mx.yandex.ru[87.250.250.89] while receiving the initial server greeting
Nov 30 16:23:52 [localhost] postfix/smtp[16773]: 515FD197160: lost connection with mx.yandex.ru[213.180.193.89] while receiving the initial server greeting
Nov 30 16:23:52 [localhost] postfix/smtp[16773]: connect to mx.yandex.ru[2a02:6b8::89]:25: Network is unreachable
Nov 30 16:23:52 [localhost] postfix/smtp[16773]: 515FD197160: to=<real_mail@yandex.ru>, relay=none, delay=0.37, delays=0.11/0.01/0.25/0, dsn=4.4.1, status=deferred (connect to mx.yandex.ru[2a02:6b8::89]:25: Network is unreachable)

Почтовый ящик указываю реальный, только для форума заменила на real_mail.

Как сделать, чтобы письмо дошло?

Порты ведь для этого открывать не надо, если только исходящая почта нужна?

 

manik207
()

В mediawiki не запускается MapEditor при установленном Maps

Использую mediawiki 1.27. (php 5.5). Устанавливаю extentions Maps через composer.

Расширение отображается в списке установленных, и сами карты отображаются в статьях вики. Тег {{#display_map:}} работает.

Но! Нет страницы Служебная:MapEditor.

Обновляю через:

php maintenance/update.php

Обновление выдает ошибку:

PHP Notice:  Undefined index: hash in /var/www/wiki/includes/libs/composer/ComposerLock.php on line 19

mediawiki/maps: 4.2.1 installed, * required.

mediawiki/semantic-media-wiki: 2.5.5 installed, ^2.5 required.

Error: your composer.lock file is not up to date. Run "composer update" to install newer dependencies

При обновлении с ключом --skip-external-dependencies (игнорировать внешние зависимости), обновление проходит, но Служебная:MapEditor не появляется...

Куда копать, подскажите?

 ,

manik207
()

Как удалить несколько строк из файла блоком, включая строкунад найденным выражением

Есть настроенный апач с несколькими сайтами. Сайты прописаны в httpd-vhost.conf

Файл имеет вид:

 <VirtualHost *:80>
    ServerName www.domen1.ru
    ServerAlias domen1.ru
    ServerAdmin admin@domen1.ru
    DocumentRoot /var/www/domen1
    ErrorLog "/var/www/domen1/log/apache_error.log"
    CustomLog "logs/domen1-access.log" common
 </VirtualHost>

 <VirtualHost *:80>
    ServerName www.domen2.ru
    ServerAlias domen2.ru
    ServerAdmin admin@domen2.ru
    DocumentRoot /var/www/domen2
    ErrorLog "/var/www/domen2/log/apache_error.log"
    CustomLog "logs/domen2-access.log" common
 </VirtualHost>

 <VirtualHost *:80>
    ServerName www.domen3.ru
    ServerAlias domen3.ru
    ServerAdmin admin@domen3.ru
    DocumentRoot /var/www/domen3
    ErrorLog "/var/www/domen3/log/apache_error.log"
    CustomLog "logs/domen3-access.log" common
 </VirtualHost>

Какой командой можно удалить из командной строки блок с записью, зная имя домена?

Ближайшая аналогичная задача решалась командой sed. Там надо было удалить блок от идентификатора до конца блока, завершаемого пустой строкой.

sed -i '/\[identificator\]/,/^$/'d /file.name
В данном случае, проблема в том, что все блоки начинаются одинаково, а идентификатор находится во второй строке блока.

 

manik207
()

Как удалить несколько строк из файла блоком

Есть настроенная samba, несколько пользователей, у каждого своя директория и свои права на неё. Конфиг имеет вид:

...
[u001]
path = /media/u001
valid users = @u001
guest ok = no
browseable = no
writable = yes
read only = no
create mask = 0777
directory mask = 0777

[u002]
path = /media/u002
valid users = u002
guest ok = no
browseable = no
writable = yes
read only = no
create mask = 0777
directory mask = 0777

[u003]
path = /media/u003
valid users = @u003
guest ok = no
browseable = no
writable = yes
read only = no
create mask = 0777
directory mask = 0777
Задача: при удалении пользователя почистить конфиг samba командой. Пользователей много, строки идентичны.

Т.е. насколько я поняла, нужно сначала найти номер строки с именем пользователя, и после этого удалить строку с найденным номером и 8 строк дополнительно после найденного.

Нашла, что номер строки можно найти:

cat -n /etc/samba/smb.conf|grep u003
    69  [u003]
    70  path = /media/u003
    71  valid users = u003
Стереть строки можно командой (проверено, работает):

sed -i -e '69,77d' /etc/samba/smb.conf

Вопрос:

1. Как в выводе отобразить номер строки именно в заданном формате [u003], grep квадратные скобки игнорит;

2. Как полученный номер строки поместить в sed;

3. Или это делается как-то сильно проще, а я горожу огород?

 , ,

manik207
()

Dockerfile - как задаются переменные

Подскажите по самой логике работы.

Есть веб-приложение, запускаемое с настройками из собственного конфига (админский пароль, доступ до БД и т.д.).

При установке приложение ручками, эти переменные прописываются в конфиг-файле.

Когда я упаковываю образ через докер-файл, то могу указать через ENV и EXPOSE переменные среды. А потом при запуске контейнера эти ранее указанные переменные прокинуть.

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

Собственно, вопрос. Где и как задать порт (и другие переменные конфига), чтобы их можно было указывать при запуске контейнера.

 

manik207
()

Редирект в .htaccess

Есть сайт на поддомене:

subdomen.domen1.ru
Нужно установить правило, запрещающее хотлинки на картинки со всех сайтов, за исключением самого сайта domen1.ru (со всеми поддоменами) и с разрешённых сайтов domen2.ru и domen3.ru.

При запросе картинки хотлинком с «чужого» сайта - должна показываться картинка-заглушка image1.jpg

Единственное, что нахожу - это как закрыться от хотлинков на домене domen1.ru. Это выглядит так:

#При помощи этих правил мы заставляем сервер проверять откуда пришёл запрос на нашу фотку —
#если со страниц нашего сайта, он отдаёт её пользователю. Если с «вражеского» — 
#то показывает личерам какую-нибудь обидную картинку.
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?domen1\.ru/ [NC]
RewriteCond %{HTTP_REFERER} !^$
#Замените /images/nohotlink.jpg на название вашей картинки с лозунгом «личер идёт на…»
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]

Как это оформить в .htaccess?

 

manik207
()

Как отправить образ docker’а в свой аккаунт на hub.docker.com

Стенд – убунту 16.04 сервер, установлен docker. Есть аккаунт на hub.docker.com вида user_docker.

Создан образ для отправки в докерхаб вида image_my.

В командной строке авторизуюсь на hub.docker.com (если правильно поняла команду):

docker login -u user_docker
Password:
Login Succeeded
Отправляю свой образ на свой аккаунт:
docker push image_my

The push refers to a repository [docker.io/library/image_my]
c147875a0830: Preparing
08ed54e4f134: Preparing
49907af65b0a: Preparing
4589f96366e6: Preparing
b97229212d30: Preparing
cd181336f142: Waiting
0f5ff0cf6a1c: Waiting
denied: requested access to the resource is denied
По всем инструкциям, нужно перед образом указать логин на докерхабе. Указываю – получаю следующее:
docker push user_docker/image_my

The push refers to a repository [docker.io/user_docker/image_my]
An image does not exist locally with the tag: user_docker/image_my 

Как всё-таки отправить образ на докерхаб?

 

manik207
()

Как правильно указать PATH для выполнения rake, если Redmine и ruby установлены от имени пользователя

Стенд: Centos7, от имени пользователя redmine0 в директорию /opt/redmine установлен Redmine. Ruby также установлен из-под пользователя через rvm в домашнюю директорию.

Настраиваю создание задач из почты, нужно от имени пользователя выполнить команду:

rake -f /opt/redmine/Rakefile redmine:email:receive_imap host=imap.yandex.ru port=993 ssl=YES username=*** password=*** project=mail tracker=bug RAILS_ENV=production allow_override=project,tracker,status,category,priority priority=★★★★ no_permission_check=1 unknown_user=accept delete_unprocessed=1

Из командной строки всё работает замечательно, а вот в кроне (пользовательском) выдает ошибку:

...
/bin/sh: rake: команда не найдена

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

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Когда ставила Redmine от рута, этот путь работал. Подскажите, как адаптировать PATH под пользователя, чтобы rake выполнялся?

Пробовала:

1. Загнать команду в крон рута, так рут даже команды не знает

-bash: rake: команда не найдена

2. Указать путь до rvm

PATH=/home/redmine0/.rvm/scripts/rvm
- команда rake не найдена

 ,

manik207
()

Как отобразить содержимое одной директории сайта по другому адресу этого же домена

Есть сайт на апаче, управляется CMS. По адресу

www.domen.ru/index.php/eoitueoit/8784549
лежит контент. Переместить его от оттуда нельзя. Он должен там лежать.

Как сделать, чтобы при запросе http://www.domen.ru/123 отображалось содержимое директории http://www.domen.ru/index.php/eoitueoit/8784549

Редирект настроила, работает, но как-то можно сделать короткий адрес? Директория 123 в корне есть.

Попробовала смонтировать одну директорию в другую - Сентос ругнулся:

mount:  /var/www/domen.ru/index.php/eoitueoit/8784549 is not a block device

 ,

manik207
()

Apache - владелец директории после монтирования encfs, но загрузить файлы - нет прав

Стенд - Сентос 7, веб-сервер (apache) на нем.

Пользовательская информация сайта лежит в директории /var/www/domen.ru/files.

Есть примонтированный webdav в директорию /mnt/yandex (её владелец апач).

Задача: чтобы пользовательская инфа находилась (и обновлялась с сайта) в примонтированной директории /mnt/yandex в шифрованном виде.

Решение:

1. Вебдав монтирую с указанием владельца при монтировании (uid=48, апачевский)

 mount -t davfs https://webdav.yandex.ru /mnt/yandex -o uid=48,gid=48

Т.е. апач - полный владелец.

ls -la /mnt
drwxr-xr-x   3 apache apache  160 апр  5  2012 yandex

2. Далее, монтирую encfs (опробованные варианты и результаты):

2.1. От имени апача:

sudo -u apache  encfs /mnt/yandex /var/www/domen.ru/files
Монтируется без ошибок, при проверке выдаёт:
ls -la /var/www/domen.ru
ls: невозможно получить доступ к /var/www/domen.ru/files: Отказано в доступе
...
-rwxrwxr-x+  1 apache apache 784935 авг 22  2016 HISTORY
-rw-rw-r--+  1 apache apache    177 сен 14 12:25 .htaccess
???????????  ? ?      ?           ?            ? files
...

2.2. От имени апача с указанием под каким uid'ом/gid'ом монтировать шифрованную директорию:

sudo -u apache  encfs /mnt/yandex /var/www/domen.ru/files -o uid=48,gid=48
Результат точно такой же как и в предыдущем варианте.

2.3. От имени root'а:

encfs /mnt/yandex /var/www/domen.ru/files
Монтируется без ошибок, при проверке через ls -la всё примонтировано от апача:
ls -la /var/www/domen.ru
...
-rwxrwxr-x+  1 apache apache 784935 авг 22  2016 HISTORY
-rw-rw-r--+  1 apache apache    177 сен 14 12:25 .htaccess
drwxr-xr-x   3 apache apache    160 апр  5  2012 files
...

Но через браузер загрузить файл через сайт не могу, ошибки вываливаются - нет доступа, снимите блокировку с директории и т.д. Вылезла на профильный сайт поддержки с проблемой, нашла в ответах - прописывайте права для апача...

Стоит отмонтировать шифрованную директорию - загрузка файла проходит замечательно.

2.4. От имени root'а с указанием кто будет владельцем при монтировании:

encfs /mnt/yandex /var/www/domen.ru/files -o uid=48,gid=48
Результат равен предыдущему, владелец - апач, но загрузить файлы - нет прав.

Как решить проблему: апач владелец, но писать файлы в директорию с пользовательской инфой не может?

 , ,

manik207
()

Примонтировать encFS-директорию и указать владельцем user'а

Стенд - Сентос 7, веб-сервер на нем. Есть примонтированная по webdav директория в /mnt/yandex.

В директорию /mnt/yandex нужно складывать зашифрованные файлы одного из сайтов и монтировать командой encFS от имени user'а. Условный путь - /opt/redmine/files.

Т.е. чтобы владельцем директории /opt/redmine/files после монтирования encFS был user, а не root.

Опробовала:

 sudo -u user encfs  /mnt/yandex /opt/redmine/files
Монтирует владельцем root.

Авторизовалась под user'ом, монтирую и от sudo, и без sudo - владелец только root.

Как правильно примонтировать encfs от user'а с указанием владельца?

 , ,

manik207
()

/etc/fstab перестаёт подключать сетевые директории.

Centos 7, настроен веб-сервер на связке апач+инджиникс, стоит несколько сайтов. У сайтов есть директории с пользовательской информацией, которая хранится на файловом сервере в локальной сети. Каждый сайт имеет свой логин/пароль/директорию на файловом сервере. Чтобы не было конфликтов, при монтировании указываю владельцем апач.

Директории с пользовательской информацией монтирую samba и добавляю в автозагрузку через /etc/fstab:

Строка монтирования выглядит так:

//192.168.1.100/dir_na_fileserver /var/www/site/user_dir cif sec=ntlm,username=user_on_fileserver,password=passwd_on_fileserver,uid=48,gid=48 0 0

При установке - всё работает, через день-два-три после очередной перезагрузки не подцепляет сетевую директорию и сервер отказывается запускаться.

Подключаюсь через консоль, вижу:

Welcome to emergency mode! After logging in, type "journalctl -xb" to view system logs, 
"systemctl reboot" to reboot, "systemctl default" or ^D to try again to boot into default mode. 
Give root password for maintenance (or type Control-D to continue): 

После ввода пароля от рута, закомменчиваю строки подключения к сетевым директориям - после перезагрузки всё работает.

Сетевые директории доступны, в ручном режиме монтирую - без ошибок всё монтируется:

mount -t cifs //192.168.1.100/dir_na_fileserver /var/www/site/user_dir -o 
sec=ntlm,username=user_on_fileserver,password=passwd_on_fileserver,uid=48,gid=48

Директории файлового сервера доступны. Проверяю по сети с этими же логинами/паролями.

 ,

manik207
()

Распаковка архива tar.gz от имени определённого пользователя (uid)

Есть Centos 7 (комп1), на нем apache с сайтом. В директории сайта есть директория с пользовательской инфой (user_doc). Её нужно хранить отдельно, но апач должен её читать и записывать в эту директорию.

Есть второй комп (комп2) с samba, сетевой директории которого монтируется пользовательская директории с компа1.

Чтобы не было проблем с правами владельца, монтирую user_doc так:

mount -t cifs //192.168.1.100/dir-samba /var/www/domen.name/user_doc -o sec=ntlm,username=domen.name,password=password,uid=48,gid=48

uid=48 - это апач. Всё работает, апач пишет. Выглядит так:

ls -l /var/www/domen.name

drwxrwxr-x+  8 apache apache   4096 авг 22  2016 docs
drwxrwx---+  2 apache apache      0 авг 30 17:52 user_doc
-rwxrwxr-x+  1 apache apache   7440 авг 22  2016 img_auth.php
drwxrwxr-x+ 62 apache apache   4096 авг 22  2016 includes

Задача: нужно распаковать в директорию user_doc архив из бекапа. Работаю от рута (знаю, что нельзя), из-под него не работает!

Что делаю: кладу архив по scp в /tmp и указываю, куда распаковать. В самом архиве всего два тестовых файла: 1.jpg, 2.jpg. Опцию -p применяю, как при упаковке, так и при распаковке - ошибка:

tar -xpzf /tmp/archive.tar.gz -C /var/www/domen.name/user_doc

tar: ./1.jpg: Невозможно изменить владельца на uid 48, gid 48: Отказано в доступе
tar: ./2.jpg: Невозможно изменить владельца на uid 48, gid 48: Отказано в доступе
tar: .: Невозможно изменить владельца на uid 48, gid 48: Отказано в доступе
tar: Завершение работы с состоянием неисправности с из-за возникших ошибок

Как-то можно выполнить распаковку от имени апача с его uid=48?

 ,

manik207
()

RSS подписка на новые темы