Исправление работы с правами каталогов + скрипт установки 2
This commit is contained in:
36
main.go
36
main.go
@@ -77,6 +77,23 @@ func parseRepositoryFromPlugin(filePath string) (string, error) {
|
|||||||
return "", scanner.Err()
|
return "", scanner.Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fixRepoPermissions рекурсивно устанавливает права 775 для директорий и 664 для файлов
|
||||||
|
func fixRepoPermissions(path string) error {
|
||||||
|
return filepath.Walk(path, func(filePath string, info os.FileInfo, err error) error {
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if info.IsDir() {
|
||||||
|
// Устанавливаем права 2775 для директорий (setgid)
|
||||||
|
return os.Chmod(filePath, 0o2775)
|
||||||
|
} else {
|
||||||
|
// Устанавливаем права 664 для файлов
|
||||||
|
return os.Chmod(filePath, 0o664)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
configPath := pflag.StringP("config", "c", "/etc/alr-updater/config.toml", "Path to config file")
|
configPath := pflag.StringP("config", "c", "/etc/alr-updater/config.toml", "Path to config file")
|
||||||
dbPath := pflag.StringP("database", "d", "/var/lib/alr-updater/db", "Path to database file")
|
dbPath := pflag.StringP("database", "d", "/var/lib/alr-updater/db", "Path to database file")
|
||||||
@@ -145,12 +162,12 @@ func main() {
|
|||||||
// Создаем директорию для базы данных, если её нет
|
// Создаем директорию для базы данных, если её нет
|
||||||
dbDir := filepath.Dir(*dbPath)
|
dbDir := filepath.Dir(*dbPath)
|
||||||
if _, err := os.Stat(dbDir); os.IsNotExist(err) {
|
if _, err := os.Stat(dbDir); os.IsNotExist(err) {
|
||||||
err = os.MkdirAll(dbDir, 0o755)
|
err = os.MkdirAll(dbDir, 0o2775)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Error creating database directory").
|
log.Fatal("Error creating database directory").
|
||||||
Err(err).
|
Err(err).
|
||||||
Str("path", dbDir).
|
Str("path", dbDir).
|
||||||
Str("hint", "Run as root or create directory manually: sudo mkdir -p "+dbDir+" && sudo chown alr-updater:alr-updater "+dbDir).
|
Str("hint", "Run as root or create directory manually: sudo mkdir -p "+dbDir+" && sudo chown root:wheel "+dbDir+" && sudo chmod 2775 "+dbDir).
|
||||||
Send()
|
Send()
|
||||||
}
|
}
|
||||||
log.Info("Created database directory").Str("path", dbDir).Send()
|
log.Info("Created database directory").Str("path", dbDir).Send()
|
||||||
@@ -167,12 +184,12 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if _, err := os.Stat(cfg.ReposBaseDir); os.IsNotExist(err) {
|
if _, err := os.Stat(cfg.ReposBaseDir); os.IsNotExist(err) {
|
||||||
err = os.MkdirAll(cfg.ReposBaseDir, 0o755)
|
err = os.MkdirAll(cfg.ReposBaseDir, 0o2775)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Error creating repositories base directory").
|
log.Fatal("Error creating repositories base directory").
|
||||||
Err(err).
|
Err(err).
|
||||||
Str("path", cfg.ReposBaseDir).
|
Str("path", cfg.ReposBaseDir).
|
||||||
Str("hint", "Run as root or create directory manually: sudo mkdir -p "+cfg.ReposBaseDir+" && sudo chown alr-updater:alr-updater "+cfg.ReposBaseDir).
|
Str("hint", "Run as root or create directory manually: sudo mkdir -p "+cfg.ReposBaseDir+" && sudo chown root:wheel "+cfg.ReposBaseDir+" && sudo chmod 2775 "+cfg.ReposBaseDir).
|
||||||
Send()
|
Send()
|
||||||
}
|
}
|
||||||
log.Info("Created repositories base directory").Str("path", cfg.ReposBaseDir).Send()
|
log.Info("Created repositories base directory").Str("path", cfg.ReposBaseDir).Send()
|
||||||
@@ -187,7 +204,7 @@ func main() {
|
|||||||
if _, err := os.Stat(repoDir); os.IsNotExist(err) {
|
if _, err := os.Stat(repoDir); os.IsNotExist(err) {
|
||||||
log.Info("Cloning repository").Str("name", repoName).Str("url", repoConfig.RepoURL).Send()
|
log.Info("Cloning repository").Str("name", repoName).Str("url", repoConfig.RepoURL).Send()
|
||||||
|
|
||||||
err = os.MkdirAll(repoDir, 0o755)
|
err = os.MkdirAll(repoDir, 0o2775)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Error creating repository directory").Str("repo", repoName).Err(err).Send()
|
log.Fatal("Error creating repository directory").Str("repo", repoName).Err(err).Send()
|
||||||
}
|
}
|
||||||
@@ -200,6 +217,11 @@ func main() {
|
|||||||
log.Fatal("Error cloning repository").Str("repo", repoName).Err(err).Send()
|
log.Fatal("Error cloning repository").Str("repo", repoName).Err(err).Send()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Исправляем права доступа после клонирования
|
||||||
|
if err := fixRepoPermissions(repoDir); err != nil {
|
||||||
|
log.Error("Error fixing repository permissions").Str("repo", repoName).Err(err).Send()
|
||||||
|
}
|
||||||
|
|
||||||
log.Info("Repository cloned successfully").Str("name", repoName).Send()
|
log.Info("Repository cloned successfully").Str("name", repoName).Send()
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
log.Fatal("Cannot stat repository directory").Str("repo", repoName).Err(err).Send()
|
log.Fatal("Cannot stat repository directory").Str("repo", repoName).Err(err).Send()
|
||||||
@@ -215,12 +237,12 @@ func main() {
|
|||||||
|
|
||||||
// Создаем директорию для плагинов, если её нет
|
// Создаем директорию для плагинов, если её нет
|
||||||
if _, err := os.Stat(*pluginDir); os.IsNotExist(err) {
|
if _, err := os.Stat(*pluginDir); os.IsNotExist(err) {
|
||||||
err = os.MkdirAll(*pluginDir, 0o755)
|
err = os.MkdirAll(*pluginDir, 0o2775)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Error creating plugin directory").
|
log.Fatal("Error creating plugin directory").
|
||||||
Err(err).
|
Err(err).
|
||||||
Str("path", *pluginDir).
|
Str("path", *pluginDir).
|
||||||
Str("hint", "Run as root or create directory manually: sudo mkdir -p "+*pluginDir+" && sudo chown root:alr-updater "+*pluginDir).
|
Str("hint", "Run as root or create directory manually: sudo mkdir -p "+*pluginDir+" && sudo chown root:wheel "+*pluginDir+" && sudo chmod 2775 "+*pluginDir).
|
||||||
Send()
|
Send()
|
||||||
}
|
}
|
||||||
log.Info("Created plugin directory").Str("path", *pluginDir).Send()
|
log.Info("Created plugin directory").Str("path", *pluginDir).Send()
|
||||||
|
@@ -20,19 +20,21 @@ fi
|
|||||||
BINARY_PATH="/usr/local/bin/alr-updater"
|
BINARY_PATH="/usr/local/bin/alr-updater"
|
||||||
SERVICE_NAME="alr-updater"
|
SERVICE_NAME="alr-updater"
|
||||||
SERVICE_USER="alr-updater"
|
SERVICE_USER="alr-updater"
|
||||||
SERVICE_GROUP="alr-updater"
|
SERVICE_GROUP="wheel"
|
||||||
CONFIG_DIR="/etc/alr-updater"
|
CONFIG_DIR="/etc/alr-updater"
|
||||||
DATA_DIR="/var/lib/alr-updater"
|
DATA_DIR="/var/lib/alr-updater"
|
||||||
CACHE_DIR="/var/cache/alr-updater"
|
CACHE_DIR="/var/cache/alr-updater"
|
||||||
PLUGIN_DIR="${CONFIG_DIR}/plugins"
|
PLUGIN_DIR="${CONFIG_DIR}/plugins"
|
||||||
|
|
||||||
# Создание пользователя и группы
|
# Создание пользователя и добавление в группу wheel
|
||||||
echo -e "${YELLOW}Creating user and group...${NC}"
|
echo -e "${YELLOW}Creating user and adding to wheel group...${NC}"
|
||||||
if ! id -u ${SERVICE_USER} >/dev/null 2>&1; then
|
if ! id -u ${SERVICE_USER} >/dev/null 2>&1; then
|
||||||
useradd -r -s /bin/false -d /var/lib/${SERVICE_USER} ${SERVICE_USER}
|
useradd -r -s /bin/false -d /var/lib/${SERVICE_USER} -G wheel ${SERVICE_USER}
|
||||||
echo -e "${GREEN}User ${SERVICE_USER} created${NC}"
|
echo -e "${GREEN}User ${SERVICE_USER} created and added to wheel group${NC}"
|
||||||
else
|
else
|
||||||
echo -e "${GREEN}User ${SERVICE_USER} already exists${NC}"
|
# Добавляем существующего пользователя в группу wheel
|
||||||
|
usermod -a -G wheel ${SERVICE_USER}
|
||||||
|
echo -e "${GREEN}User ${SERVICE_USER} already exists, added to wheel group${NC}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Создание директорий
|
# Создание директорий
|
||||||
@@ -42,15 +44,15 @@ mkdir -p ${DATA_DIR}
|
|||||||
mkdir -p ${CACHE_DIR}
|
mkdir -p ${CACHE_DIR}
|
||||||
mkdir -p ${PLUGIN_DIR}
|
mkdir -p ${PLUGIN_DIR}
|
||||||
|
|
||||||
# Установка прав доступа
|
# Установка прав доступа с setgid битом
|
||||||
echo -e "${YELLOW}Setting permissions...${NC}"
|
echo -e "${YELLOW}Setting permissions with setgid...${NC}"
|
||||||
chown -R ${SERVICE_USER}:${SERVICE_GROUP} ${DATA_DIR}
|
chown -R root:${SERVICE_GROUP} ${DATA_DIR}
|
||||||
chown -R ${SERVICE_USER}:${SERVICE_GROUP} ${CACHE_DIR}
|
chown -R root:${SERVICE_GROUP} ${CACHE_DIR}
|
||||||
chown -R root:${SERVICE_GROUP} ${CONFIG_DIR}
|
chown -R root:${SERVICE_GROUP} ${CONFIG_DIR}
|
||||||
chmod 755 ${CONFIG_DIR}
|
chmod 2775 ${CONFIG_DIR}
|
||||||
chmod 755 ${PLUGIN_DIR}
|
chmod 2775 ${PLUGIN_DIR}
|
||||||
chmod 755 ${DATA_DIR}
|
chmod 2775 ${DATA_DIR}
|
||||||
chmod 755 ${CACHE_DIR}
|
chmod 2775 ${CACHE_DIR}
|
||||||
|
|
||||||
# Копирование бинарника
|
# Копирование бинарника
|
||||||
if [ -f "./alr-updater" ]; then
|
if [ -f "./alr-updater" ]; then
|
||||||
|
Reference in New Issue
Block a user