3

ユーザーが共有ユーザー アカウントに sudo されている間、実行される場合と実行されない場合があるアプリケーションがあります。一種の「名誉システム」ACL の実際のユーザーが誰であるかを確実に識別したいと考えています。親/グループ/セッション プロセス ID をpstreeコマンドのようにトレースする方法があると思いますが、それを最善の方法で行う方法や、より良い代替手段があるかどうかはわかりません。

もともとやってみgetlogin()た。が使用されている場合./myappは機能しますが、「cat input |」で失敗します。./myapp` (「制御端末」は共有アカウントが所有するパイプであるため)。

unset情報がまだ他の場所で利用可能な場合、「名誉システム」が単純に完全に妨害されたくないので、環境変数を信頼したくありません。

wtmpまた、リモート RPC (NIS または LDAP) であり、必要な情報が既に含まれていると確信しているため、パスワード データベースのルックアップを強制することも避けたいと思います。

4

3 に答える 3

1

どうですか:

#!/usr/bin/ksh
username=`id | cut -d"=" -f2 | cut -d" " -f1`

if [ $username == "0(root)" ]
then
  print "Yes, the user is root"
else
 print "Sorry! the user $username, is not a root"
fi
于 2012-09-11T09:18:18.383 に答える
1

sudo環境変数SUDO_USERSUDO_UID、および を設定しますSUDO_GID

これは次の方法でテストできます。

$ sudo env
[sudo] password for shteef: 
TERM=xterm
# [...snip...]
SHELL=/bin/bash
LOGNAME=root
USER=root
USERNAME=root
SUDO_COMMAND=/usr/bin/env
SUDO_USER=shteef
SUDO_UID=1000
SUDO_GID=1000

しかし、ユーザーが共有アカウントでシェル アクセス権を持っている場合、これもやみくもに信頼することはできないと思います。

于 2010-02-06T17:47:44.360 に答える