2026-02-05 21:44:30 +03:00
2026-02-05 21:44:30 +03:00

Домашнее задание 24

Пользователи и группы. Авторизация и аутентификация

Для выполнение задания используется Ubuntu 22.04

Настройка

Создадим двух пользователей, user и useradmin.

При создании пользователя user, группа user создастся автоматически. А вот пользователя useradmin мы при создании добавляем в группц admin


root@ubuntu-jammy:~# adduser user 
Adding user `user' ...
Adding new group `user' (1002) ...
Adding new user `user' (1002) with group `user' ...
Creating home directory `/home/user' ...
Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for user
Enter the new value, or press ENTER for the default
  Full Name []: 
  Room Number []: 
  Work Phone []: 
  Home Phone []: 
  Other []: 
Is the information correct? [Y/n] 
root@ubuntu-jammy:~# adduser useradmin --ingroup admin
Adding user `useradmin' ...
Adding new user `useradmin' (1003) with group `admin' ...
Creating home directory `/home/useradmin' ...
Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for useradmin
Enter the new value, or press ENTER for the default
  Full Name []: 
  Room Number []: 
  Work Phone []: 
  Home Phone []: 
  Other []: 
Is the information correct? [Y/n] y

С помощью vim, содаем скрипт /usr/local/bin/login.sh.

#!/bin/bash

#Проверяем группу пользователя, если группа не admin, то будем проверять день недели
if [ $(id -nG "$PAM_USER") != "admin" ] 
then
  #проверяем день недели, если суббота или восскресенье, то не пускаем
  if [[ $(date +%u) > 5 ]]
  then
    exit 0
  else
    exit 1
  fi
else 
  exit 0
fi 

Скрипт работет следующим образом:

  1. Смотрит группу пользователся, если группа пользователя admin, то скрипт завершает работу
  2. Если группа не admin, то скрипт начинает проверять текущий день недели
  3. Если день недели больше 5 (это суббота и восскресенье), то скрипт завершается ошибкой, иначе завершается корректно.

Сделаем наш скрипт исполняемым

root@ubuntu-jammy:/# chmod +x /usr/local/bin/login.sh

Добавим в /etc/pam.d/sshd наш скрипт

root@ubuntu-jammy:/# echo "auth required pam_exec.so debug /usr/local/bin/login.sh" >> /etc/pam.d/sshd

Проверим выполнение (на VM перевел дату 31.01.2026, это суббота). Подключаемя под пользователем user

alex@ubuntu-pc:~/otus/dz24$ ssh user@192.168.50.33
(user@192.168.50.33 Password: 
/usr/local/bin/login.sh failed: exit code 1

(user@192.168.50.33) Password: 
/usr/local/bin/login.sh failed: exit code 1

(user@192.168.50.33) Password: 
/usr/local/bin/login.sh failed: exit code 1

user@192.168.50.33: Permission denied (publickey,keyboard-interactive).

Тут при верно введенном пароле мы видим строку /usr/local/bin/login.sh failed: exit code 1, это наш скрипт выводит ошибку, так как день недели в VM суббота

Все готово! Задание выполнено!

Description
PAM. Авторизация и аутентификация
Readme 29 KiB