При использовании RDP, временами возникает такая ошибка:
Ошибка RDP: Удаленный сеанс отключен, поскольку для данного компьютера отсутствуют клиентские лицензии удаленного рабочего стола
Для удаления лицензии RDP с клиентского компьютера, откройте ветку реестра
HKEY_LOCAL_MACHINE\Software\Microsoft\MSLicensing
и удалите все подразделы.
После этого повторите подключение к серверу RDP. При первом подключении запустите клиент «от имени Администратора».
--------------
В продолжение данной темы...
После того, как Вы удалили, может выдасться другая ошибка:
Удаленный компьютер отключил сеанс, из-за ошибки в протоколе лицензирования.
Попытайтесь подключиться к удаленному компьютеру снова или обратитесь к системному администратору.
Причина данной ошибки - отсутствие у пользователя прав на создание данных разделов реестра. Для устранения данной ошибки выполните следующие действия:
- Запустите mstc.exe с правами администратора или войдите под правами администратора.
- Подключитесь к терминальному серверу. В этот момент будут автоматически созданы разделы в реестре HardwareID и StoreID.
- Отключитесь от терминального сервера.
K2 ERP — сучасна система для автоматизації бізнес-процесів, яка допомагає компаніям ефективно керувати фінансами, складом, продажами, закупівлями, виробництвом і персоналом. Рішення об’єднує ключові напрямки роботи в єдиному цифровому середовищі, зменшує кількість ручних операцій, підвищує прозорість даних і прискорює прийняття управлінських рішень. K2 ERP підходить для бізнесу, що прагне масштабування, контролю та стабільного розвитку.
вівторок, 9 квітня 2013 р.
пʼятниця, 5 квітня 2013 р.
2-й экземпляр apache
Иногда, возникает необходимость запустить 2-ю копию apache. Понятное дело, хочется использовать один и тот же исполняемый файл apache и не заниматься установкой различных версий продукта.
Определимся, чем должны, отличаться наши экземпляры.
Это конфигурационными файлами:
/etc/apache2/apache2.conf - указаны порты и специфичные для каждого из Апачей виртуальные хосты
/etc/apache2/ports.conf - содержит прослушиваемые порты.
/etc/apache2/envvars - путь к файлу для сохранения pid запущенного демона.
Стоит разделить логи директивами в в apache2.conf:
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined
Идем в папку init скриптов:
cd /etc/init.d
Создаем копию init скрипта родного Apache:
cp apache2 apache2_srv
Где apache2_srv - это название нового экземпляра Apache.
Сразу Добавляем фейловер Апача в автозапуск:
update-rc.d apache2_srv defaults
Корректируем скрипт apache2_srv:
Вместо блока:
PIDFILE=`. /etc/apache2/envvars ; echo $APACHE_PID_FILE`
if [ -z "$PIDFILE" ] ; then
echo ERROR: APACHE_PID_FILE needs to be defined in /etc/apache2/envvars >&2
exit 2
fi
Вставляем:
PIDFILE=`. /etc/apache2/envvars_apache2_srv ; echo $APACHE_PID_FILE`
if [ -z "$PIDFILE" ] ; then
echo ERROR: APACHE_PID_FILE needs to be defined in /etc/apache2/envvars_apache2_srv >&2
exit 2
fi
Чуть выше корректируем ENV:
ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin APACHE_ENVVARS=/etc/apache2/envvars_apache2_srv"
Корректируем конфиги:
cp /etc/apache2/envvars /etc/apache2/envvars_apache2_srv
Заменяем
export APACHE_PID_FILE=/var/run/apache2.pid
на
export APACHE_PID_FILE=/var/run/apache2_apache_2.pid
Создаем файл портов /etc/apache2/ports_apache_srv.conf:
В нем пишем:
Listen 81
Создаем файлы логов:
touch /var/log/apache2/error_apache2_srv.log
touch /var/log/apache2/other_vhosts_access_apache2_srv.log
chown root:root /var/log/apache2/other_vhosts_access_apache2_srv.log
chown root:adm /var/log/apache2/error_apache2_srv.log
chmod 640 /var/log/apache2/error_apache2_srv.log
Теперь давайте посмотрим, как осуществляется управление демоном Апача. Сразу скажу, что кэш мы не используем и следовательно "check_htcacheclean" всегда будет выдавать ложь.
Запуск:
start)
log_daemon_msg "Starting web server" "apache2"
if $APACHE2CTL start; then
if check_htcacheclean ; then
log_progress_msg htcacheclean
start_htcacheclean || log_end_msg 1
fi
log_end_msg 0
else
log_end_msg 1
fi
;;
То есть все вопросы к: $APACHE2CTL, его мы будем использовать не как SysV инит скрипт, а будем им проксировать все наши вопросы к apache
Для этого в верху скрипта делаем замену:
Далее изменяем все параметры вызов APACHE2CTL:
Теперь надо скорректировать функцию pidof_apache, иначе при stop мы будем убивать всех Апаче разом:
Делаем замену:
на:
Теперь попробуем запустить второго Апача:
Теперь необходимо на основе apache2.conf составить /etc/apache2/apache2_srv.conf
Скопируем оригинал
И далее корректируем пути к файлами, которые обсуждали выше.
Теперь надо поменять порты у директив NameVirtualHost xx.xx.xx.xx:80 и VirtualHost xx.xx.xx.xx:81.
Повторяем попытку запуска:
Определимся, чем должны, отличаться наши экземпляры.
Это конфигурационными файлами:
/etc/apache2/apache2.conf - указаны порты и специфичные для каждого из Апачей виртуальные хосты
/etc/apache2/ports.conf - содержит прослушиваемые порты.
/etc/apache2/envvars - путь к файлу для сохранения pid запущенного демона.
Стоит разделить логи директивами в в apache2.conf:
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined
Идем в папку init скриптов:
cd /etc/init.d
Создаем копию init скрипта родного Apache:
cp apache2 apache2_srv
Где apache2_srv - это название нового экземпляра Apache.
Сразу Добавляем фейловер Апача в автозапуск:
update-rc.d apache2_srv defaults
Корректируем скрипт apache2_srv:
Вместо блока:
PIDFILE=`. /etc/apache2/envvars ; echo $APACHE_PID_FILE`
if [ -z "$PIDFILE" ] ; then
echo ERROR: APACHE_PID_FILE needs to be defined in /etc/apache2/envvars >&2
exit 2
fi
Вставляем:
PIDFILE=`. /etc/apache2/envvars_apache2_srv ; echo $APACHE_PID_FILE`
if [ -z "$PIDFILE" ] ; then
echo ERROR: APACHE_PID_FILE needs to be defined in /etc/apache2/envvars_apache2_srv >&2
exit 2
fi
Чуть выше корректируем ENV:
ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin APACHE_ENVVARS=/etc/apache2/envvars_apache2_srv"
Корректируем конфиги:
cp /etc/apache2/envvars /etc/apache2/envvars_apache2_srv
Заменяем
export APACHE_PID_FILE=/var/run/apache2.pid
на
export APACHE_PID_FILE=/var/run/apache2_apache_2.pid
Создаем файл портов /etc/apache2/ports_apache_srv.conf:
В нем пишем:
Listen 81
Создаем файлы логов:
touch /var/log/apache2/error_apache2_srv.log
touch /var/log/apache2/other_vhosts_access_apache2_srv.log
chown root:root /var/log/apache2/other_vhosts_access_apache2_srv.log
chown root:adm /var/log/apache2/error_apache2_srv.log
chmod 640 /var/log/apache2/error_apache2_srv.log
Теперь давайте посмотрим, как осуществляется управление демоном Апача. Сразу скажу, что кэш мы не используем и следовательно "check_htcacheclean" всегда будет выдавать ложь.
Запуск:
start)
log_daemon_msg "Starting web server" "apache2"
if $APACHE2CTL start; then
if check_htcacheclean ; then
log_progress_msg htcacheclean
start_htcacheclean || log_end_msg 1
fi
log_end_msg 0
else
log_end_msg 1
fi
;;
То есть все вопросы к: $APACHE2CTL, его мы будем использовать не как SysV инит скрипт, а будем им проксировать все наши вопросы к apache
Для этого в верху скрипта делаем замену:
APACHE2CTL="$ENV /usr/sbin/apache2ctl"на
APACHE2CTL="$ENV /usr/sbin/apache2ctl -f /etc/apache2/apache2_srv.conf"
Далее изменяем все параметры вызов APACHE2CTL:
$APACHE2CTL start на $APACHE2CTL -k start
$APACHE2CTL stop на $APACHE2CTL -k stop
$APACHE2CTL graceful на $APACHE2CTL -k graceful
$APACHE2CTL configtest на $APACHE2CTL -t
Теперь надо скорректировать функцию pidof_apache, иначе при stop мы будем убивать всех Апаче разом:
Делаем замену:
pidof_apache() {
# if pidof is null for some reasons the script exits automagically
# classified as good/unknown feature
PIDS=`pidof apache2` || true
на:
pidof_apache() {
# if pidof is null for some reasons the script exits automagically
# classified as good/unknown feature
PIDS=`ps aux | grep 'apache2_srv' | grep -v 'grep' | awk '{print $2}' | xargs` || true
Теперь попробуем запустить второго Апача:
/etc/init.d/apache2_srv start
Starting web server: apache2apache2: Could not open configuration file /etc/apache2/apache2_failover.conf: No such file or directory
failed!
Теперь необходимо на основе apache2.conf составить /etc/apache2/apache2_srv.conf
Скопируем оригинал
cp /etc/apache2/apache2.conf /etc/apache2/apache2_srv.conf
И далее корректируем пути к файлами, которые обсуждали выше.
CustomLog /var/log/apache2/other_vhosts_access_apache2_srv.log vhost_combined
ErrorLog /var/log/apache2/error_apache2_srv.log
Include /etc/apache2/ports_apache2_srv.conf
Теперь надо поменять порты у директив NameVirtualHost xx.xx.xx.xx:80 и VirtualHost xx.xx.xx.xx:81.
Повторяем попытку запуска:
/etc/init.d/apache2_srv start
Starting web server: apache2.
середа, 3 квітня 2013 р.
Защита от хакеров Linux Ubuntu
Чем интересней ресурс, тем выше вероятность того, что взломают сервер. Поэтому, приходится бороться со взломами, искать процессы и т.п.
1. Есть подозрение, что кто-то подключился к рабочему столу
Смотрим:
who
r tty7 2013-03-11 06:52 (:0)
r pts/2 2013-04-03 05:21 (192.168.3.62)
r pts/6 2013-04-03 08:27 (192.168.3.62)
r pts/5 2013-04-03 07:58 (192.168.3.62)
(unknown) tty8 2013-04-03 06:16 (:1)
(unknown) tty9 2013-04-03 08:28 (:2)
(unknown) tty10 2013-04-03 08:47 (:3)
Прежде всего, обращаем внимание на подозрительных пользователей. Так, например, пользователь (unknown) - это странное явление. Значит, нужно его выкинуть и закрыться от возможности его подключения.
Выполняем:
who -a -p
завантаження системи 2013-03-11 06:54
рівень виконання 2 2013-03-11 06:54
ВХІД tty4 2013-03-11 06:54 1575 id=4
ВХІД tty5 2013-03-11 06:54 1581 id=5
ВХІД tty2 2013-03-11 06:54 1588 id=2
ВХІД tty3 2013-03-11 06:54 1589 id=3
ВХІД tty6 2013-03-11 06:54 1593 id=6
r + tty7 2013-03-11 06:52 да 4824 (:0)
ВХІД tty1 2013-03-11 06:52 5937 id=1
pts/2 2013-03-11 06:57 0 id=/2 термінал=0 вихід=0
r + pts/2 2013-04-03 05:21 01:26 2104 (192.168.3.62)
r + pts/6 2013-04-03 08:27 . 409 (192.168.3.62)
pts/7 2013-03-11 11:45 0 id=/7 термінал=0 вихід=0
pts/8 2013-04-03 09:21 15957 id=ts/8 термінал=0 вихід=0
pts/10 2013-04-03 09:13 14507 id=s/10 термінал=0 вихід=0
pts/12 2013-03-11 10:18 19235 id=s/12 термінал=0 вихід=0
pts/14 2013-03-11 10:31 21030 id=s/14 термінал=0 вихід=0
r + pts/5 2013-04-03 07:58 00:05 23871 (192.168.3.62)
pts/3 2013-04-03 07:36 5537 id=ts/3 термінал=0 вихід=0
pts/7 2013-04-03 09:17 10140 id=ts/7 термінал=0 вихід=0
pts/9 2013-04-03 09:14 14013 id=ts/9 термінал=0 вихід=0
pts/11 2013-03-19 18:33 6218 id=s/11 термінал=0 вихід=0
pts/13 2013-03-11 22:14 17281 id=s/13 термінал=0 вихід=0
pts/15 2013-03-11 22:33 18853 id=s/15 термінал=0 вихід=0
pts/17 2013-03-11 21:52 19310 id=s/17 термінал=0 вихід=0
pts/6 2013-03-25 07:43 0 id=/6 термінал=0 вихід=0
pts/8 2013-03-25 07:43 0 id=/8 термінал=0 вихід=0
(unknown) + tty8 2013-04-03 06:16 да 5873 (:1)
(unknown) + tty9 2013-04-03 08:28 да 813 (:2)
tty10 2013-04-03 09:10 7691 id=:3 термінал=0 вихід=0
Убиваем злодея:
kill 5873 813
После того, как убили, анализируете, ищите, как он мог войти. Убираете возможность подключения не прошенных гостей.
2. Запрет удаленного подключения к X11 через ssh
По умолчанию, ssh разрешает запускать x11 через ssh. Т.е. можно запускать графические приложения linux на сервере, используя протокол ssh.
Как это делается, написано в статье: http://d51x.ru/page/udalennyj-dostup-x11-forwarding
Но, вопреки этому, советую все же данную возможность отключать.
Редактируем файл: /etc/ssh/sshd_config
Меняем выражение:
X11Forwarding no
Перезагружаем ssh:
3. Ограничиваем доступ по ssh
Редактируем все тот же конфигурационный файл для ssh: /etc/ssh/sshd_config
Желательно, сменить номер порта ssh (чтоб никто не знал, что там находится ssh :):
Port 22
Так же, можно изменить адрес, на котором слушает демон:
ListenAddress 0.0.0.0
Разрешаем вход по ssh только определенным пользователям:
AllowUsers user1 user2 user3
Перезагружаем ssh:
4. Настраиваем файервол
Устанавливаем расширение (настройки) для iptables:
apt-get install arno-iptables-firewall
Конфигурируем порты /etc/arno-iptables-firewall/conf.d
Например:
EXT_IF="eth0 ppp0"
EXT_IF_DHCP_IP=1
# 3343,4434 - Порты для администрирования svn
# 9000 - порт для darkstat
# 3389 - терминал Windows
# 1500 - ???
# 8080 - порт для доступа к svn
# 1500 - ISP админка
# 440 - новый номер порта для ssh
# 22 - был ssh УБРАН
OPEN_TCP="80,443,21,6543,47,3343,4434,8080,1500,440"
# 110,25,995
OPEN_UDP=""
INT_IF="eth1"
NAT=0
INTERNAL_NET="192.168.3.0/24"
NAT_INTERNAL_NET="eth1"
OPEN_ICMP=1
LAN_OPEN_TCP="80,443,21,6543,1723,47,3389,1500,9000,5900,440"
Перезагружаем:
invoke-rc.d arno-iptables-firewall restart
5. Из sudo удаляем лишних пользователей
Комментарим root, перечисляем наших пользователей-админов и комментарим доступ к sudo для груп администраторов и т.п.
Вот пример, того, что у меня получилось:
# User privilege specification
#root ALL=(ALL:ALL) ALL
r ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
#%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
#%sudo<>ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
6. Делаем сложный пароль для пользователя root
Хакеры пытаются подобрать пароль супер-пользователя root простым перебором. Поэтому, делайте пароль для данного пользователя не менее 12 символом и посложнее.
Для изменения пароля пользователя root, выполняем:
passwd root
7. Защита дыр в Apache.
Выполните команду:
Для того, чтоб убрать данную уязвимость, выполните:
sudo a2enmod headers
В Nginx пропишите:
Перезагрузите веб-сервис:
/etc/init.d/apache2 restart
1. Есть подозрение, что кто-то подключился к рабочему столу
Смотрим:
who
r tty7 2013-03-11 06:52 (:0)
r pts/2 2013-04-03 05:21 (192.168.3.62)
r pts/6 2013-04-03 08:27 (192.168.3.62)
r pts/5 2013-04-03 07:58 (192.168.3.62)
(unknown) tty8 2013-04-03 06:16 (:1)
(unknown) tty9 2013-04-03 08:28 (:2)
(unknown) tty10 2013-04-03 08:47 (:3)
Прежде всего, обращаем внимание на подозрительных пользователей. Так, например, пользователь (unknown) - это странное явление. Значит, нужно его выкинуть и закрыться от возможности его подключения.
Выполняем:
who -a -p
завантаження системи 2013-03-11 06:54
рівень виконання 2 2013-03-11 06:54
ВХІД tty4 2013-03-11 06:54 1575 id=4
ВХІД tty5 2013-03-11 06:54 1581 id=5
ВХІД tty2 2013-03-11 06:54 1588 id=2
ВХІД tty3 2013-03-11 06:54 1589 id=3
ВХІД tty6 2013-03-11 06:54 1593 id=6
r + tty7 2013-03-11 06:52 да 4824 (:0)
ВХІД tty1 2013-03-11 06:52 5937 id=1
pts/2 2013-03-11 06:57 0 id=/2 термінал=0 вихід=0
r + pts/2 2013-04-03 05:21 01:26 2104 (192.168.3.62)
r + pts/6 2013-04-03 08:27 . 409 (192.168.3.62)
pts/7 2013-03-11 11:45 0 id=/7 термінал=0 вихід=0
pts/8 2013-04-03 09:21 15957 id=ts/8 термінал=0 вихід=0
pts/10 2013-04-03 09:13 14507 id=s/10 термінал=0 вихід=0
pts/12 2013-03-11 10:18 19235 id=s/12 термінал=0 вихід=0
pts/14 2013-03-11 10:31 21030 id=s/14 термінал=0 вихід=0
r + pts/5 2013-04-03 07:58 00:05 23871 (192.168.3.62)
pts/3 2013-04-03 07:36 5537 id=ts/3 термінал=0 вихід=0
pts/7 2013-04-03 09:17 10140 id=ts/7 термінал=0 вихід=0
pts/9 2013-04-03 09:14 14013 id=ts/9 термінал=0 вихід=0
pts/11 2013-03-19 18:33 6218 id=s/11 термінал=0 вихід=0
pts/13 2013-03-11 22:14 17281 id=s/13 термінал=0 вихід=0
pts/15 2013-03-11 22:33 18853 id=s/15 термінал=0 вихід=0
pts/17 2013-03-11 21:52 19310 id=s/17 термінал=0 вихід=0
pts/6 2013-03-25 07:43 0 id=/6 термінал=0 вихід=0
pts/8 2013-03-25 07:43 0 id=/8 термінал=0 вихід=0
(unknown) + tty8 2013-04-03 06:16 да 5873 (:1)
(unknown) + tty9 2013-04-03 08:28 да 813 (:2)
tty10 2013-04-03 09:10 7691 id=:3 термінал=0 вихід=0
Убиваем злодея:
kill 5873 813
После того, как убили, анализируете, ищите, как он мог войти. Убираете возможность подключения не прошенных гостей.
2. Запрет удаленного подключения к X11 через ssh
По умолчанию, ssh разрешает запускать x11 через ssh. Т.е. можно запускать графические приложения linux на сервере, используя протокол ssh.
Как это делается, написано в статье: http://d51x.ru/page/udalennyj-dostup-x11-forwarding
Но, вопреки этому, советую все же данную возможность отключать.
Редактируем файл: /etc/ssh/sshd_config
Меняем выражение:
X11Forwarding no
Перезагружаем ssh:
/etc/init.d/ssh restart
3. Ограничиваем доступ по ssh
Редактируем все тот же конфигурационный файл для ssh: /etc/ssh/sshd_config
Желательно, сменить номер порта ssh (чтоб никто не знал, что там находится ssh :):
Port 22
Так же, можно изменить адрес, на котором слушает демон:
ListenAddress 0.0.0.0
Разрешаем вход по ssh только определенным пользователям:
AllowUsers user1 user2 user3
Перезагружаем ssh:
/etc/init.d/ssh restart
4. Настраиваем файервол
Устанавливаем расширение (настройки) для iptables:
apt-get install arno-iptables-firewall
Конфигурируем порты /etc/arno-iptables-firewall/conf.d
Например:
EXT_IF="eth0 ppp0"
EXT_IF_DHCP_IP=1
# 3343,4434 - Порты для администрирования svn
# 9000 - порт для darkstat
# 3389 - терминал Windows
# 1500 - ???
# 8080 - порт для доступа к svn
# 1500 - ISP админка
# 440 - новый номер порта для ssh
# 22 - был ssh УБРАН
OPEN_TCP="80,443,21,6543,47,3343,4434,8080,1500,440"
# 110,25,995
OPEN_UDP=""
INT_IF="eth1"
NAT=0
INTERNAL_NET="192.168.3.0/24"
NAT_INTERNAL_NET="eth1"
OPEN_ICMP=1
LAN_OPEN_TCP="80,443,21,6543,1723,47,3389,1500,9000,5900,440"
Перезагружаем:
invoke-rc.d arno-iptables-firewall restart
5. Из sudo удаляем лишних пользователей
Редактируем файл: /etc/sudoers
Комментарим root, перечисляем наших пользователей-админов и комментарим доступ к sudo для груп администраторов и т.п.
Вот пример, того, что у меня получилось:
# User privilege specification
#root ALL=(ALL:ALL) ALL
r ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
#%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
#%sudo<>ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
6. Делаем сложный пароль для пользователя root
Хакеры пытаются подобрать пароль супер-пользователя root простым перебором. Поэтому, делайте пароль для данного пользователя не менее 12 символом и посложнее.
Для изменения пароля пользователя root, выполняем:
passwd root
7. Защита дыр в Apache.
Выполните команду:
curl -I -H "Request-Range: bytes=0-1,0-2,0-3,0-4,0-5,0-6" -s Ваш домен/robots.txt | grep Partial
Если у Вас выдастся ответ 206 Partial Content, то это означает, что Ваш Apache имеет не плохую уязвимость.Для того, чтоб убрать данную уязвимость, выполните:
sudo a2enmod headers
В Nginx пропишите:
proxy_set_header Range "";
proxy_set_header Request-Range "";
В Apache пропишите:SetEnvIf Range (?:,.*?){5,5} bad-range=1
RequestHeader unset Range env=bad-range
RequestHeader unset Request-RangeПерезагрузите веб-сервис:
/etc/init.d/apache2 restart
вівторок, 2 квітня 2013 р.
Определение конфигурации компьютера в Linux
В Linux не нужно ставить специальное программное обеспечение для того, чтоб определить конфигурацию компьютера. Можно просто просмотреть некоторые из файлов в каталоге proc:
cat /proc/cpuinfo — CPU
cat /proc/meminfo — ОЗУ
cat /proc/interrupts — прерывания
cat /proc/swaps — вся информация про swap
cat /proc/version — версия ядра и другая информация
cat /proc/net/dev — сетевые интерфейсы и статистика
cat /proc/mounts — смонтированные устройства
cat /proc/partitions — доступные разделы
cat /proc/modules — загруженные модули ядра
cat /etc/issue — Посмотреть версию ОС
cat /proc/cpuinfo — CPU
cat /proc/meminfo — ОЗУ
cat /proc/interrupts — прерывания
cat /proc/swaps — вся информация про swap
cat /proc/version — версия ядра и другая информация
cat /proc/net/dev — сетевые интерфейсы и статистика
cat /proc/mounts — смонтированные устройства
cat /proc/partitions — доступные разделы
cat /proc/modules — загруженные модули ядра
cat /etc/issue — Посмотреть версию ОС
Підписатися на:
Дописи (Atom)
Життя після 1С та BAS: Великий огляд українського ринку ERP-систем та реальних альтернатив у 2026 році
На початку 2026 року історія з 1С та BAS в Україні остаточно перестала бути темою про звичку, інерцію чи бухгалтерський комфорт. Вона перейш...
-
Статья перехала в тематический блог: http://pravdak.blogspot.com На этом же блоге, обсуждаются только вопросы программирования, администри...