@Dodzi Dzakuma-Lösung ist großartig, wenn Sie nur wenige Befehle haben, die Sie deaktivieren möchten.
Wenn Sie dem Benutzer jedoch nur erlauben möchten, mehrere Befehle auszuführen, ist hier eine bessere Lösung:
-
Ändere die Benutzer-Shell auf eingeschränkte Bash
chsh -s /bin/rbash <username>
-
Erstellen Sie ein bin-Verzeichnis unter dem Home-Verzeichnis des Benutzers
sudo mkdir /home/<username>/bin sudo chmod 755 /home/<username>/bin
-
Ändern Sie den Standard-PFAD des Benutzers in das bin-Verzeichnis
echo "PATH=$HOME/bin" >> /home/<username>/.bashrc echo "export PATH >> /home/<username>/.bashrc
-
Symlinks der Befehle erstellen, die der Benutzer benötigt
sudo ln -s /bin/<command> /home/<username>/bin/
-
Beschränken Sie den Benutzer darauf, ~/.bashrc
zu ändernchattr +i /home/<username>/.bashrc
Dies ist besser, wenn Sie dem Benutzer nur erlauben möchten, mehrere Befehle auszuführen, da Sie, anstatt die Aliase ALLER Befehle zu deaktivieren, nur den symbolischen Link der Befehle festlegen, die Sie zulassen möchten.
Es gibt viele verschiedene Möglichkeiten, wie Sie dies erreichen können. Ich werde eine von mehreren möglichen Lösungen auflisten.
Ich würde vorschlagen, mehrere verschiedene Schutzebenen zu verwenden, um Benutzer daran zu hindern, die Befehle auszuführen, auf die sie nicht zugreifen dürfen sollten. Alle Anweisungen hier gehen davon aus, dass Benutzer ihren eigenen /home/[username]
haben Verzeichnis, dass ihre Shell /bin/bash
ist , und dass Sie möchten, dass sie die Bash-Shell verwenden, wenn sie sich beim System anmelden.
-
Ändern Sie die Bash des Benutzers in den eingeschränkten Bash-Modus, sodass er das Verzeichnis nicht wechseln kann (Wenn Sie keinen eingeschränkten Bash-Modus auf Ihrem System haben, hilft Ihnen dieser Link und gibt Ihnen weitere Informationen)
chsh -s /bin/rbash [username]
-
Ändern Sie die Verzeichnisberechtigungen, sodass nur der Benutzer den Inhalt seines Home-Verzeichnisses bearbeiten kann
chmod 755 /home/[username]
- Entfernen Sie den
.bashrc
des Benutzers Datei
rm /home/[username]/.bashrc
Diese Seite enthält weitere Informationen darüber, warum es eine gute Idee sein könnte, den .bashrc
zu löschen in dieser Situation.
- Erstelle einen
.bash_profile
und fügen Sie "sichere" Aliase für alle Befehle hinzu, die Sie deaktivieren möchten
./bash_profile Dateibeispiel
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 ''"
Weitere Informationen finden Sie in der vollständigen Liste der Bash-Befehle. Sie müssen sicherstellen, dass der alias alias="printf ''"
command ist der letzte Befehl in der Liste, andernfalls verlieren Sie die Fähigkeit, all diese Befehle zu aliasieren.
Hinweis Wenn Sie die folgenden Befehle ausführen, wird nach fast allen auf Ihrem System verfügbaren Befehlen gesucht und eine fertige Datei ausgegeben, in der fast alle verfügbaren Befehle mit einem Pre-Aliasing versehen sind. Die [
Befehl ist der test
Befehl in bash. Wenn Sie das also in der Datei sehen, ist es kein Fehler.
#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
-
Deaktivieren Sie Shell-Befehle in vi, indem Sie den vi-Befehl in den eingeschränkten Modus versetzen
Die Syntax istalias vi="vi -Z"
, aber bitte besuchen Sie diese Website für weitere Informationen. -
Ändern Sie den Besitz von
.bash_profile
des Benutzers Wurzeln
chown root:root /home/[username]/.bash_profile
-
Entfernen Sie abschließend die Schreibberechtigungen für
.bash_profile
des Benutzers
chmod 755 /home/[username/.bash_profile]
Wenn sich die Benutzer jetzt anmelden, können sie das Verzeichnis nicht wechseln, alle Befehle, die Sie nicht verwenden sollen, geben die gleichen Informationen aus, als ob der Benutzer [ENTER]
gedrückt hätte Schlüssel ohne angegebenen Befehl und Ihr /bin/bash
Funktionen bleiben erhalten.
Je nachdem, welche Funktionen Sie auf diese Weise aliasieren oder nicht, können Benutzer möglicherweise dennoch einige der von Ihnen implementierten Steuerelemente umgehen. Da wir jedoch ein paar Sicherheitspuffer implementiert haben, müsste der Benutzer wirklich etwas über Computersysteme wissen, um etwas Gefährliches zu tun.
In einem ähnlichen Zusammenhang und etwas, das Sie vielleicht in Betracht ziehen sollten, wenn Sie diese Aliase direkt in den .bash_profile
jedes einzelnen Benutzers einfügen Sie hätten Schwierigkeiten bei der Pflege, welche Funktionen mit einem Alias versehen werden sollten und welche nicht, und wenn Sie den Alias für irgendetwas ändern müssten, müssten Sie alle einzeln ändern. Außerdem können Benutzer vim
verwenden oder vi
Um Dateien anzuzeigen, konnten sie den Inhalt ihrer .bash_profile
sehen und verstehen, welche Einschränkungen sie haben und welche nicht.
Um dies zu umgehen, würde ich vorschlagen.
- Ablegen aller Aliase in einem Verzeichnis, auf das die Benutzer nicht zugreifen können (fügen Sie den Inhalt der
.bash_profile
hier)
/[path_to_file]/startup_functions_for_beginners.sh
- Sourcing der Aliase in ihren
.bash_profile
Verbessertes ./bash_profile-Dateibeispiel
if [[ -f /[path_to_file]/startup_functions_for_beginners.sh ]]; then
. /[path_to_file]/startup_functions_for_beginners.sh
fi
Dies sollte Sie auf den Weg bringen, aber denken Sie daran, dass es fast immer Möglichkeiten gibt, Beschränkungen zu umgehen.
Fühlen Sie sich auch frei, die Informationen in dieser Antwort an Ihre Bedürfnisse anzupassen. Diese können auf jeden Fall auch mit einer Reihe anderer Einschränkungen kombiniert werden.
F:Ich brauche Benutzer, die Zugriff auf fg
haben und bg
, aber ich möchte nicht, dass sie auf aptitude
zugreifen können oder 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 gängiger Befehle gemäß dieser Harvard-Website (NICHT ERSCHÖPFEND)
Wenn Sie Programme unter Linux installieren, ändert sich das, was Ihnen zur Verfügung steht. Ich schlage vor, dass Sie die oben in Schritt 4 aufgeführten Befehle ausführen, um nach der Installation neue Befehle zu finden.
Bei Editoren ist Vorsicht geboten, da einige die Ausführung von Shell-Befehlen aus dem Programm heraus zulassen
nano
emacs
pico
sed
vi
vim
Alles andere
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