пятница, 20 апреля 2018 г.

RHCSA Lab / NFS, Apache, Repository, SMB

Картинка для привлечения внимания и подогревания интереса. Что в ней не так? Произойдет ли что-то "плохое", если её выполнить. ) Я просто хочу удалить симлинк.

Продолжаем. Итак, сегодня ставим NFS, Apache и создаем свой маленький репозиторий. 
Что и для чего я собираюсь использовать:
  • NFS - шареный ресурс, домашние папки для пользователей, dvd образ для установки по сети
  • Apache - репозиторий, возможно в качестве образа для установки по сети вместо NFS
Первым делом монтируем установочный диск и копируем все его содержимое в директорию dvd. В конце команды я использую &, что запускает копирование в бэкграунде. Отслеживать задачу можно по команде jobs.


Можно даже выйти с сервера, а задача будет выполняться.  


В директории Packages на диске находится репозиторий всего самого нужного. Это и будет наш будущий локальный репозиторий. Создаем все необходимое для этого с помощью createrepo

NFS

Это довольно интересный протокол, который создавался простым. Именно по этому у него не все так хорошо с аутентификацией. По сути, её почти нет. По умолчанию доступ ограничивается по имени хоста, подсети и UID пользователя. Конечно же, можно навернуть Kerberos, но это уже другая история. 

Порты
  • TCP/2049 используется непосредственно NFSv4
  • TCP/111 и TCP/20049 используются сервисами rpc-bind и mountd. Они несут несколько функций, одна из них - просмотр доступных шар с клиента. 
После установки убеждаемся, что файл /etc/exports пуст. Сюда записываются все доступные шары. Добавим первую. Разрешим доступ к /dvd всем хостам (*) на чтение (ro). Далее нем предстоит немного побороться с SELinux. Как видно (ls -lZ) у папки /dvd стоит контекст unlabeled_t, а это значит, что процесс nfs не сможет обращаться к этой папке. Нам нужно подправить контекст, например на nfs_t. Запускаем сервер.


Не забываем открыть доступ на файерволе. Для работы NFS хватит только сервиса nfs, но я открою и rpc-bind/mountd для тестов.  


Создаем ещё пару шар. Первая из них - /srv/homes. По моей задумке в ней будут домашние папки пользователей, которые будут автоматически подмонтироваться на сервере. Вторая директория просто для тестов - /srv/share. Не забываем проставить нужный контекст.

Далее пишем а /etc/exports две строчки разрешающие rw доступ на шары для всех хостов в домене rhcsalab.hi. Рестартуем сервер и проверяем доступность шар. В этот момент срабатывают два дополнительных сервиса - rpc-bind/mountd.  


Первое, что мы сделаем, подмонтируем корень / на localhost. По идее, эта процедура подмонтирует все директории, которые нам доступны на сервер localhost. Однако как видно ниже, мы получили доступ только к dvd. 


А что, если подмонтиовать корень, но уже по имени? В таком случае, мы получаем доступ ко всем трем шарам. 


Далее простой тест на монтирование и создание файла. Пока что все локально.  


Apache

Пришло время сделать доступным наш созданный репозиторий средствами Apache. Я решил сделать это добавив симлинк в /var/www/html


Но, после рестарта Apache, я получил ошибку о нехватке прав. Хм… но права в порядке…


Как это часто бывает в таких случаях, нужно смотреть в SELinux. Ниже видно, что /var/www/html имеет дефолтный контекст httpd_sys_content_t, тогда как на данные по симлинку я собственноручно поставил nfs_t. Немного почитав документацию, я нашел именно тот, контекст, что мне нужен - public_content_t. К этому контексту имеют доступ NFS, SAMBA, FTP, Apache и прочее такое. 


После смены контекста, мы видим содержимое нашего нового репозитория по ссылке http://srv1.rhcsalab.hi/repo. Теперь можно будет ставить систему по сети без использования DVD.

Samba

Перед настройкой SMB добавим пару пользователей, которые не имеют shell. В итоге, залогиниться на сервер по ssh, например, они не смогут. Далее, создаем группу samba и добавляем туда новых пользователей. Теперь нужно создать samba пароли для новых пользователей. Время создать нужную папку, назначить на неё нужную группу и права для этой группы.

 
Редактируем /etc/samba/smb.conf. Тут я убрал немного лишнего и добавил в качестве шары директорию /srv/sambashare с правами на запись для группы samba. Как видно, здесь же есть конфигурация, которая разрешает доступ пользователям к своим домашним папкам. Здесь я не стал наворачивать какой-то хитрой конфигурации. Моя задача сейчас подмонтировать директорию на клиента и все.


Проверяем конфигурацию и включаем/запускаем сервис samba smb.



Смотрим локально, что же доступно пользователю galya.



Однако не стоит забывать про файервол и SELinux. Добавим в firewall сервис smb samba (да что ж такое). Как видно, контекст тоже неверный var_t. Мы уже знаем, что в таких случаях можно использовать public_content_t или public_content_rw_t для разрешения на запись. Там правда ещё и boolean придется править... Короче, пока не будем выдумывать.


После таких манипуляций можно переходить к самому вкусному - DHCP+TFTP+Kickstart.

P.S.:

Ответ на картинку в начале поста. Это что-то похожее на swichport trunk allowed vlan.
Допустим, у меня есть симлинк и я хочу его удалить. Я, как крутой и самоуверенный linux-админ, дописываю -rf к команде. Да просто потому, что так пишут в многочисленных гайдах в сети. Далее, я очень привык пользоваться tab для завершения команды. К сожалению, в этом случае tab поставит / в конце команды.
В итоге, выполнение такой команды удалит все содержимое папки по симлинку, но не сам cимлинк. Во-первых, не стоит использовать -rf там где не надо использовать rf, как видно на картинке внизу вас предупредят о том, что вы делаете что-то не то. Лучше чтобы система вас лишний раз спросила. Во-вторых, не нужно следить за / в конце команды или не использовать tab (нереально).


Комментариев нет:

Отправить комментарий