Saltar al contenido

Cómo limitar los comandos de usuario en Linux

Después de mucho batallar ya encontramos la contestación de este dilema que agunos usuarios de nuestro espacio presentan. Si quieres compartir alguna información no dejes de aportar tu información.

Solución:

Hay muchas formas diferentes de lograrlo. Voy a enumerar una de varias posibles soluciones.

Propondría usar varias capas diferentes de protección para evitar que los usuarios ejecuten los comandos a los que no se les debería permitir acceder. Todas las instrucciones aquí asumen que los usuarios tienen sus propias /home/[username] directorio, que su shell es /bin/bash y le gustaría que usen el shell bash cuando inicien sesión en el sistema.

1) Cambie el bash del usuario al modo bash restringido para que no puedan cambiar de directorio (si no tiene un modo bash restringido en su sistema, este enlace le ayudará y le dará más información)
chsh -s /bin/rbash [username]

2) Cambie los permisos del directorio para que solo el usuario pueda editar el contenido de su directorio de inicio

chmod 755 /home/[username]

3) Eliminar el usuario .bashrc expediente

rm /home/[username]/.bashrc Este sitio tiene más información sobre por qué podría ser una buena idea eliminar el .bashrc en esta situación.

4) Crea un .bash_profile y agregue alias “seguros” para todos los comandos que le gustaría deshabilitar

Ejemplo de archivo ./bash_profile

alias apt-get="printf ''"  
alias aptitude="printf ''"  
[...]  
alias vi="vi -Z" #this is vi's safe mode and shell commands won't be run from within vi
alias alias="printf ''"  

R Por favor, consulte la lista completa de comandos de bash para obtener más información. Debe asegurarse de que el alias alias="printf ''" comando es el último comando de la lista, de lo contrario perderá la capacidad de asignar un alias a todos esos comandos.

Nota
Al ejecutar los comandos a continuación, se buscarán casi todos los comandos disponibles en su sistema y generará un archivo listo para usar con casi todos los comandos disponibles con alias. los [ comando es el test mando en bash. Entonces, si ve eso en el archivo, no es un error.

#search /bin and /usr/bin for any commands that exist on our system
ls /bin -1 > commands_on_system.txt && ls /usr/bin -1 >> commands_on_system.txt

#format and save this information to a bash variable
IFS=$'n' GLOBIGNORE='*' command eval  'COMMANDS_ON_SYSTEM=($(cat ./commands_on_system.txt))'
IFS=$'n' COMMANDS_ON_SYSTEM=($(sort <<<"$COMMANDS_ON_SYSTEM[*]"))
unset IFS

#save these commands in aliased format for easy usage
for linux_command in "$COMMANDS_ON_SYSTEM[@]"
do :
   #you can change how this works to automatically
   #setup the command file for you 
   echo "alias $linux_command="printf ''"" >> ./startup_functions_for_beginners.sh
done

5) Deshabilite los comandos de shell en vi asignando un alias al comando vi al modo restringido
La sintaxis es alias vi="vi -Z", pero consulte este sitio para obtener más información.

6) Cambiar la propiedad del usuario .bash_profile a raíz
chown root:root /home/[username]/.bash_profile

7) Finalmente, elimine los permisos de escritura en el usuario. .bash_profile
chmod 755 /home/[username/.bash_profile]

Ahora, cuando los usuarios inicien sesión, no podrán cambiar de directorio, todos los comandos que no desee que utilicen generarán la misma información que si el usuario presionara el [ENTER] key sin comando especificado, y su /bin/bash las funciones permanecen intactas.

Dependiendo de las funciones que elija o no alias de esta manera, es posible que los usuarios aún puedan eludir algunos de los controles que implementó. Sin embargo, dado que implementamos algunos búferes de seguridad, el usuario realmente tendría que conocer los sistemas informáticos para hacer algo peligroso.

En una nota relacionada y algo que quizás desee considerar, si coloca directamente estos alias en todos y cada uno de los usuarios .bash_profile Tendría dificultades para mantener qué funciones deben y no deben tener un alias, y si necesita cambiar el alias en algo, tendrá que cambiarlas todas individualmente. Además, dado que los usuarios pueden usar vim o vi para ver archivos, podían ver el contenido de sus .bash_profile y comprender qué restricciones tienen y qué no.

Para evitar esto, sugeriría.

1) Poner todos los alias en un directorio no accesible para los usuarios (pegar el contenido del .bash_profile aquí)

/[path_to_file]/startup_functions_for_beginners.sh

2) Obtener los alias en su .bash_profile

ejemplo de archivo ./bash_profile mejorado

if [[ -f /[path_to_file]/startup_functions_for_beginners.sh ]]; then
    . /[path_to_file]/startup_functions_for_beginners.sh
fi

Esto debería ponerlo en su camino, pero recuerde que casi siempre hay formas de eludir las restricciones.

Además, no dude en volver a mezclar la información de esta respuesta para que se adapte a sus necesidades. Definitivamente, estos también pueden combinarse con otras restricciones.

P: Necesito que los usuarios tengan acceso a fg y bg, pero no quiero que puedan acceder aptitude o bash

alias apt-get="printf ''"  #the user won't be able to run this  
alias aptitude="printf ''"  #the user won't be able to run this  
alias bash="printf ''"  #the user won't be able to run this  
#alias fg="printf ''" #this will run as a bash built-in  
#alias bg="printf ''" #you actually don't need to include these in your script  

Lista de comandos comunes según este sitio web de Harvard (NO EXHAUSTIVO)

A medida que instala programas en Linux, lo que tiene disponible cambia. Le sugiero que ejecute los comandos enumerados anteriormente en el paso 4 para ayudar a encontrar nuevos comandos después de que se hayan instalado.

Se debe tener cuidado con los editores porque algunos permiten la exclusión de comandos de shell desde dentro del programa.

nano
emacs
pico
sed
vi
vim  

Todo lo demas

exit
logout
passwd
rlogin
ssh
slogin
yppasswd
mail
mesg
pine
talk
write
as
awk
bc
cc
csh
dbx
f77
gdb
gprof
kill
ld
lex
lint
make
maple
math
nice
nohup
pc
perl
prof
python
sh
yacc
xcalc
apropos
find
info
man
whatis
whereis
cd
chmod
chown
chgrp
cmp
comm
cp
crypt
diff
file
grep
gzip
ln
ls
lsof
mkdir
mv
pwd
quota
rm
rmdir
stat
sync
sort
tar
tee
tr
umask
uncompress
uniq
wc
cat
fold
head
lpq
lpr
lprm
more
less
page
pr
tail
zcat
xv
gv
xpdf
ftp
rsync
scp
alias
chquota
chsh
clear
echo
pbm
popd
pushd
script
setenv
stty
netstat
rsh
ssh
bg
fg
jobs
^y
^z
clock
date
df
du
env
finger
history
last
lpq
manpath
printenv
ps
pwd
set
spend
stty
time
top
uptime
w
who
whois
whoami
gimp
xfig
xv
xvscan
xpaint
kpaint
mplayer
realplay
timidity
xmms
abiword
addbib
col
diction
diffmk
dvips
explain
grap
hyphen
ispell
latex
pdfelatex
latex2html
lookbib
macref
ndx
neqn
nroff
pic
psdit
ptx
refer
roffbib
sortbib
spell
ispell
style
tbl
tex
tpic
wget
grabmode
import
xdpyinfo
xkill
xlock
xterm
xwininfo
html2ps
latex2html
lynx
netscape
sitecopy
weblint

La solución @Dodzi Dzakuma es excelente si solo tiene unos pocos comandos que desea deshabilitar.

Sin embargo, si solo desea permitir que el usuario ejecute varios comandos, aquí hay una mejor solución:

  1. Cambiar el shell de usuario a bash restringido

    chsh -s /bin/rbash 
    
  2. Cree un directorio bin en el directorio de inicio del usuario

    sudo mkdir /home//bin
    sudo chmod 755 /home//bin
    
  3. Cambie la RUTA predeterminada del usuario al directorio bin

    echo "PATH=$HOME/bin" >> /home//.bashrc
    echo "export PATH >> /home//.bashrc
    
  4. Cree enlaces simbólicos de los comandos que el usuario requiera

    sudo ln -s /bin/ /home//bin/
    
  5. Impedir que el usuario modifique ~ / .bashrc

    chattr +i /home//.bashrc
    

Esto es mejor SI solo desea permitir que el usuario ejecute varios comandos porque en lugar de configurar los alias de TODOS los comandos para deshabilitarlos, solo establece el enlace simbólico de los comandos que desea permitir.

Me encontré con una solución para su situación en este momento. Tenía un usuario, llamémoslo “test1” que necesitaba tener algunos comandos restringidos, como “su”, pero el resto debería estar disponible. Para aplicar esta restricción, solo usé ACL (asumiendo que tiene acls habilitado en su FS) en el archivo binario detrás del comando en sí, así:

setfacl -m u:test1:r /bin/su

El comando anterior cambia los permisos para ese archivo binario específico, que de hecho es el comando “su”, para otorgar al usuario “test1” solo acceso de lectura a ese archivo. Como tal, cuando el usuario “test1” intenta “ejecutar” el comando “su”, no puede ejecutar el script detrás de él y obtiene “Permiso denegado”.

Simplemente ejecute “which command_you_want_restricted” para ver el archivo detrás de él.

He probado este método en Red Hat 6.5 y 7 y solo afecta al usuario “test1”, todos los demás usuarios pueden seguir ejecutando “su” a voluntad.

En cuanto a su solicitud específica:

O configure la política para tener acceso a todos los comandos excepto los comandos “ssh” y “cat”.

Puede hacer lo mismo con las ACL para el grupo “demo” en los binarios de comandos que desee, pero NO HE PROBADO esto con grupos y le sugiero que lo pruebe en una máquina virtual de prueba o algo de antemano.

valoraciones y comentarios

Al final de todo puedes encontrar las reseñas de otros desarrolladores, tú además puedes insertar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *