グループ「demo」にユーザーがいます。
このユーザーは「vim」、「nano」、「cd」などの10個のコマンドを実行できるというポリシーを設定します。
または、「ssh」コマンドと「cat」コマンドを除くすべてのコマンドにアクセスできるようにポリシーを設定します。
ありがとう
これを実現する方法はたくさんあります。いくつかの可能な解決策の1つをリストします。
ユーザーがアクセスを許可されるべきではないコマンドを実行できないようにするために、いくつかの異なる保護レイヤーを使用することを提案します。ここでの指示はすべて、ユーザーが独自の_/home/[username]
_ディレクトリを持ち、シェルが_/bin/bash
_であり、システムにログインするときにbashシェルを使用することを想定しています。
1)ユーザーのbashを制限bashモードに変更して、ディレクトリを変更できないようにします(システムに制限bashモードがない場合、 このリンク が役立ち、詳細情報を提供します)_chsh -s /bin/rbash [username]
_
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 ''"
_コマンドがリストの最後のコマンドであることを確認する必要があります。そうしないと、これらすべてのコマンドのエイリアスを作成できなくなります。
注以下のコマンドを実行すると、システムで使用可能なほぼすべてのコマンドが検索され、事前作成されたほぼすべての使用可能なコマンドが出力されます。 _[
_コマンドは、bashのtest
commandです。そのため、ファイルにそれが表示されていれば、エラーではありません。
_#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
_
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]
_キーを押した場合と同じ情報を出力します、および_/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:ユーザーに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
_
このように一般的なコマンドのリスト ハーバードのウェブサイト (徹底的ではない)
Linuxにプログラムをインストールすると、使用可能なものが変更されます。上記のコマンドをステップ4で実行して、インストール後に新しいコマンドを見つけることをお勧めします。
一部のプログラムではシェルコマンドを実行できるため、エディターには注意が必要です
_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年遅れていることを知っていますが、今あなたの状況の回避策を見つけました。私にはユーザーがいました。「su」など、いくつかのコマンドを制限する必要がある「test1」と呼びましょうが、残りは使用可能です。この制限を適用するために、コマンド自体の背後にあるバイナリファイルでACLを使用しました(FSでACLが有効になっていると仮定):
上記のコマンドは、特定のバイナリファイル(実際は "su"コマンド)のアクセス許可を変更して、ユーザー "test1"にそのファイルへの読み取りアクセスのみを許可します。そのため、ユーザー「test1」が「su」コマンドを「実行」しようとすると、その背後でスクリプトを実行できず、「Permission denied」が取得されます。
「which command_you_want_restricted」を実行して、背後のファイルを確認します。
Red Hat 6.5および7でこの方法をテストしましたが、ユーザー「test1」に影響するだけで、他のすべてのユーザーは意のままに「su」を実行できます。
あなたの特定のリクエストに関して:
「または、「ssh」および「cat」コマンドを除くすべてのコマンドにアクセスできるようにポリシーを設定します。」
あなたが望むコマンドバイナリのグループ「デモ」のACLで同じことを行うことができますが、グループでこれをテストしていないので、テストVMまたは何かで試してみることをお勧めします予め。
よろしく、
@Dodzi Dzakumaソリューションは、無効にするコマンドが数個しかない場合に最適です。
ただし、ユーザーに複数のコマンドの実行のみを許可する場合は、こちらがより良い解決策です:
ユーザーシェルを制限付きbashに変更します
chsh -s /bin/rbash <username>
ユーザーのホームディレクトリの下にbinディレクトリを作成します
Sudo mkdir /home/<username>/bin
Sudo chmod 755 /home/<username>/bin
ユーザーのデフォルトPATHを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
すべての可能なコマンドのエイリアスを設定して無効にするのではなく、許可するコマンドのシンボリックリンクのみを設定するため、ユーザーに複数のコマンドの実行のみを許可する場合は、これが優れています。
標準的な答えは、制限されたシェルを使用し、これをそのグループのユーザーのパスワードファイルの最後のエントリにすることです。 vimのようなものから外部コマンドを実行できるように: http://web.physics.ucsb.edu/~pcs/apps/editors/vi/vi_unix.html
制限された環境を作成しようとしている場合、これは素晴らしいアイデアとは思えません。ユーザーが最初にできることは、上記のリンクのコマンドを使用して/bin/bash
そして彼は制限された環境の外にいるだろう。
より良いアイデアは、各ユーザーのログインをchroot jailまたはおそらく軽量コンテナーに入れることです(したがって、ユーザーが何かを壊す場合は、それは自分のコンテナーです)。 Dockerをご覧ください- http://docker.io .
答えにネイティブSSH機能をまだ誰も使用していないことに少し驚いています...私は4年遅れていることを知っていますが、まだ便利です:)
SSHを使用する場合は、ログインにキーを使用する必要があります。サーバーの保護について説明しているように、パスワードログインを無効にすることは、最初に行うべきことの1つです。したがって、キーを使用している場合、これをauthorized_keysファイルに追加することにより、キーごとに1つのコマンドのみを許可することができます。
command="only" ssh-rsa AAABBBCC....
only
コマンドは、ユーザーがこれらのコマンドのみを実行できるようにするホワイトリスト機能です。デフォルトのバイナリパーミッションを変更することにより、システムで例外を作成する必要はありません(これは管理者の地獄です)。 authorized_keys
ファイルがユーザーに対して書き込み不可に設定されていることを確認してください。
唯一のコマンドは、/usr/bin/
に775権限でインストールする必要があるスクリプトです。
それについてのすべてをお読みください: OnlySSH強制コマンドの方法
これで仕組みがわかったので、ユーザーに実行を許可するコマンドをホワイトリストに追加するだけです。
command="only cal cowsay factor figlet fortune" ssh-rsa AAABBBCC....
または、適切な構文で.onlyrules
ファイルを使用します。貪欲な正規表現を使用しないように注意してください。
----------------------
< I'm restricted >
----------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
特定のコマンドのみにアクセスするように人々を制限しなければならなかった組織で、同様の状況に直面しました。
これまでのところ、2つの異なる方法を見つけました。
ここに私の考えがあります。
ユーザーがログインして特定のコマンドを実行し、シェルを完全に終了するようにしたい場合は、唯一のアプローチを取ります。 Rbash と組み合わせて使用する方が良いでしょう。
3つのシェルのうち、特にUbuntuとその派生物を使用している場合は、 lshell を実装するのが最も簡単だと思います。 aptを介してパッケージをインストールし、構成を編集するだけです。最も簡単です。
rbash は、リダイレクトやCLIの特定の文字をブロックするなどの基本的なものには適していますが、特定のコマンドをホワイトリストに登録するなどの高度なものを行うには、余分な距離を移動する必要があります。
Dockersh は、シェルを制限するための完全に最新のアプローチです。ここではすべてを許可しますが、ユーザーのすべてのアクションをコンテナに制限します。
私のユースケースでは、シェルベースのリダイレクト、パイピングなどがオフになっている単一のコマンドにユーザーを制限する必要があったため、 lshell を選択しました。構成に5分もかかりませんでした。詳細を検索 こちら 。