Назад | Перейти на главную страницу

Ограничить команды SSH для группы пользователей

Я пытаюсь создать среду, в которой несколько пользователей в определенной группе могут подключаться к серверу по SSH, а затем выполнять на нем набор предопределенных команд, используя либо обмен ключами, либо пароль. До сих пор мне сказали заглянуть в раздел «commands» authorized_keys, но, насколько я могу судить, это полезно только для пользователей, не являющихся людьми.

Есть ли способ внести в черный или белый список ряд команд для определенной группы пользователей?

Например, пользователи в группе X должны иметь возможность ls, /etc/init.d, rm, но больше ничего.

Вам нужно будет создать ограниченную командную оболочку на выбранном вами языке сценариев, а затем настроить sshd, чтобы принудительно использовать эту ограниченную оболочку для указанной вами группы.

Пример 8-1 и другие следующие части SSH О'Рейли, The Secure Shell Глава 8 покажите способы сделать первое.

Для последнего см. Match описание директивы в sshd_config(5).

В качестве примера вы можете добавить следующее к /etc/ssh/sshd_config:

Match Group X
ForceCommand /path/to/your/restricted_shell

не уверен, что это подходит для вашей среды или нет, я использую это на своем env. идея состоит в том, чтобы использовать ограниченный bash, очистить $ PATH, защитить $ PATH и установить $ PATH в $ HOME / bin, а затем вы просто создаете символическую ссылку на все двоичные файлы, которые вы разрешили запускать пользователем, в $ HOME / bin.

 -------------------------------------------
#!/bin/bash

USERS="user"

PASS=secret
ALLOWED_CMDS="/bin/ping
/usr/bin/killall
/bin/ps
"

# creating restricted bash
ln -s /bin/bash /bin/rbash

for user in ${USERS}; do
        home=/home/${user}
        echo useradd --comment \"CDM user with restricted shell\" --home-dir ${home} --shell /bin/rbash ${user}
        useradd --comment "CDM user with restricted shell" --home-dir ${home} --shell /bin/rbash ${user}
        echo "set password for ${user}"
        echo ${PASS} | passwd ${user} --stdin
        if [ -d ${home} ]; then
                # deleting unneeded files
                files=".bashrc .bash_history .bash_logout .bash_profile  .emacs  .mozilla"
                for file in ${files}; do
                     rm -rfv ${home}/${file}
                done

               # creating bin dir and profile
                echo "export PATH=\$HOME/bin"> /home/$user/.profile
                echo "export PS1=\"[\u@\h \W]$ \"">> /home/$user/.profile

                mkdir ${home}/bin
                chmod -R 755 ${home}
                chown -R root:root ${home}
                chmod 750 ${home}/.profile
                chown root:${user} ${home}/.profile

                chmod 2070 /home/$user
                chown root:$user /home/$user

                # allowed specific commands only
                echo "creating symlinks for allowed commands.."
                for cmd in ${ALLOWED_CMDS}; do
                    ln -sv ${cmd} ${home}/bin/
                done
        fi
done
 -------------------------------------------

 [root@puppet tmp]# sh create_user.sh
 [root@puppet tmp]# su -l user
 [user@puppet ~]$ ping
 Usage: ping [-LRUbdfnqrvVaA] [-c count] [-i interval] [-w deadline]
 [user@puppet ~]$ ls
 -rbash: ls: command not found
 [user@puppet ~]$ cd
 -rbash: cd: restricted
 [user@puppet ~]$ pwd
 /home/user
 [user@puppet ~]$ ps
 PID TTY          TIME CMD
 9605 pts/1    00:00:00 rbash
 9629 pts/1    00:00:00 ps
 [user@puppet ~]$ killall
 Usage: killall [-Z CONTEXT] [-u USER] [ -eIgiqrvw ] [ -SIGNAL ] NAME...
 [user@puppet ~]$ nc
 -rbash: nc: command not found
 [user@puppet ~]$ nmap
 -rbash: nmap: command not found

Я думаю, что правильный способ сделать это - объединить chroot(контролируемая / ограниченная среда) с ssh

Вы можете ознакомиться с этим руководством http://www.techrepublic.com/blog/opensource/chroot-users-with-openssh-an-easier-way-to-confine-users-to-their-home-directories/229