Исправление ошибок прав доступа WireGuard в Terraform
При автоматической настройке WireGuard с помощью Terraform и provisioner remote-exec часто возникают ошибки, связанные с правами доступа к файлам. Типичные проблемы включают отказ в создании директории /etc/wireguard, невозможность записи ключей и конфигурационных файлов. В этой статье разберём, как корректно настроить права и избежать ошибок.
Почему возникают ошибки прав доступа?
Основная причина - выполнение команд от имени обычного пользователя altlinux, у которого недостаточно привилегий для работы с системными каталогами. Команда sudo su в начале скрипта не решает проблему, так как последующие команды всё равно выполняются в контексте исходного пользователя. Кроме того, пакет wireguard-tools может называться иначе в дистрибутиве Alt Linux.
Как правильно настроить права доступа
Вместо sudo su используйте sudo перед каждой командой, требующей повышенных привилегий. Это гарантирует выполнение с нужными правами. Например, создание директории и установка пакетов должны выполняться через sudo.
Создание директории и установка WireGuard
Первым делом создайте каталог /etc/wireguard и установите пакет. В Alt Linux пакет называется wireguard-tools или wireguard. Уточните название в вашем дистрибутиве.
sudo mkdir -p /etc/wireguard
sudo apt-get install -y wireguard-toolsГенерация ключей с правильными правами
Ключи должны создаваться с правами 600 (только чтение для владельца). Используйте umask перед генерацией:
sudo umask 077 && sudo wg genkey | sudo tee /etc/wireguard/server.key | sudo wg pubkey | sudo tee /etc/wireguard/server.pub
sudo umask 077 && sudo wg genkey | sudo tee /etc/wireguard/client.key | sudo wg pubkey | sudo tee /etc/wireguard/client.pubСоздание конфигурационного файла
Файл wg0.conf должен принадлежать root и иметь права 600. Используйте sudo для записи:
sudo bash -c 'echo -e "[Interface]\nAddress = 10.0.0.1/24\nPrivateKey = $(sudo cat /etc/wireguard/server.key)\nListenPort = 51820\n\n[Peer]\nPublicKey = $(sudo cat /etc/wireguard/client.pub)\nAllowedIPs = 10.0.0.2/32" > /etc/wireguard/wg0.conf'Полный исправленный скрипт для Terraform
Ниже приведён корректный блок provisioner, который решает проблемы с правами доступа и установкой пакетов на Alt Linux.
provisioner "remote-exec" {
inline = [
"sudo mkdir -p /etc/wireguard",
"sudo apt-get update",
"sudo apt-get install -y wireguard-tools",
"sudo umask 077 && sudo wg genkey | sudo tee /etc/wireguard/server.key | sudo wg pubkey | sudo tee /etc/wireguard/server.pub",
"sudo umask 077 && sudo wg genkey | sudo tee /etc/wireguard/client.key | sudo wg pubkey | sudo tee /etc/wireguard/client.pub",
"sudo bash -c 'echo -e \"[Interface]\\nAddress = 10.0.0.1/24\\nPrivateKey = $(sudo cat /etc/wireguard/server.key)\\nListenPort = 51820\\n\\n[Peer]\\nPublicKey = $(sudo cat /etc/wireguard/client.pub)\\nAllowedIPs = 10.0.0.2/32\" > /etc/wireguard/wg0.conf'",
"sudo bash -c 'echo -e \"[Interface]\\nAddress = 10.0.0.2/24\\nPrivateKey = $(sudo cat /etc/wireguard/client.key)\\n\\n[Peer]\\nPublicKey = $(sudo cat /etc/wireguard/server.pub)\\nEndpoint = ${yandex_compute_instance.webadm.network_interface.0.nat_ip_address}:51820\\nAllowedIPs = 0.0.0.0/0\" > /etc/wireguard/wg0.conf'",
"sudo systemctl enable wg-quick@wg0",
"sudo systemctl start wg-quick@wg0"
]
}Распространённые ошибки и их решение
- Ошибка «E: Couldn't find package wireguard» - проверьте название пакета в вашем дистрибутиве. Для Alt Linux используйте
wireguard-tools. - Ошибка «wg: command not found» - пакет не установлен или не добавлен в PATH. Установите wireguard-tools и перезапустите сессию.
- Ошибка «No such file or directory» для /etc/wireguard - создайте директорию заранее с помощью
sudo mkdir -p /etc/wireguard. - Ошибка «Unit file wg-quick@wg0.service does not exist» - убедитесь, что wg-quick установлен. В некоторых дистрибутивах он входит в отдельный пакет.
FAQ по настройке WireGuard в Terraform
Ниже собраны ответы на частые вопросы пользователей, сталкивающихся с проблемами прав доступа при развёртывании WireGuard.