確認 Linux でユーザーコマンドを制限する方法




ディレクトリ パーミッション (4)

"demo"というグループにユーザーがいます。

私は、このユーザーが "vim"、 "nano"、 "cd"などの10個のコマンドを実行できるという方針を設定したいと思います。

または、 "ssh"コマンドと "cat"コマンドを除くすべてのコマンドにアクセス権があるようにポリシーを設定します。

ありがとう


標準的な答えは制限されたシェルを使用することでしょう、これをそのグループのユーザのためのパスワードファイルの最後のエントリにします。 あなたはvimのようなものから外部コマンドを実行することができますように: http://web.physics.ucsb.edu/~pcs/apps/editors/vi/vi_unix.html : http://web.physics.ucsb.edu/~pcs/apps/editors/vi/vi_unix.html

あなたが制限された環境を作り出そうとしているならば、これは素晴らしい考えのように思われません。 ユーザーが最初にできることは、 /bin/bashを実行するために上記のリンク内のコマンドを使用することです。そして、彼は制限された環境の外にいるでしょう。

より良いアイデアは、各ユーザのログインをchroot刑務所またはおそらく軽量のコンテナに入れることです(だから彼らが何かを壊したらそれはそれ自身のコンテナです)。 Dockerを見てみましょう - http://docker.io


これを実現するための方法はたくさんあります。 いくつか考えられる解決策のうちの1つをリストします。

ユーザーがアクセスを許可されるべきでないコマンドを実行できないようにするために、いくつかの異なる保護層を使用することを提案します。 ここでのすべての指示は、ユーザーが自分の/home/[username]ディレクトリを/home/[username] 、そのシェルが/bin/bashあり、システムにログインするときにbashシェルを使用することを前提としています。

1) ユーザーのbashを制限付きbashモードに変更して、ディレクトリを変更できないようにします(システムに制限付きbashモードがない場合は、このリンクをクリックすると参考になります)。chsh -s / bin / rbash [ユーザー名]

2)ユーザーだけが自分のホームディレクトリの内容を編集できるように、ディレクトリのアクセス許可を変更します。

chmod 755 /home/[username]

3)ユーザーの.bashrcファイルを削除します

rm /home/[username]/.bashrc このサイトでは、なぜこのような状況で.bashrcを削除するのが良い方法であるかについての詳細な情報があります。

4) .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 ''"  

詳細については、bashコマンドの全リストを確認しください。 alias alias="printf ''"コマンドがリストの最後のコマンドであることを確認する必要があります。そうしないと、それらすべてのコマンドのエイリアスを失うことになります。

5)viコマンドを制限モードにエイリアスして、viのシェルコマンドを無効にする
構文はalias vi="vi -Z"ですが、詳細についてはこのサイトを参照してください。

6)ユーザーの.bash_profile所有権をrootに変更します
chown root:root /home/[username]/.bash_profile

7)最後に、ユーザーの.bash_profileに対する書き込み権限を削除します。
chmod 755 /home/[username/.bash_profile]

ユーザがログインしたときにディレクトリを変更できなくなった場合、ユーザが使用したくないコマンドはすべて、ユーザがコマンドを指定せずに[ENTER]キーを押した場合と同じ情報を出力し[ENTER]あなたの/bin/bash関数はそのまま残ります。

どのような機能をこの方法でエイリアスするかどうかを選択しても、ユーザーは実装したコントロールの一部を回避できる場合があります。 しかし、私たちがいくつかの安全バッファを実装したので、ユーザーは本当に危険をするためにコンピュータシステムについて知る必要があるでしょう。

関連するメモや考慮すべき点について、これらのエイリアスを各ユーザーの.bash_profile直接配置すると、どの関数をエイリアスする必要があるかどうかを維持するのが難しくなり、エイリアスを変更する必要がある場合あなたはそれらすべてを個別に変更しなければならないでしょう。 また、ユーザーはファイルを表示するためにvimまたはviを使用することができるので、ユーザーは自分の.bash_profileの内容を見て、自分が持っている制限と持たない制限を理解することができます。

これを回避するために私はお勧めします。

1)ユーザーがアクセスできないディレクトリにすべてのエイリアスを配置します(ここに.bash_profile内容を貼り付けます)。

/[path_to_file]/startup_functions_for_beginners.sh

2)エイリアスを.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:ユーザーがfgbgアクセスできる必要がありますが、 aptitudebashにアクセスできないようにしたいのですが。

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 Webサイトによる一般的なコマンドの一覧です(排他的ではありません)。

プログラム内からシェルコマンドを実行することを許可している人もいるので、編集者には注意が必要です。

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

@Dodzi Dzakumaソリューションは、無効にしたいコマンドがいくつかある場合に最適です。

ただし、ユーザーに複数のコマンドの実行を許可するだけの場合は、これがより良い解決策です。

  1. ユーザーシェルを制限付きbashに変更

    chsh -s /bin/rbash <username>
  2. ユーザーのホームディレクトリの下にbinディレクトリを作成します。

    sudo mkdir /home/<username>/bin
    sudo chmod 755 /home/<username>/bin
  3. ユーザーのデフォルトのPATHをbinディレクトリに変更します。

    echo "PATH=$HOME/bin" >> /home/<username>/.bashrc
    echo "export PATH >> /home/<username>/.bashrc
  4. ユーザーが必要とするコマンドのシンボリックリンクを作成します。

    sudo ln -s /bin/<command> /home/<username>/bin/
  5. ユーザーによる〜/ .bashrcの変更を制限します

    chattr +i /home/<username>/.bashrc

すべての可能なコマンドのエイリアスを設定してそれらを無効にするのではなく、許可するコマンドのシンボリックリンクを設定するだけなので、ユーザーに複数のコマンドの実行を許可するだけの場合は、これが適しています。


誰もまだ答えにネイティブSSH機能を使用していないことに少し驚いています...私は4年遅れていることを知っていますが、それはまだ便利かもしれません:)

SSHを使うときは、ログインに鍵を使うべきです。 サーバーの保護について説明しているように、パスワードログインを無効にすることは最初にすべきことのひとつです。 したがって、キーを使用しているので、これをauthorized_keysファイルに追加することで、キーごとに1つのコマンドだけを許可することができます。

command="only" ssh-rsa AAABBBCC....

onlyコマンドは、ユーザーがそれらのコマンドのみを実行できるようにするホワイトリスト機能です。 デフォルトのバイナリパーミッション(管理者権限)を変更して、システムに例外を加える必要はありません。 ユーザーがauthorized_keysファイルを書き込み不可に設定したことを確認してください。

唯一のコマンドは、775の権限で/usr/bin/インストールする必要があるスクリプトです。

それについてのすべてを読んでください: SSH強制コマンドのための唯一の方法

これでその仕組みが理解できたので、ユーザーに実行を許可するコマンドを単純にホワイトリストに登録することができます。

command="only cal cowsay factor figlet fortune" ssh-rsa AAABBBCC....

または、適切な構文の.onlyrulesファイルを使用します。欲張り正規表現を使用しないように注意してください。

  ----------------------
  <   I'm restricted   >
  ----------------------
         \   ^__^ 
          \  (oo)\_______
             (__)\       )\/\
                 ||----w |
                 ||     ||




restriction