Ř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í:
-
Změňte uživatelské prostředí na omezený bash
chsh -s /bin/rbash <username>
-
Vytvořte adresář bin v domovském adresáři uživatele
sudo mkdir /home/<username>/bin sudo chmod 755 /home/<username>/bin
-
Změňte výchozí PATH uživatele do adresáře bin
echo "PATH=$HOME/bin" >> /home/<username>/.bashrc echo "export PATH >> /home/<username>/.bashrc
-
Vytvořte symbolické odkazy příkazů, které uživatel vyžaduje
sudo ln -s /bin/<command> /home/<username>/bin/
-
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.
-
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]
-
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]
- 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.
- 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
-
Zakažte příkazy shellu ve vi vytvořením aliasů příkazu vi do omezeného režimu
Syntaxe jealias vi="vi -Z"
, ale další informace naleznete na této stránce. -
Změňte vlastnictví
.bash_profile
uživatele ke kořeni
chown root:root /home/[username]/.bash_profile
-
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.
- 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
- 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