Как ограничить пользовательские команды в Linux
У меня есть пользователь в группе: "demo".
Я хочу установить политику, что эти пользователи могут запускать 10 команд, таких как"vim","nano"," cd " и т. д.
или установите политику для доступа ко всем командам, кроме команд" ssh "и" cat".
спасибо
5 ответов
есть много различных способов, которыми вы могли бы достичь этого. Я собираюсь перечислить одно из нескольких возможных решений.
я бы предложил использовать несколько различных уровней защиты, чтобы запретить пользователям запускать команды, к которым они не должны иметь доступа. Все направления здесь предполагают, что у пользователей есть свои
rm /home/[username]/.bashrc
этот сайт больше информации, почему это может быть хорошей идеей, чтобы удалить .bashrc
в этой ситуации.
4) создать .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 ''"
пожалуйста, проверьте полный список команд bash для получения дополнительной информации. Вы должны убедиться, что alias alias="printf ''"
команда-последняя команда в списке, иначе вы потеряете возможность псевдонима всех этих команд.
5) отключите команды оболочки в vi, сглаживая команду vi в ограниченный режим
Синтаксис alias vi="vi -Z"
, но пожалуйста, см. этот сайт для получения дополнительной информации.
6) изменение права собственности пользователя .bash_profile
для rootchown root:root /home/[username]/.bash_profile
7) Наконец, удалите разрешения на запись пользователя .bash_profile
chmod 755 /home/[username/.bash_profile]
теперь, когда пользователи входят в систему они не смогут изменить каталоги, все команды, которые вы не хотите их использовать будет выводить ту же информацию, как если бы пользователь нажал [ENTER]
ключ без указанной команды, и ваш /bin/bash
функции остаются нетронутыми.
в зависимости от того, какие функции вы выберете для псевдонима или нет, пользователи могут по-прежнему быть в состоянии обойти некоторые элементы управления, которые вы реализовали. Однако, так как мы реализовали несколько безопасности буферы, пользователь будет знать о компьютерных системах, чтобы делать какие-либо опасные.
на связанной заметке и что-то, что вы можете рассмотреть, если вы непосредственно поместите эти псевдонимы в каждого пользователя .bash_profile
вам будет трудно поддерживать, какие функции должны и не должны быть псевдонимами, и если вам нужно изменить псевдоним на что-либо, вам придется изменить все из них по отдельности. Кроме того, поскольку пользователи могут использовать vim
или vi
для просмотра файлов, они могли видеть содержимое своих "!--11--> и понять, какие ограничения они имеют и не имеют.
чтобы обойти это, я бы предложил.
1) размещение всех псевдонимов в каталоге, недоступном пользователям (вставьте содержимое .bash_profile
здесь)
/[path_to_file]/startup_functions_for_beginners.sh
2) Поиск псевдонимов в их .bash_profile
улучшена ./файл файл пример
if [[ -f /[path_to_file]/startup_functions_for_beginners.sh ]]; then
. /[path_to_file]/startup_functions_for_beginners.sh
fi
это должно поставить вас на вашем пути, но помните, что почти всегда есть способы обойти ограничения.
кроме того, не стесняйтесь ремикс информации в этом ответе, чтобы удовлетворить ваши потребности. Они, безусловно, могут быть объединены с рядом других ограничений, а также.
Q: мне нужно, чтобы пользователи имели доступ к fg
и bg
, но я не хочу, чтобы они могли получить доступ к aptitude
или 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
список общих команд в соответствии с этим Гарвардский Веб-Сайт (НЕ ИСЧЕРПЫВАЮЩИЙ)
внимание следует заботиться с редакторами, потому что некоторые позволяют извлечение команд оболочки из программы
nano
emacs
pico
sed
vi
vim
Все Остальное
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
Я знаю, что опаздываю на вечеринку, на самом деле на 2 года, но я наткнулся на обходной путь для вашей ситуации только что. У меня был пользователь, назовем его "test1", который должен был иметь некоторые команды, такие как" su", но остальные должны быть доступны. Чтобы применить это ограничение, я просто использовал ACL (предполагая, что у вас есть acls включен на вашей FS) в двоичном файле за самой командой, например:
setfacl-m u: test1: r /bin/su
эта команда изменяет разрешения для этот конкретный двоичный файл, который на самом деле является командой" su", предоставляет пользователю" test1 " только доступ для чтения к этому файлу. Таким образом, когда пользователь "test1" пытается "выполнить" команду "su", он не может запустить сценарий за ней и получает "разрешение отказано".
просто запустите "which command_you_want_restricted", чтобы увидеть файл за ним.
я протестировал этот метод на Red Hat 6.5 & 7, и он просто влияет на пользователя "test1", все остальные пользователи могут продолжать работать " su " на будет.
как для вас конкретный запрос:
"или установите политику для доступа ко всем командам, кроме команд" ssh "и" cat"."
вы можете сделать то же самое с ACLs для группы "demo" на двоичных файлах команд, которые вы хотите, но я не тестировал это с группами, и я предлагаю вам попробовать его на тестовой виртуальной машине или что-то заранее.
с уважением,
стандартным ответом было бы использовать ограниченную оболочку, делая это последней записью в файле паролей для пользователей в этой группе. Как вы можете запускать внешние команды из таких вещей, как vim:http://web.physics.ucsb.edu / ~pcs/apps/editors/vi/vi_unix.html
это не кажется отличной идеей, если вы пытаетесь создать ограниченную среду. Первое, что пользователь может сделать, это использовать команды в приведенной выше ссылке для запуска /bin/bash
и он будет вне ограниченная среда.
лучшей идеей было бы поместить логин каждого пользователя в тюрьму chroot или, возможно, легкий контейнер (поэтому, если они что-то сломают, это их собственный контейнер). Взгляните на Докера -http://docker.io .
@Dodzi Dzakuma решение отлично, если у вас есть только несколько команд, которые вы хотите отключить.
однако, если вы хотите только разрешить пользователю запускать несколько команд, вот лучшее решение:
-
измените оболочку пользователя на restricted bash
chsh -s /bin/rbash <username>
-
создайте каталог bin под домашним каталогом пользователя
sudo mkdir /home/<username>/bin sudo chmod 755 /home/<username>/bin
-
измените путь пользователя по умолчанию на bin каталог
echo "PATH=$HOME/bin" >> /home/<username>/.bashrc echo "export PATH >> /home/<username>/.bashrc
-
создать симлинки в команду(ы), которые требуют
sudo ln -s /bin/<command> /home/<username>/bin/
-
запретить пользователю изменение ~/.bashrc и
chattr +i /home/<username>/.bashrc
это лучше, если вы хотите разрешить пользователю запускать только несколько команд, потому что вместо установки псевдонимов всех возможных команд для их отключения вы устанавливаете только символическую ссылку команд, которые вы хотите разрешить.
Я немного удивлен, что никто еще не использовал родную функциональность SSH в своем ответе... Я знаю, что опоздал на 4 года, но это все еще может быть удобно:)
при использовании SSH вы должны использовать ключи для входа в систему; поскольку мы говорим о защите сервера, отключение пароля для входа в систему должно быть одной из первых вещей, которые вы должны сделать. Таким образом, при использовании ключей теперь у вас есть возможность разрешить только одну команду на ключ, добавив это в authorized_keys файл:
command="only" ssh-rsa AAABBBCC....
на only
command-это функция белого списка, которая позволяет пользователю запускать только эти команды. Вам не нужно делать исключения в вашей системе(системах), изменяя двоичные разрешения по умолчанию (что является адом администратора..). Убедитесь, что вы установили чтобы быть незаписываемый для пользователей.
единственная команда-это сценарий, который должен быть установлен в /usr/bin/
С 775 разрешения.
читать все об этом: на только Способ принудительных команд SSH
теперь вы понимаете, как это работает, вы можете просто белый список любую команду, которую вы позволяете пользователю выполнить:
command="only cal cowsay factor figlet fortune" ssh-rsa AAABBBCC....
или использовать .onlyrules
файл с правильным синтаксисом, будьте осторожны, чтобы не использовать жадное регулярное выражение..
----------------------
< I'm restricted >
----------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||