GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo limitar los comandos de usuario en Linux

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

Sin embargo, si solo desea permitir que el usuario ejecute varios comandos, esta es una mejor solución:

  1. Cambie el shell de usuario a bash restringido

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

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

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

    sudo ln -s /bin/<command> /home/<username>/bin/
    
  5. Restringir al usuario de modificar ~/.bashrc

    chattr +i /home/<username>/.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 configura el enlace simbólico de los comandos que desea permitir.


Hay muchas maneras diferentes de lograr esto. Voy a enumerar una de varias soluciones posibles.

Propondría usar varias capas diferentes de protección para evitar que los usuarios ejecuten los comandos a los que no deberían tener acceso. Todas las instrucciones aquí asumen que los usuarios tienen su propio /home/[username] directorio, que su shell es /bin/bash , y que 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]

  1. Eliminar el .bashrc del usuario archivo

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.

  1. 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, consulte la lista completa de comandos bash para obtener más información. Debes asegurarte de que el alias alias="printf ''" el comando es el último comando de la lista; de lo contrario, perderá la capacidad de crear un alias para todos esos comandos.

Nota Ejecutar los comandos a continuación buscará casi todos los comandos disponibles en su sistema y generará un archivo listo para usar con casi todos los comandos disponibles con alias previos. El [ el comando es el test comando 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
  1. Deshabilite los comandos de shell en vi asignando un alias al comando vi en modo restringido
    La sintaxis es alias vi="vi -Z" , pero consulte este sitio para obtener más información.

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

  3. Finalmente, elimine los permisos de escritura en el .bash_profile del usuario
    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 usen generarán la misma información que si el usuario presionara [ENTER] clave sin comando especificado, y su /bin/bash las funciones permanecen intactas.

Dependiendo de las funciones que elija o no alias de esta manera, los usuarios aún pueden eludir algunos de los controles que implementó. Sin embargo, dado que implementamos algunos amortiguadores de seguridad, el usuario realmente tendría que saber acerca de 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 el .bash_profile de todos y cada uno de los usuarios tendría dificultades para mantener qué funciones deben y no deben tener alias, y si necesita cambiar el alias en algo, tendrá que cambiarlos todos individualmente. Además, dado que los usuarios pueden usar vim o vi para ver archivos, podían ver el contenido de su .bash_profile y entender qué restricciones tienen y no tienen.

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

  1. Obtención de 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 ponerte en camino, pero recuerda que casi siempre hay formas de eludir las restricciones.

Además, siéntase libre de mezclar la información en esta respuesta para satisfacer sus necesidades. Estos definitivamente se pueden combinar con una serie de otras restricciones también.

P:Necesito que los usuarios tengan acceso a fg y bg , pero no quiero que puedan acceder a 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 EXHAUSTIVA)

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 haberlos instalado.

Se debe tener precaución con los editores porque algunos permiten la ejecución de comandos de shell desde dentro del programa

nano
emacs
pico
sed
vi
vim  

Todo lo demás

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

Linux
  1. 20 comandos esenciales de Linux para cada usuario

  2. 10 comandos que todo usuario de Linux debe conocer

  3. Cómo bloquear y desbloquear usuarios en Linux

  4. Comando de eco de Linux

  5. ¿Cómo puedo grabar comandos de Linux?

Comando de identificación en Linux

Comando Usermod en Linux

Cómo recuperar fácilmente comandos de Linux olvidados

Comando su en Linux

Cómo verificar el historial de comandos de Linux por fechas

Cómo cambiar de usuario en Linux