Restringir comandos SSH para um grupo de usuários

4

Estou tentando configurar um ambiente em que um número de usuários em um determinado grupo possa usar SSH em um servidor e, em seguida, executar um conjunto de comandos predefinidos, usando uma troca de chaves ou uma senha. Até agora me pediram para olhar para a seção "comandos" de authorized_keys, mas até onde eu sei, isso é útil apenas para usuários não humanos.

Existe uma maneira de listar ou colocar na lista negra um número de comandos para um determinado grupo de usuários?

Por exemplo, os usuários do grupo X devem poder ls , /etc/init.d , rm , mas nada mais.

    
por doque 19.11.2012 / 12:24

3 respostas

2

Você precisará criar um shell de comando restrito na linguagem de script de sua escolha e, em seguida, configurar o sshd para forçar o uso desse shell restrito para o grupo que você especificar.

Exemplo 8-1 e outras partes do SSH da O'Reilly, The Secure Shell Capítulo 8 mostrar maneiras de fazer o primeiro.

Para o último, consulte a descrição da diretiva Match em sshd_config(5) .

Como exemplo, você pode adicionar o seguinte a /etc/ssh/sshd_config :

Match Group X
ForceCommand /path/to/your/restricted_shell
    
por 19.11.2012 / 13:08
1

não tenho certeza se é adequado ao seu ambiente ou não, eu uso isso no meu env. a idéia é usar bash restrito, limpar $ PATH, proteger $ PATH e configurar $ PATH para $ HOME / bin, e então você apenas liga simbolicamente todos os binários que você tem permissão para rodar pelo usuário para $ 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
    
por 19.11.2012 / 15:28
0

Eu acho que a maneira correta de fazer isso é combinar chroot (ambiente controlado / limitado) com ssh

Você pode querer dar uma olhada neste guia link

    
por 19.11.2012 / 12:41