GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So beschränken Sie Benutzerbefehle in Linux

@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:

  1. Ändere die Benutzer-Shell auf eingeschränkte Bash

    chsh -s /bin/rbash <username>
    
  2. Erstellen Sie ein bin-Verzeichnis unter dem Home-Verzeichnis des Benutzers

    sudo mkdir /home/<username>/bin
    sudo chmod 755 /home/<username>/bin
    
  3. Ändern Sie den Standard-PFAD des Benutzers in das bin-Verzeichnis

    echo "PATH=$HOME/bin" >> /home/<username>/.bashrc
    echo "export PATH >> /home/<username>/.bashrc
    
  4. Symlinks der Befehle erstellen, die der Benutzer benötigt

    sudo ln -s /bin/<command> /home/<username>/bin/
    
  5. Beschränken Sie den Benutzer darauf, ~/.bashrc

    zu ändern
    chattr +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.

  1. Ä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]

  2. Ändern Sie die Verzeichnisberechtigungen, sodass nur der Benutzer den Inhalt seines Home-Verzeichnisses bearbeiten kann

chmod 755 /home/[username]

  1. 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.

  1. 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
  1. Deaktivieren Sie Shell-Befehle in vi, indem Sie den vi-Befehl in den eingeschränkten Modus versetzen
    Die Syntax ist alias vi="vi -Z" , aber bitte besuchen Sie diese Website für weitere Informationen.

  2. Ändern Sie den Besitz von .bash_profile des Benutzers Wurzeln
    chown root:root /home/[username]/.bash_profile

  3. 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.

  1. 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

  1. 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

Linux
  1. 20 wichtige Linux-Befehle für jeden Benutzer

  2. 10 Befehle, die jeder Linux-Benutzer kennen sollte

  3. Linux-su-Befehl

  4. Linux-Echo-Befehl

  5. So deaktivieren Sie einen bestimmten Befehl für einen bestimmten Benutzer in Linux

ID-Befehl unter Linux

Usermod-Befehl unter Linux

So können Sie vergessene Linux-Befehle einfach abrufen

su-Befehl unter Linux

So überprüfen Sie den Verlauf der Linux-Befehle nach Datum

So ändern Sie den Benutzer unter Linux