Показаны сообщения с ярлыком selinux. Показать все сообщения
Показаны сообщения с ярлыком selinux. Показать все сообщения

среда, 22 марта 2017 г.

Настройка входа SSH с авторизацией по ключам и включенным SELinux

Генерация публичного ключа

Для начала нужен ключ, по которму будет происходить авторизация. Если ещё нет ключа, то его нужно создать командой
$ ssh-keygen

Простой способ

Обнаружил, что в CentOS 7 добавли утилиту ssh-copy-id в базовый набор. Ей пользоваться немного проще.

Добавить ключ на удалённую машину server можно командой на клиентской машине
$ ssh-copy-id user@server
Где user нужное имя пользователя, а server адрес сервера.

Способ посложнее

Если же ssh-copy-id у вас нет, то можно скопировать ключ командами
$ cat ~/.ssh/id_rsa.pub | ssh user@server 'cat >> .ssh/authorized_keys'
$ ssh user@server 'chmod 600 .ssh/authorized_keys'
Где id_rsa.pub публичный ключ.

Возможные проблемы

В теории, команд выше должно быть достаточно. На практике иногда не работает.
Для начала стоит проверить права на файл $HOME/.ssh/authorized_keys, файл должен принадлежать пользователю и иметь права доступа 600.
Затем стоит проверить лог /var/log/audit/audit.log на предмет ошибок с меткой ssh_home_t. Если таковые имеются, исправить метки на удалённой машине командой
$ sudo restorecon -r -vv $HOME/.ssh

Взято отсюда

среда, 6 июля 2016 г.

Изменение стандартного порта SSH в CentOS 7 с включенным SELinux

Решил сменить стандартный порт для SSH. В примере указан порт 2222, но можно задать другой. В конце есть скрипт для автоматизации.

Бэкап

# cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.orig.$(date +%F)

Смена порта в конфиге

Нужно заменить строку #Port 22 на Port 2222
# vi /etc/ssh/sshd_config
Port 2222

Разрешение порта на фаерволе

# firewall-cmd --permanent --zone=public --add-port=2222/tcp
# firewall-cmd --reload

Разрешение для SELinux

# semanage port -a -t ssh_port_t -p tcp 2222

Если semanage не установлен

# yum install policycoreutils-python

Применение настроек и перезапуск sshd

systemctl restart sshd.service

Проверка

# semanage port -l | grep ssh
ssh_port_t                     tcp      2292, 22
# ss -ntlp | grep ssh
LISTEN     0    128    *:22334      *:*     users:(("sshd",pid=29616,fd=3))
LISTEN     0    128   :::22334     :::*     users:(("sshd",pid=29616,fd=4))

Скрипт на bash

Порт 2222 следует заменить на нужный

#!/bin/bash
PORT_SSH = 2222
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.orig.$(date +%F)
sed "s/^[#\s]*Port .*/Port ${PORT_SSH}/"
firewall-cmd --permanent --zone=public --add-port=${PORT_SSH}/tcp
firewall-cmd --reload
yum install -y policycoreutils-python
semanage port -a -t ssh_port_t -p tcp ${PORT_SSH}
systemctl restart sshd.service

вторник, 5 июля 2016 г.

Установка Jenkins на CentOS 7 с nginx


Задался целью установить Jenkins на поддомен, желательно с https.

В общем случае задача простая и описана в официальном wiki. У меня сервер ещё голый, потому начнём с нуля.

Подклчение remi

# yum install epel-release
# rpm -ivh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# subscription-manager repos --enable=rhel-7-server-optional-rpms

Подключение репозитория с Jenkins

# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
# rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key

Установка

# yum install java-1.7.0-openjdk nginx jenkins

Настройка фаервола

# firewall-cmd --zone=public --add-service=http --permanent
# firewall-cmd --zone=public --add-service=https --permanent
# firewall-cmd --reload

Настройка SELinux (если включен)

# setsebool -P httpd_can_network_connect 1
Без этой опции nginx не сможет подключиться к jenkins и будет ошибка (13: Permission denied) while connecting to upstream

Настройка nginx на reverse proxy (wiki)

cat > /etc/nginx/conf.d/jenkins.conf
upstream jenkins {
  server 127.0.0.1:8080 fail_timeout=0;
}

server {
  listen 80;
  server_name jenkins.domain.tld;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl;
  server_name jenkins.domain.tld;

  ssl_certificate     /etc/nginx/ssl/server.crt;
  ssl_certificate_key /etc/nginx/ssl/server.key;

  location / {
    proxy_set_header        Host $host:$server_port;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_redirect          http://127.0.0.1:8080 https://jenkins.domain.tld;
    proxy_pass              http://jenkins;
  }
}
^D # Нажмите CTRL + D чтобы закончить запись файла

Нужно заменить jenkins.domain.tld на свой хост и исправить пути к сертификатам (у меня они остались со старого сервера).

Запуск

# systemctl enable nginx
# systemctl enable jenkins
# systemctl restart nginx
# systemctl restart jenkins

Проверка

Если всё сделано правильно, то по ссылке https://jenkins.domain.tld будет доступен Jenkins. Обычно ему нужно некоторое время, чтобы полностью запуститься.

Заключение

Рекомендуется сразу включить режим безопасности (Enable security) в Jenkins. По дальнейшей настройке хорошо написано в  wiki.