La soluzione @Dodzi Dzakuma è ottima se hai solo pochi comandi che desideri disabilitare.
Tuttavia, se desideri solo consentire all'utente di eseguire diversi comandi, ecco una soluzione migliore:
-
Cambia la shell utente in bash limitato
chsh -s /bin/rbash <username>
-
Crea una directory bin sotto la directory home dell'utente
sudo mkdir /home/<username>/bin sudo chmod 755 /home/<username>/bin
-
Cambia il PATH predefinito dell'utente nella directory bin
echo "PATH=$HOME/bin" >> /home/<username>/.bashrc echo "export PATH >> /home/<username>/.bashrc
-
Crea collegamenti simbolici dei comandi richiesti dall'utente
sudo ln -s /bin/<command> /home/<username>/bin/
-
Impedisce all'utente di modificare ~/.bashrc
chattr +i /home/<username>/.bashrc
Questo è meglio SE vuoi solo consentire all'utente di eseguire diversi comandi perché invece di impostare gli alias di TUTTI i comandi da disabilitare, imposti solo il collegamento simbolico dei comandi che desideri consentire.
Ci sono molti modi diversi per raggiungere questo obiettivo. Elencherò una delle diverse soluzioni possibili.
Proporrei di utilizzare diversi livelli di protezione per impedire agli utenti di eseguire i comandi a cui non dovrebbero essere autorizzati ad accedere. Tutte le indicazioni qui presuppongono che gli utenti abbiano il proprio /home/[username]
directory, che la loro shell è /bin/bash
, e che vorresti che usassero la shell bash quando accedono al sistema.
-
Modifica la bash dell'utente in modalità bash limitata in modo che non possa cambiare directory (se non hai una modalità bash limitata sul tuo sistema, questo link ti aiuterà e ti darà maggiori informazioni)
chsh -s /bin/rbash [username]
-
Modifica i permessi della directory in modo che solo l'utente possa modificare il contenuto della propria home directory
chmod 755 /home/[username]
- Rimuovi il
.bashrc
dell'utente file
rm /home/[username]/.bashrc
Questo sito contiene ulteriori informazioni sul motivo per cui potrebbe essere una buona idea eliminare il .bashrc
in questa situazione.
- Crea un
.bash_profile
e aggiungi alias "sicuri" per tutti i comandi che vorresti disabilitare
Esempio di file ./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 Si prega di controllare l'elenco completo dei comandi bash per ulteriori informazioni. Devi assicurarti che il file alias alias="printf ''"
command è l'ultimo comando nell'elenco, altrimenti perdi la capacità di creare alias di tutti quei comandi.
Nota L'esecuzione dei comandi seguenti cercherà quasi tutti i comandi disponibili sul tuo sistema e produrrà un file già pronto con quasi tutti i comandi disponibili pre-aliasati. Il [
comando è test
comando in bash. Quindi, se lo vedi nel file, non è un errore.
#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
-
Disabilita i comandi della shell in vi impostando l'alias del comando vi in modalità limitata
La sintassi èalias vi="vi -Z"
, ma consulta questo sito per ulteriori informazioni. -
Cambia la proprietà del
.bash_profile
dell'utente radicare
chown root:root /home/[username]/.bash_profile
-
Infine, rimuovi i permessi di scrittura sul
.bash_profile
dell'utente
chmod 755 /home/[username/.bash_profile]
Ora quando gli utenti accedono non saranno in grado di cambiare directory, tutti i comandi che non vuoi che usino produrranno le stesse informazioni come se l'utente avesse premuto [ENTER]
key senza alcun comando specificato e il tuo /bin/bash
le funzioni rimangono intatte.
A seconda delle funzioni che scegli di creare o meno con l'alias in questo modo, gli utenti potrebbero comunque essere in grado di eludere alcuni dei controlli che hai implementato. Tuttavia, dal momento che abbiamo implementato alcuni buffer di sicurezza, l'utente dovrebbe davvero conoscere i sistemi informatici per fare qualcosa di pericoloso.
Su una nota correlata e qualcosa che potresti prendere in considerazione, se inserisci direttamente questi alias in ogni .bash_profile
di ogni utente avresti difficoltà a mantenere quali funzioni dovrebbero e non dovrebbero essere aliasate, e se hai bisogno di cambiare l'alias su qualcosa dovresti cambiarle tutte individualmente. Inoltre, poiché gli utenti possono utilizzare vim
o vi
per visualizzare i file, potevano vedere il contenuto del loro .bash_profile
e capire quali restrizioni hanno e non hanno.
Per aggirare il problema suggerirei.
- Mettere tutti gli alias in una directory non accessibile agli utenti (incollare il contenuto di
.bash_profile
qui)
/[path_to_file]/startup_functions_for_beginners.sh
- Ottenimento degli alias nel loro
.bash_profile
esempio di file ./bash_profile migliorato
if [[ -f /[path_to_file]/startup_functions_for_beginners.sh ]]; then
. /[path_to_file]/startup_functions_for_beginners.sh
fi
Questo dovrebbe metterti sulla buona strada, ma ricorda che ci sono quasi sempre modi per aggirare le restrizioni.
Inoltre, sentiti libero di remixare le informazioni in questa risposta per soddisfare le tue esigenze. Questi possono sicuramente essere combinati anche con una serie di altre restrizioni.
D:Ho bisogno che gli utenti abbiano accesso a fg
e bg
, ma non voglio che possano accedere 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
Elenco di comandi comuni come da questo sito Web di Harvard (NON ESAUSTIVO)
Man mano che installi programmi su Linux, ciò che hai a disposizione cambia. Ti suggerisco di eseguire i comandi sopra elencati nel passaggio 4 per aiutarti a trovare nuovi comandi dopo che sono stati installati.
dovrebbe essere prestata attenzione con gli editor perché alcuni consentono l'esecuzione di comandi shell dall'interno del programma
nano
emacs
pico
sed
vi
vim
Tutto il resto
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