La solution @Dodzi Dzakuma est idéale si vous ne souhaitez désactiver que quelques commandes.
Cependant, si vous souhaitez uniquement autoriser l'utilisateur à exécuter plusieurs commandes, voici une meilleure solution :
-
Changer le shell utilisateur en bash restreint
chsh -s /bin/rbash <username>
-
Créez un répertoire bin sous le répertoire d'accueil de l'utilisateur
sudo mkdir /home/<username>/bin sudo chmod 755 /home/<username>/bin
-
Modifiez le PATH par défaut de l'utilisateur vers le répertoire bin
echo "PATH=$HOME/bin" >> /home/<username>/.bashrc echo "export PATH >> /home/<username>/.bashrc
-
Créer des liens symboliques de la ou des commandes dont l'utilisateur a besoin
sudo ln -s /bin/<command> /home/<username>/bin/
-
Empêcher l'utilisateur de modifier ~/.bashrc
chattr +i /home/<username>/.bashrc
C'est mieux SI vous souhaitez uniquement autoriser l'utilisateur à exécuter plusieurs commandes, car au lieu de définir les alias de TOUTES les commandes à désactiver, vous ne définissez que le lien symbolique des commandes que vous souhaitez autoriser.
Il existe de nombreuses façons d'y parvenir. Je vais énumérer l'une des nombreuses solutions possibles.
Je proposerais d'utiliser plusieurs couches de protection différentes pour empêcher les utilisateurs d'exécuter les commandes auxquelles ils ne devraient pas être autorisés à accéder. Toutes les instructions ici supposent que les utilisateurs ont leur propre /home/[username]
répertoire, que leur shell est /bin/bash
, et que vous voudriez qu'ils utilisent le shell bash lorsqu'ils se connectent au système.
-
Changer le bash de l'utilisateur en mode bash restreint afin qu'il ne puisse pas changer de répertoire (si vous n'avez pas de mode bash restreint sur votre système, ce lien vous aidera et vous donnera plus d'informations)
chsh -s /bin/rbash [username]
-
Modifiez les autorisations du répertoire afin que seul l'utilisateur puisse modifier le contenu de son répertoire personnel
chmod 755 /home/[username]
- Supprimer le
.bashrc
de l'utilisateur fichier
rm /home/[username]/.bashrc
Ce site contient plus d'informations sur les raisons pour lesquelles il pourrait être judicieux de supprimer le .bashrc
dans cette situation.
- Créer un
.bash_profile
et ajoutez des alias "sûrs" pour toutes les commandes que vous souhaitez désactiver
./exemple de fichier 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 ''"
Veuillez consulter la liste complète des commandes bash pour plus d'informations. Vous devez vous assurer que le alias alias="printf ''"
command est la dernière commande de la liste, sinon vous perdez votre capacité à créer un alias pour toutes ces commandes.
Remarque L'exécution des commandes ci-dessous recherchera presque toutes les commandes disponibles sur votre système et générera un fichier prêt à l'emploi avec presque toutes les commandes disponibles pré-aliasées. Le [
la commande est le test
commande en bas. Donc, si vous voyez cela dans le fichier, ce n'est pas une erreur.
#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
-
Désactiver les commandes shell dans vi en aliasant la commande vi en mode restreint
La syntaxe estalias vi="vi -Z"
, mais veuillez consulter ce site pour plus d'informations. -
Modifier le propriétaire du
.bash_profile
de l'utilisateur enraciner
chown root:root /home/[username]/.bash_profile
-
Enfin, supprimez les autorisations d'écriture sur le
.bash_profile
de l'utilisateur
chmod 755 /home/[username/.bash_profile]
Maintenant, lorsque les utilisateurs se connectent, ils ne pourront pas changer de répertoire, toutes les commandes que vous ne voulez pas qu'ils utilisent afficheront les mêmes informations que si l'utilisateur avait appuyé sur le [ENTER]
clé sans commande spécifiée, et votre /bin/bash
les fonctions restent intactes.
Selon les fonctions que vous choisissez ou non d'aliaser de cette manière, les utilisateurs peuvent toujours contourner certains des contrôles que vous avez implémentés. Cependant, puisque nous avons mis en place quelques tampons de sécurité, l'utilisateur devrait vraiment connaître les systèmes informatiques pour faire tout ce qui est dangereux.
Sur une note connexe et quelque chose que vous voudrez peut-être considérer, si vous placez directement ces alias dans le .bash_profile
de chaque utilisateur vous auriez des difficultés à maintenir les fonctions qui devraient et ne devraient pas être aliasées, et si vous avez besoin de changer l'alias sur quoi que ce soit, vous devrez toutes les changer individuellement. De plus, puisque les utilisateurs peuvent utiliser vim
ou vi
pour afficher les fichiers, ils pouvaient voir le contenu de leur .bash_profile
et comprendre quelles restrictions ils ont et n'ont pas.
Pour contourner ce problème, je suggérerais.
- Mettre tous les alias dans un répertoire non accessible par les utilisateurs (coller le contenu du
.bash_profile
ici)
/[path_to_file]/startup_functions_for_beginners.sh
- Sourcer les alias dans leur
.bash_profile
exemple de fichier ./bash_profile amélioré
if [[ -f /[path_to_file]/startup_functions_for_beginners.sh ]]; then
. /[path_to_file]/startup_functions_for_beginners.sh
fi
Cela devrait vous mettre sur la bonne voie, mais n'oubliez pas qu'il existe presque toujours des moyens de contourner les restrictions.
N'hésitez pas non plus à remixer les informations de cette réponse en fonction de vos besoins. Celles-ci peuvent très certainement être combinées avec un certain nombre d'autres restrictions.
Q :J'ai besoin que les utilisateurs aient accès à fg
et bg
, mais je ne veux pas qu'ils puissent accéder à aptitude
ou 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
Liste des commandes courantes selon ce site Web de Harvard (NON EXHAUSTIVE)
Au fur et à mesure que vous installez des programmes sur Linux, ce dont vous disposez change. Je vous suggère d'exécuter les commandes répertoriées ci-dessus à l'étape 4 pour vous aider à trouver de nouvelles commandes après leur installation.
la prudence doit être prise avec les éditeurs car certains permettent l'exécution de commandes shell depuis le programme
nano
emacs
pico
sed
vi
vim
Tout le reste
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