diff --git a/bin/v-add-backup-sftp-host b/bin/v-add-backup-sftp-host new file mode 100755 index 000000000..46065874b --- /dev/null +++ b/bin/v-add-backup-sftp-host @@ -0,0 +1,145 @@ +#!/bin/bash +# info: add backup sftp host +# options: HOST USERNAME [PASSWORD] [PATH] [PORT] +# +# The function adds sftp host for system backups + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument defenition +sftp_host=$1 +sftp_user=$2 +sftp_password=${3-******} +sftp_path=${4-backup} +sftp_port=${5-22} + +A3='******' + +# Includes +source $VESTA/func/main.sh +source $VESTA/conf/vesta.conf + +# Replace password with ****** +if [[ $A3 != '******' ]] +then + EVENT="${EVENT/$sftp_password/******}" +fi + +# sftp command function +sftpc() { +expect -f "-" <" { + if {\$count < \$argc} { + set arg [lindex \$argv \$count] + send "\$arg\r" + incr count + } else { + send "exit\r" + set output "Disconnected." + if {[info exists rc] != 1} { + set rc $OK + } + } + exp_continue + } + + timeout { + set output "Connection timeout." + set rc $E_CONNECT + } + } + + if {[info exists output] == 1} { + puts "\$output" + } + + exit \$rc +EOF +} + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +check_expect=$(which expect) +if [[ ! -n $check_expect ]] +then + echo "Error: \"expect\" utility not found" + log_event "$E_NOTEXIST" "$EVENT" + exit $E_NOTEXIST +fi + +check_args '2' "$#" "HOST USERNAME [PASSWORD] [PATH] [PORT]" + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Checking network connection and write permissions +sftmpdir="$sftp_path/vst.bK76A9SUkt" +sftpc "mkdir $sftp_path" > /dev/null 2>&1 +sftpc "mkdir $sftmpdir" "rmdir $sftmpdir" +rc=$? +if [[ "$rc" != 0 ]] +then + case $rc in + $E_CONNECT) echo "Error: can't login to sftp host";; + $E_FTP) echo "Error: can't create temp folder on the sftp host";; + esac + log_event "$rc" "$EVENT" + exit "$rc" +fi + +# Adding sftp backup config file +echo "HOST='$sftp_host' +USERNAME='$sftp_user' +PASSWORD='$sftp_password' +BPATH='$sftp_path' +PORT='$sftp_port' +TIME='$TIME' +DATE='$DATE'" > $VESTA/conf/sftp.backup.conf +chmod 660 $VESTA/conf/sftp.backup.conf + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +# Update vesta.conf +if [ -z "$(grep LANGUAGE $VESTA/conf/vesta.conf)" ]; then + echo "BACKUP_SYSTEM='ftp'" >> $VESTA/conf/vesta.conf +else + bckp=$(echo "$BACKUP_SYSTEM,sftp" |\ + sed "s/,/\n/g"|\ + sort -r -u |\ + sed "/^$/d"|\ + sed ':a;N;$!ba;s/\n/,/g') + sed -i "s/BACKUP_SYSTEM=.*/BACKUP_SYSTEM='$bckp'/g" $VESTA/conf/vesta.conf +fi + +# Logging +echo "$sftp_host/$sftp_path successfully added as backup destination" +log_event "$OK" "$EVENT" + +exit diff --git a/bin/v-backup-user b/bin/v-backup-user index 6b78b4a4c..9ad8650f9 100755 --- a/bin/v-backup-user +++ b/bin/v-backup-user @@ -692,6 +692,158 @@ ftp_backup() { fi } +# sftp command function +sftpc() { +expect -f "-" <" { + if {\$count < \$argc} { + set arg [lindex \$argv \$count] + send "\$arg\r" + incr count + } else { + send "exit\r" + set output "Disconnected." + if {[info exists rc] != 1} { + set rc $OK + } + } + exp_continue + } + + timeout { + set output "Connection timeout." + set rc $E_CONNECT + } + } + + if {[info exists output] == 1} { + puts "\$output" + } + + exit \$rc +EOF +} + +sftp_backup() { + #Checking expect installation + check_expect=$(which expect) + if [[ ! -n $check_expect ]] + then + echo "Error: \"expect\" utility not found" + log_event "$E_NOTEXIST" "$EVENT" + exit $E_NOTEXIST + fi + + # Checking config + if [ ! -e "$VESTA/conf/sftp.backup.conf" ]; then + sftp_conf_error="Can't open $VESTA/conf/sftp.backup.conf" + echo "$sftp_conf_error" | $send_mail -s "$subj" $email + echo "Error: $VESTA/conf/sftp.backup.conf doesn't exist" + sed -i "/ $user /d" $VESTA/data/queue/backup.pipe + log_event "$E_NOTEXIST" "$EVENT" + exit $E_NOTEXIST + fi + + # Parse config + source $VESTA/conf/sftp.backup.conf + + # Set current data + DATE=$(date +%F) + TIME=$(date +%T) + + # Set default port + if [ -z "$(grep 'PORT=' $VESTA/conf/sftp.backup.conf)" ]; then + PORT='22' + fi + + # Checking variables + if [ -z "$HOST" ] || [ -z "$USERNAME" ] || [ -z "$PASSWORD" ]; then + rm -rf $tmpdir + echo "Can't parse sftp backup configuration" |\ + $send_mail -s "$subj" $email + echo "Error: Parsing error" + sed -i "/ $user /d" $VESTA/data/queue/backup.pipe + log_event "$E_PARSING" "$EVENT" + exit $E_PARSING + fi + + # Debug info + echo -e "$(date "+%F %T") Remote: $HOST/$BPATH/$user.$DATE.tar" + + # Checking network connection and write permissions + echo -e "$(date "+%F %T") Checking network connection and write permissions ..." + sftmpdir="$BPATH/vst.bK76A9SUkt" + sftpc "mkdir $BPATH" > /dev/null 2>&1 + sftpc "mkdir $sftmpdir" "rmdir $sftmpdir" > /dev/null 2>&1 + rc=$? + if [[ "$rc" != 0 ]] + then + rm -rf $tmpdir + case $rc in + $E_CONNECT) echo "Error: can't login to sftp host" | $send_mail -s "$subj" $email;; + $E_FTP) echo "Error: can't create temp folder on the sftp host" | $send_mail -s "$subj" $email;; + esac + sed -i "/ $user /d" $VESTA/data/queue/backup.pipe + log_event "$rc" "$EVENT" + exit "$rc" + fi + echo -e "$(date "+%F %T") Connection established" + + # Checking retention + echo -e "$(date "+%F %T") Checking retention ..." + backup_list=$(sftpc "cd $BPATH" "ls -l" |awk '{print $9}' |grep "^$user\.") + backups_count=$(echo "$backup_list" | wc -l) + if [ "$backups_count" -ge "$BACKUPS" ]; then + backups_rm_number=$((backups_count - BACKUPS + 1)) + for backup in $(echo "$backup_list" | head -n $backups_rm_number); do + backup_date=$(echo $backup | sed -e "s/$user.//" -e "s/.tar.*$//") + if [ -z $deprecated ]; then deprecated="$backup_date"; else deprecated="$deprecated $backup_date"; fi + echo -e "$(date "+%F %T") Roated sftp backup: $backup_date" + msg="$msg\n$(date "+%F %T") Roated sftp backup: $backup_date" + sftpc "cd $BPATH" "rm $backup" > /dev/null 2>&1 + done + fi + + # Uploading backup archive + echo -e "$(date "+%F %T") Uploading $user.$DATE.tar ..." + if [ "$localbackup" = 'yes' ]; then + cd $BACKUP + sftpc "cd $BPATH" "put $user.$DATE.tar" > /dev/null 2>&1 + else + cd $tmpdir + tar -cf $BACKUP/$user.$DATE.tar . + cd $BACKUP/ + sftpc "cd $BPATH" "put $user.$DATE.tar" > /dev/null 2>&1 + rm -f $user.$DATE.tar + fi + echo -e "$(date "+%F %T") Upload complete" +} + echo "-- SUMMARY --" msg="$msg\n-- SUMMARY --" @@ -700,6 +852,7 @@ for backup_type in $(echo -e "${BACKUP_SYSTEM//,/\\n}"); do case $backup_type in local) local_backup ;; ftp) ftp_backup ;; + sftp) sftp_backup ;; esac done diff --git a/bin/v-delete-backup-sftp-host b/bin/v-delete-backup-sftp-host new file mode 100644 index 000000000..ec4a99b49 --- /dev/null +++ b/bin/v-delete-backup-sftp-host @@ -0,0 +1,46 @@ +#!/bin/bash +# info: delete backup sftp server +# options: NONE +# +# The function deletes sftp backup host + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Includes +source $VESTA/func/main.sh +source $VESTA/conf/vesta.conf + + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Delete configuration file +rm -f $VESTA/conf/sftp.backup.conf + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +# Update vesta.conf +bckp=$(echo "$BACKUP_SYSTEM" |\ + sed "s/,/\n/g"|\ + sed "s/sftp//" |\ + sed "/^$/d"|\ + sed ':a;N;$!ba;s/\n/,/g') +sed -i "s/BACKUP_SYSTEM=.*/BACKUP_SYSTEM='$bckp'/g" $VESTA/conf/vesta.conf + +# Logging +echo "sftp host successfulle removed from configuration" +log_event "$OK" "$EVENT" + +exit diff --git a/bin/v-update-firewall b/bin/v-update-firewall index a28a8a7e0..cd7205b8a 100755 --- a/bin/v-update-firewall +++ b/bin/v-update-firewall @@ -12,6 +12,7 @@ # Defining absolute path for iptables and modprobe iptables="/sbin/iptables" modprobe="/sbin/modprobe" +sysctl="/sbin/sysctl" # Includes source /etc/profile.d/vesta.sh @@ -38,11 +39,16 @@ if [ ! -e "$rules" ]; then exit fi +$sysctl net.netfilter.nf_conntrack_max >/dev/null 2>&1 +if [ $? -ne 0 ]; then + conntrack='no' +fi + # Checking conntrack module avaiabilty $modprobe nf_conntrack >/dev/null 2>&1 $modprobe nf_conntrack_ftp >/dev/null 2>&1 if [ $? -ne 0 ]; then - stateful='no' + conntrack_ftp='no' fi # Creating temporary file @@ -75,7 +81,7 @@ for line in $(sort -r -n -k 2 -t \' $rules); do # Checking FTP for contrack module if [ "$TYPE" = "FTP" ] || [ "$PORT" = '21' ]; then - if [ "$stateful" != 'no' ]; then + if [ "$conntrack_ftp" != 'no' ]; then state="-m conntrack --ctstate NEW" else port="-m multiport --dports 20,21,12000:12100" @@ -101,7 +107,7 @@ for p_rule in $(cat $ports); do done # Enabling stateful support -if [ "$stateful" != 'no' ]; then +if [ "$conntrack" != 'no' ]; then str="$iptables -A INPUT -p tcp -m state" str="$str --state ESTABLISHED,RELATED -j ACCEPT" echo "$str" >> $tmp diff --git a/install/debian/dovecot.conf b/install/debian/dovecot.conf index 0a8553510..005e97aaa 100644 --- a/install/debian/dovecot.conf +++ b/install/debian/dovecot.conf @@ -2,3 +2,27 @@ protocols = imap pop3 listen = *, :: base_dir = /var/run/dovecot/ !include conf.d/*.conf + + namespace { + type = private + separator = / + prefix = + 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 + } + } diff --git a/install/debian/proftpd.conf b/install/debian/proftpd.conf index 532efab09..e948e92a8 100644 --- a/install/debian/proftpd.conf +++ b/install/debian/proftpd.conf @@ -3,7 +3,7 @@ ServerName "FTP" ServerIdent on "FTP Server ready." ServerAdmin root@localhost DefaultServer on -VRootEngine on +VRootEngine off DefaultRoot ~ !adm AuthPAMConfig proftpd AuthOrder mod_auth_pam.c* mod_auth_unix.c diff --git a/install/rhel/dovecot/conf.d/20-imap.conf b/install/rhel/dovecot/conf.d/20-imap.conf index 5f8725e6d..5ee2c5173 100644 --- a/install/rhel/dovecot/conf.d/20-imap.conf +++ b/install/rhel/dovecot/conf.d/20-imap.conf @@ -3,51 +3,18 @@ ## protocol imap { - # Maximum IMAP command line length. Some clients generate very long command - # lines with huge mailboxes, so you may need to raise this if you get - # "Too long argument" or "IMAP command line too large" errors often. - #imap_max_line_length = 64k - - # Maximum number of IMAP connections allowed for a user from each IP address. - # NOTE: The username is compared case-sensitively. - #mail_max_userip_connections = 10 - - # Space separated list of plugins to load (default is global mail_plugins). - #mail_plugins = $mail_plugins - - # IMAP logout format string: - # %i - total number of bytes read from client - # %o - total number of bytes sent to client - #imap_logout_format = bytes=%i/%o - - # Override the IMAP CAPABILITY response. If the value begins with '+', - # add the given capabilities on top of the defaults (e.g. +XFOO XBAR). - #imap_capability = - - # How long to wait between "OK Still here" notifications when client is - # IDLEing. - #imap_idle_notify_interval = 2 mins - - # ID field names and values to send to clients. Using * as the value makes - # Dovecot use the default value. The following fields have default values - # currently: name, version, os, os-version, support-url, support-email. - #imap_id_send = - - # ID fields sent by client to log. * means everything. - #imap_id_log = - - # Workarounds for various client bugs: - # delay-newmail: - # Send EXISTS/RECENT new mail notifications only when replying to NOOP - # and CHECK commands. Some clients ignore them otherwise, for example OSX - # Mail (>/etc/sudoers.d/admin # NTP Synchronization echo '#!/bin/sh' > /etc/cron.daily/ntpdate diff --git a/install/vst-install-ubuntu.sh b/install/vst-install-ubuntu.sh index 047628323..14ff61c11 100644 --- a/install/vst-install-ubuntu.sh +++ b/install/vst-install-ubuntu.sh @@ -534,6 +534,7 @@ wget $CHOST/$VERSION/sudoers.vestacp.conf -O /etc/sudoers.d/vestacp wget $CHOST/$VERSION/sudoers.admin.conf -O /etc/sudoers.d/admin chmod 440 /etc/sudoers.d/vestacp chmod 440 /etc/sudoers.d/admin +echo 'Defaults:admin !syslog' >>/etc/sudoers.d/admin # NTP Synchronization echo '#!/bin/sh' > /etc/cron.daily/ntpdate diff --git a/web/inc/i18n/ua.php b/web/inc/i18n/ua.php index e05c2b15a..6254f83a7 100644 --- a/web/inc/i18n/ua.php +++ b/web/inc/i18n/ua.php @@ -26,7 +26,7 @@ $LANG['ua'] = array( 'CRON' => 'CRON', 'BACKUP' => 'BACKUP', - 'Add User' => 'Додати акаунт', + 'Add User' => 'Додати користувача', 'Add Domain' => 'Додати домен', 'Add Web Domain' => 'Додати WEB домен', 'Add DNS Domain' => 'Додати DNS домен', @@ -45,10 +45,10 @@ $LANG['ua'] = array( 'Add one more FTP Account' => 'Додати ще один FTP акаунт', 'Search' => 'Пошук', 'Overall Statistics' => 'Загальна статистика', - 'Daily' => 'Щоденні', - 'Weekly' => 'Щотижневі', - 'Monthly' => 'Щомісячні', - 'Yearly' => 'Щорічні', + 'Daily' => 'Щоденний', + 'Weekly' => 'Щотижневий', + 'Monthly' => 'Щомісячний', + 'Yearly' => 'Щорічний', 'Add' => 'Додати', 'Back' => 'Назад', 'Save' => 'Зберегти', @@ -56,21 +56,21 @@ $LANG['ua'] = array( 'toggle all' => 'виділити все', 'apply to selected' => 'застосувати до вибраних', - 'rebuild' => 'перестворити', - 'rebuild web' => 'перестворити WEB', - 'rebuild dns' => 'перестворити DNS', - 'rebuild mail' => 'перестворити MAIL', - 'rebuild db' => 'перестворити DB', - 'rebuild cron' => 'перестворити CRON', + 'rebuild' => 'перебудувати', + 'rebuild web' => 'перебудувати WEB', + 'rebuild dns' => 'перебудувати DNS', + 'rebuild mail' => 'перебудувати MAIL', + 'rebuild db' => 'перебудувати DB', + 'rebuild cron' => 'перебудувати CRON', 'update counters' => 'оновити лічильники', 'suspend' => 'заблокувати', 'unsuspend' => 'розблокувати', 'delete' => 'видалити', - 'show per user' => 'вибрати користувача', + 'show per user' => 'по користувачам', 'login as' => 'увійти як', 'logout' => 'вийти', 'edit' => 'редагувати', - 'open webstats' => 'відкрити звіт веб-аналітики', + 'open webstats' => 'відкрити веб-статистику', 'view logs' => 'переглянути логи', 'list records' => 'показати записи: %s', 'add record' => 'додати запис', @@ -88,14 +88,14 @@ $LANG['ua'] = array( 'update' => 'оновити', 'generate' => 'згенерувати', 'Generate CSR' => 'Згенерувати CSR запит', - 'reread IP' => 'оновити IP', + 'reread IP' => 'перечитати IP', 'enable autoupdate' => 'увімкнути автооновлення', 'disable autoupdate' => 'вимкнути автооновлення', 'turn on notifications' => 'увімкнути сповіщення', 'turn off notifications' => 'вимкнути сповіщення', - 'Adding User' => 'Додавання акаунту', - 'Editing User' => 'Редагування акаунту', + 'Adding User' => 'Додавання користувача', + 'Editing User' => 'Редагування користувача', 'Adding Domain' => 'Додавання домену', 'Editing Domain' => 'Редагування домену', 'Adding DNS Domain' => 'Додавання DNS домену', @@ -114,7 +114,7 @@ $LANG['ua'] = array( 'Editing Package' => 'Редагування пакету', 'Adding IP address' => 'Додавання IP адреси', 'Editing IP Address' => 'Редагування IP адреси', - 'Editing Backup Exclusions' => 'Налаштування вийнятків', + 'Editing Backup Exclusions' => 'Налаштування вийнятків архіву', 'Generating CSR' => 'Генерування CSR запиту', 'Listing' => 'Список', 'Search Results' => 'Результати пошуку', @@ -150,7 +150,7 @@ $LANG['ua'] = array( 'Web' => 'Веб', 'Mail' => 'Пошта', 'Databases' => 'Бази даних', - 'User Directories' => 'Теки Користувача', + 'User Directories' => 'Теки користувача', 'Template' => 'Шаблон', 'Web Template' => 'Шаблон Apache', 'Proxy Template' => 'Шаблон Nginx', @@ -161,7 +161,7 @@ $LANG['ua'] = array( 'per domain' => 'на домен', 'DNS Domains' => 'DNS домени', 'DNS Domains' => 'DNS домени', - 'DNS records' => 'DNS запису', + 'DNS records' => 'DNS записи', 'Name Servers' => 'Сервери імен', 'Mail Domains' => 'Поштові домени', 'Mail Accounts' => 'Поштові акаунти', @@ -173,19 +173,19 @@ $LANG['ua'] = array( 'backup exclusions' => 'вийнятки архіву', 'template' => 'шаблон', 'SSL Support' => 'Підтримка SSL', - 'SSL Home Directory' => 'Тека SSL', + 'SSL Home Directory' => 'Домашня тека SSL', 'Proxy Support' => 'Підтримка Nginx', - 'Proxy Extensions' => 'Опрацювання Nginx', - 'Web Statistics' => 'Статистика сайту', - 'Additional FTP Account' => 'Додатковий FTP', + 'Proxy Extensions' => 'Розширення Nginx', + 'Web Statistics' => 'Веб статистика', + 'Additional FTP Account' => 'Додатковий FTP акаунт', 'SOA' => 'SOA', 'TTL' => 'TTL', 'Expire' => 'Спливає', - 'Records' => 'DNS записи', + 'Records' => 'Записи', 'Catchall email' => 'Пастка пошти', - 'AntiVirus Support' => 'Антивірус', - 'AntiSpam Support' => 'Антиспам', - 'DKIM Support' => 'DKIM', + 'AntiVirus Support' => 'Підтримка антивірусу', + 'AntiSpam Support' => 'Підтримка антиспаму', + 'DKIM Support' => 'Підтримка DKIM', 'Accounts' => 'Акаунти', 'Quota' => 'Квота', 'Autoreply' => 'Автовідповідач', @@ -201,8 +201,8 @@ $LANG['ua'] = array( 'Month' => 'Місяць', 'Day of week' => 'День тижня', 'local' => 'локальний', - 'Run Time' => 'Виконаний за', - 'Backup Size' => 'Розмір', + 'Run Time' => 'Виконано за', + 'Backup Size' => 'Розмір архіву', 'SYS' => 'Системний', 'Domains' => 'Домени', 'Status' => 'Статус', @@ -211,14 +211,14 @@ $LANG['ua'] = array( 'Owner' => 'Власник', 'Users' => 'Користувачі', 'Load Average' => 'Загальне Навантаження', - 'Memory Usage' => 'Використання Пам`яті', - 'HTTPD Usage' => 'Web сервер', - 'NGINX Usage' => 'Nginx', - 'MySQL Usage on localhost' => 'Сервер бази даних MySQL', - 'PostgreSQL Usage on localhost' => 'Сервер бази даних PostgreSQL', - 'Bandwidth Usage eth0' => 'Використання мережі: eth0', - 'FTP Usage' => 'FTP сервер', - 'SSH Usage' => 'SSH сервер', + 'Memory Usage' => 'Використання Пам\'яті', + 'HTTPD Usage' => 'Використання HTTPd', + 'NGINX Usage' => 'Використання Nginx', + 'MySQL Usage on localhost' => 'Локальний сервер бази даних MySQL', + 'PostgreSQL Usage on localhost' => 'Локальний сервер бази даних PostgreSQL', + 'Bandwidth Usage eth0' => 'Використання мережі eth0', + 'FTP Usage' => 'Використання FTP', + 'SSH Usage' => 'Використання SSH', 'reverse proxy' => 'зворотній проксі', 'web server' => 'Web сервер', 'dns server' => 'DNS сервер ', @@ -230,7 +230,7 @@ $LANG['ua'] = array( 'ftp server' => 'FTP сервер', 'job scheduler' => 'планувальник завдань', 'CPU' => 'Процесор', - 'Memory' => 'Пам`ять', + 'Memory' => 'Пам\'ять', 'Uptime' => 'Запущений', 'core package' => 'головний пакет', 'php interpreter' => 'PHP інтерпретатор', @@ -238,14 +238,14 @@ $LANG['ua'] = array( 'Version' => 'Версія', 'Release' => 'Реліз', 'Architecture' => 'Архітектура', - 'Object' => 'Об`єкт', + 'Object' => 'Об\'єкт', 'Owner' => 'Власник', 'Username' => 'Акаунт', 'Password' => 'Пароль', 'Email' => 'Поштова скринька', 'Package' => 'Пакет', 'Language' => 'Мова', - 'First Name' => 'Ім`я', + 'First Name' => 'Ім\'я', 'Last Name' => 'Прізвище', 'Send login credentials to email address' => 'Відправити дані акаунту за адресою', 'Default Template' => 'Шаблон за замовчуванням', @@ -257,12 +257,12 @@ $LANG['ua'] = array( 'Aliases' => 'Аліаси', 'SSL Certificate' => 'SSL сертификат', 'SSL Key' => 'Ключ SSL сертифікату', - 'SSL Certificate Authority / Intermediate' => 'Центр сертифікації SSL / Intermediate', + 'SSL Certificate Authority / Intermediate' => 'Центр сертифікації SSL / Проміжний', 'SSL CSR' => 'SSL CSR запит', 'optional' => 'опційно', 'internal' => 'внутрішній', 'Statistics Authorization' => 'Обмежений доступ до статистики', - 'Statistics Auth' => 'Авторизація Статистики', + 'Statistics Auth' => 'Авторизація перегляду статистики', 'Account' => 'Акаунт', 'Prefix will be automaticaly added to username' => 'Префікс %s буде автоматично додано до назви акаунту', 'Send FTP credentials to email' => 'Відправити дані FTP акаунту за адресою', @@ -272,7 +272,7 @@ $LANG['ua'] = array( 'Record' => 'Запис / Піддомен', 'IP or Value' => 'IP адреса або Значення', 'Priority' => 'Пріоритет', - 'Record Number' => 'Порядковий номер', + 'Record Number' => 'Порядковий номер запису', 'in megabytes' => 'в мегабайтах', 'Message' => 'Повідомлення', 'use local-part' => 'використовуйте тільки імена акаунтів', @@ -286,12 +286,12 @@ $LANG['ua'] = array( 'Netmask' => 'Маска підмережі', 'Interface' => 'Інтерфейс', 'Shared' => 'Загальний', - 'Assigned user' => 'Назначити користувачу', - 'Assigned domain' => 'Домен', + 'Assigned user' => 'Призначений користувач', + 'Assigned domain' => 'Призначений домен', 'NAT IP association' => 'Асоційований NAT IP', - 'shell' => 'SSH доступ', + 'shell' => 'оболонка', 'web domains' => 'Web домени', - 'web aliases' => 'аліаси хостів', + 'web aliases' => 'Web аліаси', 'dns records' => 'DNS записи', 'mail domains' => 'поштові домени', 'mail accounts' => 'поштові акаунти', @@ -299,7 +299,7 @@ $LANG['ua'] = array( 'databases' => 'бази даних', 'cron jobs' => 'cron завдання', 'backups' => 'архіви', - 'quota' => 'квота диску', + 'quota' => 'квота', 'day of week' => 'день тижня', 'cmd' => 'командний рядок', 'users' => 'користувачі', @@ -317,26 +317,26 @@ $LANG['ua'] = array( 'IP address' => 'IP адреса', 'netmask' => 'маска підмережі', 'interface' => 'інтерфейс', - 'assigned user' => 'обраний користувач', + 'assigned user' => 'призначений користувач', 'ns1' => 'сервер імен #1', 'ns2' => 'сервер імен #2', 'user' => 'користувач', 'email' => 'пошта', - 'first name' => 'ім`я', - 'last name' => 'прізвище', + 'first name' => 'Ім\'я', + 'last name' => 'Прізвище', 'account' => 'акаунт', 'ssl certificate' => 'SSL сертификат', 'ssl key' => 'ключ SSL сертифікату', - 'stats user password' => 'пароль доступу до статистики', - 'stats username' => 'ім`я користувача статистики', - 'stats password' => 'пароль користувача статистики', + 'stats user password' => 'пароль користувача статистики', + 'stats username' => 'ім\'я користувача статистики', + 'stats password' => 'пароль статистики', 'ftp user password' => 'пароль доступу до FTP', 'ftp user' => 'користувач FTP', 'Last 70 lines of %s.%s.log' => 'Останні 70 рядків файлу %s.%s.log', 'Download AccessLog' => 'Завантажити AccessLog', 'Download ErrorLog' => 'Завантажити ErrorLog', 'Country' => 'Країна', - '2 letter code' => 'двобуквений код', + '2 letter code' => 'Двобуквений код', 'State / Province' => 'Область', 'City / Locality' => 'Місто / Населений пункт', 'Organization' => 'Організація', @@ -348,52 +348,52 @@ $LANG['ua'] = array( 'ranges are acceptable' => 'дозволені діапазони', 'CIDR format is supported' => 'формат CIDR підтримується', - '1 account' => ' користувачів на сторінці: 1', - '%s accounts' => 'користувачів на сторінці: %s', - '1 domain' => 'доменів на сторінці: 1', - '%s domains' => 'доменів на сторінці: %s', - '1 record' => 'записів на сторінці: 1', - '%s records' => 'записів на сторінці: %s', - '1 mail account' => 'акаунтів на сторінці: 1', - '%s mail accounts' => 'акаунтів на сторінці: %s', - '1 database' => 'баз даних на сторінці: 1', - '%s databases' => 'баз даних на сторінці: %s', - '1 cron job' => 'завдань на сторінці: 1', - '%s cron jobs' => 'завдань на сторінці: %s', - '1 archive' => 'архівів на сторінці: 1', - '%s archives' => 'архівів на сторінці: %s', - '1 package' => 'пакетів на сторінці: 1', - '%s packages' => 'пакетів на сторінці: %s', - '1 IP address' => 'IP адрес на сторінці: 1', - '%s IP addresses' => 'IP адрес на сторінці: %s', - '1 month' => 'місяців на сторінці: 1', - '%s months' => 'місяців на сторінці: %s', - '1 log record' => 'записів на сторінці: 1', - '%s log records' => 'записів на сторінці %s', - '1 object' => 'об`єктів на сторінці: 1', - '%s objects' => 'об`єктів на сторінці: %s', + '1 account' => ' 1 акаунт', + '%s accounts' => '%s акаунтів', + '1 domain' => '1 домен', + '%s domains' => '%s доменів', + '1 record' => '1 запис', + '%s records' => '%s записів', + '1 mail account' => '1 поштовий акаунт', + '%s mail accounts' => '%s поштових акаунтів', + '1 database' => '1 база даних', + '%s databases' => '%s баз даних', + '1 cron job' => '1 завдання', + '%s cron jobs' => '%s завдань', + '1 archive' => '1 архів', + '%s archives' => '%s архівів', + '1 package' => '1 пакет', + '%s packages' => '%s пакет', + '1 IP address' => '1 IP адреса', + '%s IP addresses' => '%s IP адрес', + '1 month' => '1 місяць', + '%s months' => '%s місяців', + '1 log record' => '1 журнальний запис', + '%s log records' => '%s журнальних записів', + '1 object' => '1 об\'єкт', + '%s objects' => '%s об\'єктів', 'no exclusions' => 'немає виключень', - '1 rule' => 'правил на сторінці: 1', - '%s rules' => 'правил на сторінці: %s', + '1 rule' => '1 правило', + '%s rules' => '%s правил', 'There are no currently banned IP' => 'Немає заблокованих IP', 'USER_CREATED_OK' => 'Аккаунт %s успішно створено', - 'WEB_DOMAIN_CREATED_OK' => 'Домен %s успішно створено.', - 'DNS_DOMAIN_CREATED_OK' => 'Домен %s успішно створено.', - 'DNS_RECORD_CREATED_OK' => 'Запис %s.%s успішно створено.', - 'MAIL_DOMAIN_CREATED_OK' => 'Домен %s успішно створено.', - 'MAIL_ACCOUNT_CREATED_OK' => 'Аккаунт %s@%s успішно створено', + 'WEB_DOMAIN_CREATED_OK' => 'WEB домен %s успішно створено.', + 'DNS_DOMAIN_CREATED_OK' => 'DNS домен %s успішно створено.', + 'DNS_RECORD_CREATED_OK' => 'DNS запис %s.%s успішно створено.', + 'MAIL_DOMAIN_CREATED_OK' => 'Поштовий домен %s успішно створено.', + 'MAIL_ACCOUNT_CREATED_OK' => 'Поштову скриньку %s@%s успішно створено', 'DATABASE_CREATED_OK' => 'Базу даних %s успішно створено', - 'CRON_CREATED_OK' => 'Завдання успішно додано', + 'CRON_CREATED_OK' => 'Cron завдання успішно додано', 'IP_CREATED_OK' => '"IP адресу %s успішно створено.', 'PACKAGE_CREATED_OK' => 'Пакет %s успішно створено.', - 'SSL_GENERATED_OK' => 'SSL cертификат успішно створено.', + 'SSL_GENERATED_OK' => 'SSL cертификат успішно згенеровано.', 'RULE_CREATED_OK' => 'Правило успішно створено.', 'Autoupdate has been successfully enabled' => 'Aвтооновлення було успішно увімкнено', 'Autoupdate has been successfully disabled' => 'Aвтооновлення було успішно вимкнено', 'Cronjob email reporting has been successfully enabled' => 'Cronjob звітування було успішно увімкнено', 'Cronjob email reporting has been successfully disabled' => 'Cronjob звітування було успішно вимкнено', - 'Changes has been saved.' => 'Зміни збережені.', + 'Changes has been saved.' => 'Зміни збережено.', 'Confirmation' => 'Підтвердження', 'DELETE_USER_CONFIRMATION' => 'Ви впевнені, що хочете видалити користувача %s?', 'SUSPEND_USER_CONFIRMATION' => 'Ви впевнені, що хочете заблокувати користувача %s?', @@ -434,9 +434,9 @@ $LANG['ua'] = array( 'SERVICE_ACTION_FAILED' => 'Не вдалось "%s" "%s"', 'IP address is in use' => 'IP адреса використовується', 'BACKUP_SCHEDULED' => 'Завдання успішно додано в чергу. Після виконання ви отримаєте повний звіт по пошті.', - 'BACKUP_EXISTS' => 'Резервне копіювання вже виконується, будь-ласка дочекайтесь закінчення.', + 'BACKUP_EXISTS' => 'Резервне копіювання вже виконується, будь-ласка, дочекайтесь закінчення.', 'RESTORE_SCHEDULED' => 'Завдання успішно додано в чергу. Після виконання ви отримаєте повний звіт по пошті.', - 'RESTORE_EXISTS' => 'Завдання вже виконується, будь-ласка дочекайтесь закінчення.', + 'RESTORE_EXISTS' => 'Завдання вже виконується, будь-ласка, дочекайтесь закінчення.', 'WEB_EXCLUSIONS' => "Вкажіть домени по одному на рядок. Для того, щоб виключити всі, використовуйте *. Щоб виключити тільки деякі теки, використовуйте наступний формат: domain.com:public_html/cache:public_html/tmp", 'DNS_EXCLUSIONS' => "Вкажіть домени по одному на рядок. Для того, щоб виключити всі, використовуйте *", @@ -449,20 +449,20 @@ $LANG['ua'] = array( 'MAIL_FROM' => 'Vesta Control Panel ', 'GREETINGS_GORDON_FREEMAN' => "Вітаємо, %s %s,\n", 'GREETINGS' => "Вітаємо,\n", - 'ACCOUNT_READY' => "Ваш аккаунт успішно створений і готовий до використання.\n\nhttps://%s/login/\nІм`я користувача: %s\nПароль: %s\n\n--\nПанель керування Vesta\n", + 'ACCOUNT_READY' => "Ваш аккаунт успішно створено і готовий до використання.\n\nhttps://%s/login/\nІм`я користувача: %s\nПароль: %s\n\n--\nПанель керування Vesta\n", 'FTP login credentials' => 'Дані доступу до FTP', - 'FTP_ACCOUNT_READY' => "FTP аккаунт успішно створений і готовий до використання.\n\nХост: %s\nІм`я користувача: %s_%s\nПароль: %s\n\n--\nПанель керування Vesta\n", + 'FTP_ACCOUNT_READY' => "FTP аккаунт успішно створено і готовий до використання.\n\nХост: %s\nІм`я користувача: %s_%s\nПароль: %s\n\n--\nПанель керування Vesta\n", 'Database Credentials' => 'Дані доступу до БД', 'DATABASE_READY' => "База даних успішно створена.\n\nБаза даних: %s\nКористувач: %s\nПароль: %s\n%s\n\n--\nПанель керування Vesta\n", - 'forgot password' => 'нагадати', + 'forgot password' => 'нагадати пароль', 'Confirm' => 'Підтвердити', 'New Password' => 'Новий пароль', 'Confirm Password' => 'Підтвердження паролю', 'Reset' => 'Скинути', - 'Reset Code' => 'Код відновлення', + 'Reset Code' => 'Код скидання', 'RESET_NOTICE' => '', 'RESET_CODE_SENT' => 'Код для відновлення паролю успішно відправлено на вашу електронну пошту.
', 'MAIL_RESET_SUBJECT' => 'Відновлення паролю %s',