2014-02-01 8 views
8

У меня есть пользователь в группе: «demo».Как ограничить пользовательские команды в Linux

Я хочу установить политику, что это пользователи просто могут работать 10 команд, как «ВИМ», «нано», «CD» и т.д.

или установить политику, чтобы иметь доступ на все команды, кроме " ssh "и" cat ".

Благодаря

+2

'man rbash' может быть пригодится. –

+1

вы root.ok.put все команды в/bin/bash. затем установите разрешения для каждого пользователя на определенные команды с помощью chowm и chmod ... ok? – MLSC

+1

@MortezaLSC: это нехорошее действие! Я не хочу менять каталог файлов bin или их разрешения. это создаст проблему для системы. Я ищу правильный способ ограничения доступа некоторых пользователей. – Mortezaipo

ответ

12

Существует множество способов, которыми вы могли бы достичь этого. Я собираюсь перечислить одно из нескольких возможных решений.

Я бы предложил использовать несколько различных уровней защиты, чтобы пользователи не могли запускать команды, к которым им не разрешен доступ. Все приведенные здесь указания предполагают, что у пользователей есть свой собственный каталог /home/[username], что их оболочка /bin/bash, и вы хотели бы, чтобы они использовали оболочку bash при входе в систему.

разрешения

1) Изменение каталога, так что только пользователь может редактировать содержимое домашнего каталога

chmod 755 /home/[username]

2) Удалить пользователя .bashrc файл

rm /home/[username]/.bashrcThis site имеет больше информации о том, почему это может быть хорошей идеей удалить .bashrc в этой ситуации.

3) Создать .bash_profile и добавить «безопасные» псевдонимы для всех команд, которые вы хотели бы, чтобы отключить

./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 ''" 

пожалуйста, проверьте the full list of bash commands для получения дополнительной информации , Вы должны убедиться, что команда alias alias="printf ''" является последней командой в списке, иначе вы потеряете возможность псевдонимов всех этих команд.

4) команда Отключить оболочки в VI альясинга команды VI в ограниченном режиме
Синтаксиса является alias vi="vi -Z", но пожалуйста, см this site для получения дополнительной информации.

5) Изменение в собственность пользователя .bash_profile укоренить
chown root:root /home/[username]/.bash_profile

6) Удаление разрешений на запись .bash_profile
chmod 755 /home/[username/.bash_profile]

7) Наконец изменить Баш пользователей пользователя, чтобы restricted bash mode так, чтобы они не может изменять каталоги (если у вас нет ограниченного режима bash в вашей системе, this link поможет и даст вам дополнительную информацию)
chsh -s /bin/rbash [username]

Теперь, когда пользователи войдут в систему, они не смогут изменять каталоги, все команды, которые вы не хотите использовать, выведут ту же информацию, что и если пользователь нажал клавишу [ENTER] без команды и ваши функции /bin/bash остаются неизменными.

В зависимости от того, какие функции вы выбрали или не выполняете таким образом, пользователи могут по-прежнему уклоняться от некоторых элементов управления, которые вы внедрили. Однако, поскольку мы реализовали несколько буферов безопасности, пользователю действительно нужно было бы знать о компьютерных системах, чтобы сделать что-то опасное.

В отношении соответствующей заметки и того, что вы можете рассмотреть, если вы разместите эти псевдонимы на всех пользователях .bash_profile, вам будет трудно поддерживать, какие функции должны и не должны быть сглажены, и если вам нужно измените псевдоним на все, что вам нужно будет изменить каждый из них по отдельности. Кроме того, поскольку пользователи могут использовать vim или vi для просмотра файлов, они могут видеть содержимое своего .bash_profile и понимать, какие ограничения у них есть и чего нет.

Чтобы обойти это, я бы предложил.

1) Ввод всех псевдонимов в каталоге не доступном для пользователей (вставить содержимое .bash_profile здесь)

/[path_to_file]/startup_functions_for_beginners.sh

2) Sourcing псевдонимы в их .bash_profile

улучшенный файл ./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 

Список общих команд в соответствии с этим Harvard Website (НЕ ИСЧЕРПЫВАЮЩИЙ)

осторожность следует позаботиться с редакторами, потому что некоторые позволяют excution команд оболочки из программы

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

Большое вам спасибо. Отлично! – Mortezaipo

+0

Есть ли способ добавить только некоторые команды, доступные пользователю? например, пользователь, который может получить доступ только к командам «cat» и «vi». с псевдонимом я должен определить все команды. Мне нужно просто добавить некоторые команды, доступные или нет для некоторых групп. – Mortezaipo

+1

Вам не нужно выполнять псевдонимы всех команд. Вам просто нужно выполнить псевдонимы команд, которые вы не хотите использовать пользователям, или команд, которые нуждаются в безопасном режиме.Я добавлю небольшой список примеров и добавлю его в свой ответ для вас, чтобы вы поняли, что вы можете сделать. –

5

Стандартный ответ будет использовать ограниченную оболочку, делая это последняя запись в файле паролей для пользователей в этой группе. Поскольку вы можете запускать внешние команды из таких вещей, как vim: http://web.physics.ucsb.edu/~pcs/apps/editors/vi/vi_unix.html

Это не похоже на отличную идею, если вы пытаетесь создать ограниченную среду. Первое, что пользователь мог бы сделать, это использовать команды в приведенной выше ссылке для запуска /bin/bash, и он будет находиться за пределами ограниченной среды.

Лучшей идеей было бы ввести логин каждого пользователя в тюрьму chroot или, возможно, легкий контейнер (так что если они сломают что-либо, это их собственный контейнер). Посмотрите на Docker - http://docker.io.

7

Я знаю, что я опоздал на вечеринку, 2 года поздно на самом деле, но я наткнулся на обходной путь для вашей ситуации только сейчас. У меня был пользователь, давайте назовем его «test1», который должен был ограничить некоторые команды, например «su», но остальное должно быть доступно. Чтобы применить это ограничение, я использовал только ACL (если у вас добавлений включен на FS) на бинарном файле позади самой команды, как так:

setfacl -mu: test1: г/бен/су

выше команда изменяет разрешения для этого конкретного двоичного файла, который на самом деле является командой «su», чтобы предоставить пользователю «test1» доступ только для чтения к этому файлу. Таким образом, когда пользователь «test1» пытается «выполнить» команду «su», он не может запустить скрипт за ним и получает «Permission denied».

Просто запустите «which command_you_want_restricted», чтобы увидеть файл позади него.

Я тестировал этот метод на Red Hat 6.5 & 7, и он просто влияет на пользователя «test1», и все остальные пользователи могут продолжать работать «su» по желанию.

Как для Вас конкретного запроса:

«Или установить политику, чтобы иметь доступ на все команды, кроме„SSH“и„кошки“команды.»

Вы можете сделать то же самое с ACL для группы «demo» в бинарных командах, которые вы хотите, но я НЕ ИСПЫТАЛ это с помощью групп, и я предлагаю вам попробовать его на тестовой виртуальной машине или что-то заранее.

С уважением,

+0

Спасибо большое! Не могли бы вы дать мне пример для «установить политику для доступа ко всем командам, кроме команд ssh и cat». – Mortezaipo

+1

Ну, это на самом деле цитата из вашего первоначального вопроса ... – AnythingIsFine

+1

Вы можете использовать команду «setfacl» во всех командных двоичных файлах, кроме тех, которые вы хотите, чтобы пользователи продолжали использовать. – AnythingIsFine

Смежные вопросы