GNU/Linux >> Znalost Linux >  >> Linux

Jak omezit uživatelské příkazy v Linuxu

Řešení @Dodzi Dzakuma je skvělé, pokud máte pouze několik příkazů, které chcete deaktivovat.

Pokud však chcete uživateli povolit pouze spouštění několika příkazů, zde je lepší řešení:

  1. Změňte uživatelské prostředí na omezený bash

    chsh -s /bin/rbash <username>
    
  2. Vytvořte adresář bin v domovském adresáři uživatele

    sudo mkdir /home/<username>/bin
    sudo chmod 755 /home/<username>/bin
    
  3. Změňte výchozí PATH uživatele do adresáře bin

    echo "PATH=$HOME/bin" >> /home/<username>/.bashrc
    echo "export PATH >> /home/<username>/.bashrc
    
  4. Vytvořte symbolické odkazy příkazů, které uživatel vyžaduje

    sudo ln -s /bin/<command> /home/<username>/bin/
    
  5. Omezte uživatele v úpravách ~/.bashrc

    chattr +i /home/<username>/.bashrc
    

To je lepší, POKUD chcete uživateli povolit pouze spouštění několika příkazů, protože namísto nastavování aliasů VŠECH příkazů na zakázání nastavujete pouze symbolický odkaz příkazů, které chcete povolit.


Existuje mnoho různých způsobů, jak toho můžete dosáhnout. Uvedu jedno z několika možných řešení.

Navrhoval bych použití několika různých vrstev ochrany, které uživatelům zabrání spouštět příkazy, ke kterým by neměli mít přístup. Všechny zde uvedené pokyny předpokládají, že uživatelé mají svůj vlastní /home/[username] adresář, že jejich shell je /bin/bash a že byste chtěli, aby při přihlášení do systému používali shell bash.

  1. Změňte bash uživatele na omezený režim bash, aby uživatel nemohl měnit adresáře (pokud ve svém systému nemáte omezený bash režim, tento odkaz vám pomůže a poskytne vám další informace)chsh -s /bin/rbash [username]

  2. Změňte oprávnění adresáře tak, aby pouze uživatel mohl upravovat obsah svého domovského adresáře

chmod 755 /home/[username]

  1. Odeberte .bashrc uživatele soubor

rm /home/[username]/.bashrc Tato stránka obsahuje více informací o tom, proč by mohlo být dobré smazat .bashrc v této situaci.

  1. Vytvořte .bash_profile a přidejte „bezpečné“ aliasy pro všechny příkazy, které chcete deaktivovat

Příklad souboru ./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 ''"  

A Další informace naleznete v úplném seznamu příkazů bash. Musíte se ujistit, že alias alias="printf ''" příkaz je posledním příkazem v seznamu, jinak ztratíte možnost vytvořit alias všech těchto příkazů.

Poznámka Spuštěním níže uvedených příkazů vyhledáte téměř všechny příkazy dostupné ve vašem systému a vytvoříte hotový soubor, ve kterém budou téměř všechny dostupné příkazy předem vytvořeny. [ příkaz je test příkaz v bash. Takže pokud to v souboru vidíte, není to chyba.

#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. Zakažte příkazy shellu ve vi vytvořením aliasů příkazu vi do omezeného režimu
    Syntaxe je alias vi="vi -Z" , ale další informace naleznete na této stránce.

  2. Změňte vlastnictví .bash_profile uživatele ke kořeni
    chown root:root /home/[username]/.bash_profile

  3. Nakonec odeberte oprávnění k zápisu na .bash_profile uživatele
    chmod 755 /home/[username/.bash_profile]

Nyní, když se uživatelé přihlásí, nebudou moci měnit adresáře, všechny příkazy, které nechcete, aby používali, vypíší stejné informace, jako kdyby uživatel stiskl [ENTER] klíč bez zadaného příkazu a váš /bin/bash funkce zůstanou nedotčeny.

V závislosti na tom, jaké funkce se rozhodnete takto aliasovat či nikoli, mohou být uživatelé stále schopni obejít některé ovládací prvky, které jste implementovali. Protože jsme však implementovali několik bezpečnostních vyrovnávacích pamětí, musel by uživatel skutečně vědět o počítačových systémech, aby mohl udělat něco nebezpečného.

Na související poznámku a něco, co byste mohli chtít zvážit, pokud tyto aliasy umístíte přímo do .bash_profile každého uživatele měli byste potíže s udržováním toho, které funkce by měly a neměly mít alias, a pokud potřebujete změnit alias na čemkoli, museli byste je změnit všechny jednotlivě. Také, protože uživatelé mohou používat vim nebo vi pro zobrazení souborů mohli vidět obsah jejich .bash_profile a pochopit, jaká omezení mají a která nemají.

Chcete-li to obejít, navrhuji.

  1. Umístění všech aliasů do adresáře, který není uživatelům přístupný (vložte obsah .bash_profile zde)

/[path_to_file]/startup_functions_for_beginners.sh

  1. Získání aliasů do jejich .bash_profile

příklad vylepšeného souboru ./bash_profile

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

To by vás mělo postavit na cestu, ale pamatujte, že téměř vždy existují způsoby, jak obejít omezení.

Také neváhejte remixovat informace v této odpovědi tak, aby vyhovovaly vašim potřebám. Tyto lze zcela jistě také kombinovat s řadou dalších omezení.

Otázka:Potřebuji, aby uživatelé měli přístup k fg a bg , ale nechci, aby měli přístup k aptitude nebo 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  

Seznam běžných příkazů podle této webové stránky Harvardu (NE VYPLŇUJÍCÍ)

Při instalaci programů do Linuxu se mění to, co máte k dispozici. Navrhuji, abyste spustili příkazy uvedené výše v kroku 4, které vám pomohou najít nové příkazy po jejich instalaci.

U editorů je třeba dbát opatrnosti, protože některé umožňují spouštění příkazů shellu přímo z programu

nano
emacs
pico
sed
vi
vim  

Vše ostatní

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 základních příkazů Linuxu pro každého uživatele

  2. 10 příkazů, které by měl znát každý uživatel Linuxu

  3. Linuxový příkaz echo

  1. Jak používat Su Command v Linuxu

  2. Jak zakázat konkrétní příkaz pro konkrétního uživatele v Linuxu

  3. Jak mohu zaznamenat příkazy Linuxu?

  1. Jak zamknout a odemknout uživatele v Linuxu

  2. Linuxové příkazy od A do Z

  3. Linux su příkaz