Подготовка и инструкция:
Все команды мы будем выполнять от имени пользователя root, поэтому мы не будем использовать в командах sudo для повышения прав, если вы выполняете под своим пользователям добавляйте sudo в начале команды.
1 |
sudo apt-get update |
Необходимо чтобы был установлен mysql server | apache2 | php, если его нет необходимо установить:
1 2 3 4 |
apt-get install mysql-server apt-get install apache2 apt-get install php php-mysql mcrypt php-mcrypt php-curl phpenmod mcrypt && a2enmod ssl && a2enmod rewrite && apt install php-mbstring && service apache2 restart |
Также мы будем использовать Midnight Commander, если у вас его нет необходимо установить следующей командой:
1 2 |
apt-get update apt-get install mc |
Установка пакетов почтового сервера:
* Все команды будут выполняться от имени root, если вы выполняете под своим пользователям добавляйте sudo в начале команды.
1 2 3 4 |
apt-get update apt-get install exim4 exim4-base exim4-config exim4-daemon-heavy apt-get install dovecot-common dovecot-imapd dovecot-pop3d dovecot-mysql apt-get install php-imap |
Создание пользователя для работы с почтой:
1 |
useradd -r -u 1150 -g mail -d /var/vmail -s /sbin/nologin -c 'Virtual Mailbox' vmail |
1 2 3 |
mkdir -p /var/vmail chown vmail:mail /var/vmail chmod 770 /var/vmail |
Создание базы mysql
* Необходимо чтобы был установлен mysql-server, введите команды ниже и пароль от пользователя root в mysql.
1 2 |
mysql -u root -p Enter password: |
* Необходимо заменить MysqlPasswordForMailBase на ваш пароль cгенерированный либо придуманный для пользователя mail в mysql:
1 2 3 |
CREATE DATABASE mail; GRANT ALL PRIVILEGES ON mail.* TO mail@localhost IDENTIFIED BY 'MysqlPasswordForMailBase'; exit |
Устанавливаем postfixadmin систему управления ящиками через веб-интерфейс:
http://postfixadmin.sourceforge.net/
Переходим в директорию
1 |
cd /var/www/ |
* Пример команды скачивания файла в текущую директорию:
1 |
wget https://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-3.1/postfixadmin-3.1.tar.gz/download |
Переименовываем полученный файл в postfixadmin.tar.gz:
1 |
mv download postfixadmin.tar.gz |
Распаковываем файл:
1 |
tar -xzvf /var/www/postfixadmin.tar.gz |
Просмотрим список директорий и файлов в текущей папке:
1 |
ls -l |
Переименовываем папку в postfixadmin, имя вашей папки может отличаться смотрите результат команды ls -l:
1 |
mv postfixadmin-3.1 postfixadmin |
Переходим в директорию и выставляем права 770 и владельца root:www-data, на директорию postfixadmin также нужно выставить такие значения:
1 2 3 4 5 |
chown www-data:www-data /var/www/postfixadmin chmod 770 /var/www/postfixadmin cd /var/www/postfixadmin/ chown -R www-data:www-data . chmod -R 770 * |
Настраиваем apache:
1 2 |
cd /etc/apache2/conf-enabled :>postfixadmin.conf |
Вставляем в файл:
1 2 3 4 5 6 7 |
Alias /postfix /var/www/postfixadmin <Directory "/var/www/postfixadmin"> Options FollowSymLinks DirectoryIndex index.php Require all granted </Directory> |
Перезапускаем Apache:
1 |
service apache2 restart |
Запуск конфигурирования почтового демона exim:
1 |
dpkg-reconfigure exim4-config |
1. Тип конфигурации
интернет-сайт; приём и отправка почты напрямую, используя SMTP
internet site; mail is sent and received directly using SMTP
2. Почтове имя
mydomain.ru
3. Список IP-адресов, с которых Exim ожидает подключение
Оставляем пустым – ждем почту с любых адресов
4. Список доменов получателей
mydomain.ru;mydomain2.ru
5. Домены для релея
Оставляем пустым – не будем релеить почту.
6. IP-адреса, с которых разрешён релей.
Оставляем пустым.
7. Сокращать кол-во DNS-запросов до минимума
Нет
8. Место доставки локальной почты
mbox формат в /var/mail/
9. Разделить конфигурацию на маленькие файлы
Нет
10. Получатель почты, адресованной root и postmaster
root
Копируем в файл exim4.conf содержимое нижнего блока:
Для начала создадим файл:
1 2 |
cd /etc/exim4/ :>exim4.conf |
* Необходимо заменить MysqlPasswordForMailBase на пароль от вашего пользователя mail в mysdl который мы создали выше и заменить mydomain.ru на ваш:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
disable_ipv6=true primary_hostname = mydomain.ru qualify_domain = mydomain.ru qualify_recipient = mydomain.ru hide mysql_servers = localhost/mail/mail/MysqlPasswordForMailBase DOMAIN_QUERY = SELECT domain FROM domain WHERE \ domain='${domain}' AND active='1' domainlist local_domains = ${lookup mysql{DOMAIN_QUERY}} domainlist relay_to_domains = ${lookup mysql{DOMAIN_QUERY}} hostlist relay_from_hosts = localhost:127.0.0.1/8 acl_smtp_rcpt = acl_check_rcpt acl_smtp_data = acl_check_data spamd_address = 127.0.0.1 783 av_scanner = clamd:/var/run/clamav/clamd.ctl daemon_smtp_ports = 25 : 465 never_users = root rfc1413_query_timeout = 0s ignore_bounce_errors_after = 1d timeout_frozen_after = 14d log_selector = \ +all_parents \ +connection_reject \ +incoming_interface \ +lost_incoming_connection \ +received_sender \ +received_recipients \ +smtp_confirmation \ +smtp_syntax_error \ +smtp_protocol_error \ -queue_run begin acl acl_check_rcpt: accept hosts = : deny message = Restricted characters in address domains = +local_domains local_parts = ^[.] : ^.*[@%!/|] deny message = Restricted characters in address domains = !+local_domains local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./ accept local_parts = postmaster domains = +local_domains require verify = sender accept hosts = +relay_from_hosts control = submission require message = relay not permitted domains = +local_domains : +relay_to_domains require verify = recipient accept acl_check_data: warn malware = * message = This message contains a virus ($malware_name). warn spam = root add_header = X-Spam-Flag: YES\n\ X-Spam_score: $spam_score\n\ X-Spam_score_int: $spam_score_int\n\ X-Spam_bar: $spam_bar\n\ X-Spam_report: $spam_report accept begin routers dnslookup: driver = dnslookup domains = ! +local_domains transport = remote_smtp ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 no_more system_aliases: driver = redirect allow_fail allow_defer data = ${lookup mysql{SELECT goto FROM alias WHERE \ address='${quote_mysql:$local_part@$domain}' OR \ address='${quote_mysql:@$domain}'}} dovecot_user: driver = accept condition = ${lookup mysql{SELECT goto FROM \ alias WHERE \ address='${quote_mysql:$local_part@$domain}' OR \ address='${quote_mysql:@$domain}'}{yes}{no}} transport = dovecot_delivery begin transports remote_smtp: driver = smtp dovecot_delivery: driver = pipe command = /usr/lib/dovecot/deliver -d $local_part@$domain message_prefix = message_suffix = delivery_date_add envelope_to_add return_path_add log_output user = vmail address_pipe: driver = pipe return_output address_reply: driver = autoreply begin retry * * F,2h,15m; G,16h,1h,1.5; F,4d,6h begin rewrite begin authenticators auth_plain: driver = plaintext public_name = PLAIN server_prompts = Username:: : Password:: server_condition = ${if crypteq{$auth3}{${lookup mysql{SELECT password FROM \ mailbox WHERE username = '${quote_mysql:$auth2}'}}}{yes}{no}} server_set_id = $auth2 auth_login: driver = plaintext public_name = LOGIN server_condition = ${if crypteq{$auth2}{${lookup mysql{SELECT password FROM \ mailbox WHERE username = '${quote_mysql:$auth1}'}}}{yes}{no}} server_prompts = Username:: : Password:: server_set_id = $auth1 auth_cram_md5: driver = dovecot public_name = CRAM-MD5 server_socket = /var/run/dovecot/auth-client server_set_id = $auth2 |
Копируем в файл /etc/dovecot/dovecot.conf содержимое нижнего блока:
Обнулим содержимое файла:
1 2 |
cd /etc/dovecot/ :>dovecot.conf |
* Необходимо заменить MysqlPasswordForMailBase на пароль от вашего пользователя mail в mysdl который мы создали выше:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
auth_mechanisms = plain login digest-md5 cram-md5 disable_plaintext_auth = no first_valid_gid = 0 first_valid_uid = 1150 info_log_path = /var/log/dovecot.log last_valid_uid = 1150 listen = * log_path = /var/log/dovecot.log mail_location = maildir:/var/vmail/%d/%u mail_privileged_group = mail managesieve_notify_capability = mailto managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date ihave maildir_copy_with_hardlinks = yes passdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } protocols = pop3 imap sieve auth_verbose = yes auth_debug = yes auth_debug_passwords = yes auth_username_format = %Lu service auth { unix_listener auth-client { group = mail mode = 0777 user = vmail } unix_listener auth-master { group = mail mode = 0777 user = vmail } user = root } service imap-login { chroot = login executable = /usr/lib/dovecot/imap-login process_limit = 128 process_min_avail = 3 service_count = 1 user = dovecot vsz_limit = 64 M } service imap { executable = /usr/lib/dovecot/imap } service managesieve-login { chroot = login inet_listener sieve { address = 127.0.0.1 port = 4190 } process_limit = 128 process_min_avail = 3 service_count = 1 user = dovecot vsz_limit = 64 M } service pop3-login { chroot = login executable = /usr/lib/dovecot/pop3-login process_limit = 128 process_min_avail = 3 service_count = 1 user = dovecot vsz_limit = 64 M } service pop3 { executable = /usr/lib/dovecot/pop3 } ssl = no userdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } verbose_proctitle = yes protocol imap { imap_max_line_length = 64 k } protocol pop3 { pop3_uidl_format = %08Xu%08Xv } protocol lda { auth_socket_path = /var/run/dovecot/auth-master lda_mailbox_autocreate = yes lda_mailbox_autosubscribe = yes log_path = /var/log/dovecot-sieve.log mail_plugins = "autocreate sieve" postmaster_address = postmaster@dreamclever.ru } namespace { type = private separator = / prefix = #location defaults to mail_location. inbox = yes mailbox Sent { auto = subscribe special_use = \Sent } mailbox Drafts { auto = subscribe special_use = \Drafts } mailbox Trash { auto = subscribe special_use = \Trash } mailbox Junk { auto = subscribe special_use = \Junk } } plugin { autocreate = Trash autocreate2 = Junk autocreate3 = Drafts autocreate4 = Sent sieve = /var/vmail/%d/%n/dovecot.sieve sieve_before = /var/vmail/sieve/dovecot.sieve sieve_dir = /var/vmail/%d/%n sieve_global_dir = /var/vmail/sieve } |
Копируем в файл /etc/dovecot/dovecot-sql.conf содержимое нижнего блока
Создаим файл конфигурации:
1 2 |
cd /etc/dovecot/ :>dovecot-sql.conf |
* Необходимо заменить MysqlPasswordForMailBase на пароль от вашего пользователя mail в mysdl который мы создали выше:
1 2 3 4 5 6 |
driver = mysql connect = host=localhost dbname=mail user=mail password=MysqlPasswordForMailBase default_pass_scheme = MD5-CRYPT password_query = SELECT username as user, password, '/var/vmail/%d/%n' as userdb_home, 'maildir:/var/vmail/%d/%n' as userdb_mail, 1150 as userdb_uid, 8 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1' user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n' as mail, 1150 AS uid, 8 AS gid, concat('dirsize:storage=', quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1' |
Необходимо создать dovecot-sieve.log в директории /var/log и выставить владельца и права:
1 2 3 4 |
cd /var/log/ :>dovecot-sieve.log chown mail:mail /var/log/dovecot-sieve.log chmod 660 /var/log/dovecot-sieve.log |
Для dovecot.log аналогично:
1 2 3 4 |
cd /var/log/ :>dovecot.log chown mail:mail /var/log/dovecot.log chmod 660 /var/log/dovecot.log |
Установка и настройка spamassassin:
1 |
apt-get install spamassassin |
Обнулим содержимое файла конфигурации:
1 2 |
cd /etc/spamassassin/ :>local.cf |
Копируем в файл /etc/spamassassin/local.cf содержимое нижнего блока:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# Add *****SPAM***** to the Subject header of spam e-mails # # rewrite_header Subject *****SPAM***** # Save spam messages as a message/rfc822 MIME attachment instead of # modifying the original message (0: off, 2: use text/plain instead) # # report_safe 1 # Set which networks or hosts are considered 'trusted' by your mail # server (i.e. not spammers) # # trusted_networks 212.17.35. # Set the threshold at which a message is considered spam (default: 5.0) # required_score 4.5 # Use Bayesian classifier (default: 1) # # use_bayes 1 # Bayesian classifier auto-learning (default: 1) # # bayes_auto_learn 1 bayes_path /var/spamassassin/bayes # Set headers which may provide inappropriate cues to the Bayesian # classifier # # bayes_ignore_header X-Bogosity # bayes_ignore_header X-Spam-Flag # bayes_ignore_header X-Spam-Status # Some shortcircuiting, if the plugin is enabled ifplugin Mail::SpamAssassin::Plugin::Shortcircuit endif # Mail::SpamAssassin::Plugin::Shortcircuit |
После установки он по умолчанию выключен.
Поэтому открываем файл /etc/default/spamassassin и меняем строку:
ENABLED=1
1 2 |
sa-learn --rebuild #Создать базы обучения |
Установка и настройка clamav – антивирус:
1 |
apt-get install clamav-daemon clamav-freshclam clamav-testfiles |
1 2 3 |
adduser clamav Debian-exim chmod -R g+w /var/spool/exim4 chmod -R g+s /var/spool/exim4 |
Выполним команду для просмотра прав:
1 |
ls -ld /var/spool/exim4/ |
Результат должен быть похож на:
1 |
drwxr-x— 5 Debian-exim Debian-exim 4096 2010-02-15 22:36 /var/spool/exim4/ |
Перезапустим clamav
1 |
/etc/init.d/clamav-daemon restart |
Дополнительно поставить модуль dovecot:
1 |
apt-get install dovecot-sieve dovecot-managesieved |
И просмотрим статус работы:
1 2 |
ps aux | grep -v grep | grep managesieve-login netstat -an | grep LISTEN | grep :4190 |
Настройка postfixadmin:
Переходим по адресу mydomain.ru/postfix и нажимаем setup, нам отображается сообщение:
1 |
Please edit config.inc.php - change $CONF['configured'] to true after setting your database settings |
Проходим в настройки и устанавливаем данное значение.
1 |
$CONF['configured'] = true; |
Также находим строчки с подключением к базе и меняем на имя нашей базы и пароль от неё.
1 2 3 |
$CONF['database_user'] = 'mail'; $CONF['database_password'] = 'MysqlPasswordForMailBase'; $CONF['database_name'] = 'mail'; |
Прокручиваем страницу в конец и здесь нам предлагают установить пароль для установки (Change setup password), придумываем любой пароль.
* Важно: пароль должен содержать минимум три буквы.
После установки пароля нам необходимо скопировать сгенерированный hash скопировать в настройки (config.inc.php), у вас он будет другой не копируйте наше значение.
1 2 3 |
#If you want to use the password you entered as setup password, edit config.inc.php or config.local.php and set $CONF['setup_password'] = '9cc4dd85618026504cb72654d4d95fa1:4d9965ff805c3f72b0f50b711329e4d5f20ab8ad'; |
Далее вводим наш пароль который мы придумали (не hash).
Логин админстратора пример: root@dka-develop.ru
И придумываем для администратора пароль, с этими данными мы будем заходить в администрование почтовых ящиков.
Нажимаем Add Admin, и нас поздравят с основной настройкой postfixadmin:
1 2 3 |
The admin root@dka-develop.ru has been added! You are done with your basic setup. You can now login to PostfixAdmin using the account you just created. |
Переходим по ссылке с именем login to PostfixAdmin и входим с логином и паролем от нашего супер админа root@dka-develop.ru.
Далее переходим в список доменов, добавить домен:
1 2 3 4 5 |
Домен: dka-develop.ru Алисы: 0 Ящики: 0 Активен: да Стандартные алиасы: да |
Обзор, создать ящик:
1 2 3 4 5 |
Имя: название ящика пример info Домен: выбираем из списка, если один то он уже по умолчанию выбран Пароль: придумываем любой пароль Имя: заполнять не обязательно, но можно добавить чтобы было понятно назначение пример: Информационный Квота: ограничение размера ящика, оставить пустым, если нет ограничений |
Ящик создан и письмо отправлено, давайте посмотрим в директории /var/vmail/dka-develop.ru/info/new наше письмо.
* dka-develop.ru это наш путь у вас свой домен.
Все работает осталось немного, установить и настроить roundcube для просмотра и отправки писем, это почтовый клиент на подобее outlook, the bat… только в веб-интефейсе на подобее gmail.
Установка, настройка roundcube:
Переходим на сайт https://roundcube.net/ и скачиваем последнюю версию * – Complete.
* Название файла может не совпадать, вы можете скачать другую версию, будьте внимательно и подставляйте свою версию.
1 2 3 4 5 |
cd /var/www wget https://github.com/roundcube/roundcubemail/releases/download/1.3.0/roundcubemail-1.3.0-complete.tar.gz tar -xzvf /var/www/roundcubemail-1.3.0-complete.tar.gz ls -l mv roundcubemail-1.3.0 roundcubemail |
Переходим в директорию и выставляем права 770 и владельца root:www-data или вашпользователь:www-data, на директорию roundcubemail также нужно выставить такие значения:
1 2 3 4 5 |
chown www-data:www-data /var/www/roundcubemail chmod 770 /var/www/roundcubemail cd /var/www/roundcubemail/ chown -R www-data:www-data . chmod -R 770 * |
Настраиваем apache:
1 2 |
cd /etc/apache2/conf-enabled :>roundcubemail.conf |
Вставляем в файл:
1 2 3 4 5 6 7 |
Alias /webmail /var/www/roundcubemail <Directory "/var/www/roundcubemail"> Options FollowSymLinks DirectoryIndex index.php Require all granted </Directory> |
Перезапускаем Apache:
1 |
service apache2 restart |
Создадим базу для roundcubemail, подключаемся под root пользователем mysql, не путать root в системе linux (ubuntu|debian …):
1 2 |
mysql -u root -p Enter password: |
Вводим пароль, затем выполняем команды, MysqlPasswordForMailBase необходимо заменить на свой пароль, этот пароль мы будем вводить дальше в конфигурации для подключения:
1 2 3 |
CREATE DATABASE roundcube; GRANT ALL PRIVILEGES ON roundcube.* TO roundcube@localhost IDENTIFIED BY 'MysqlPasswordForMailBase'; exit |
Переходим по адресу, где dka-develop.ru это ваш домен: http://dka-develop.ru/webmail/installer/
На первом шаге нажимаем Next и здесь нас интересует:
Database setup:
1 2 3 4 5 |
Database type: Mysql Database server: localhost Database name: roundcube Database user: roundcube Database pass: MyPassword11 # пароль который мы создавали выше |
Language:
1 2 |
language: ru_RU htmleditor: always |
Плагины:
1 |
managesieve, markasjunk, newmail_notifier, zipdownload. |
Нажимаем Create Config. Нам сообщают что конфиг успешно создан, нажимаем Continue (Продолжить):
1 |
The config file was saved successfully into RCMAIL_CONFIG_DIR directory of your Roundcube installation. |
Нажимаем Initialized Database.
Переходим в диреторию roundcubeamail и открываем файл конфигурации config.inc.php:
1 |
cd /var/www/roundcubemail/config |
И добавьте в конец следующие строчки:
1 2 3 4 5 6 7 8 9 |
$config['imap_auth_type'] = 'PLAIN'; $config['managesieve_port'] = 4190; $config['managesieve_host'] = 'localhost'; $config['managesieve_mbox_encoding'] = 'UTF-8'; $config['newmail_notifier_basic'] = true; $config['enable_installer'] = false; |
Для безопасности необходимо удалить папку installer:
1 |
rm -r /var/www/roundcubemail/installer |
Переходим по адресу, где dka-develop.ru это ваш домен: http://dka-develop.ru/webmail/
И входим под нашим пользователем info@dka-develop.ru
На этом все настройка почтового сервера завершена.
ClamAV returned lstat() failed: Permission denied. ERROR
Нужно в конфигурационных файлах
1 2 |
/etc/clamav/freshclam.conf /etc/clamav/clamd.conf |
изменить параметр на “yes”:
1 |
AllowSupplementaryGroups yes |
Источник: https://dka-develop.ru/blog/article/7-vps-pochtovyy-server-ubuntu-debian-0607171734
Как оказалось, в статье есть ряд недочетов.
Так, например, не уходят письма от адресатов, если отправка идет по SMTP.
1. Смотрите по логам Exim, исправляйте там где не хватает прав на запись у clamav, spamassasin.
2. Убедитесь, что все сервисы запустились… В том числе clamav, spamassin.
3. У меня была ошибка при отправке с другого сервера по SMTP: is not a valid\n553 5.1.2 RFC-5321 address. v7si1781794wrg.254 – gsmtp 2018-03-14
53-5.1.2 The sender address
Решение данного вопроса. Если авторизация проходит с полным указанием Email, то нужно немного поменять конфиг…
Там где: acl_check_rcpt:
accept hosts = :
….
control = submission
Исправляем ‘control = submission’ на:
control = submission/sender_retain/domain=
Я с Linux плохо знаком, но тут потребовалась необходимость поднять почтовый сервис на Linux. Решил попробывать по данному методу , домен зарегистирован на reg.ru mx запись создал, но когда дошел до шага
Настройка postfixadmin:
В котором указываешь mydomen.ru/postfix, где mydomen имя вашего домена. Выдает 404 ошибку что страницы не существует.
Подскажите в чем может быть причина??? При том что localhost работает имеется стартовая страница apache2.
Я сделал точно как вы сделали и при входе в roundcube выдает ошибку “Неудачное соединение с IMAP сервером”
Посмотрел лог dovecot там
imap(asanov@domain.kg): Error: User initialization failed: namespace configuration error: There can be only one namespace with inbox=yes
imap: Error: Invalid user settings. Refer to server log for more information.
chmod 770 /var/www/postfixadmin
chown: невозможно получить доступ к ‘/var/www/postfixadmin’: Нет такого файла или каталога