50

ユーザーの特定の情報を確認するために php を使用して bash スクリプトを実行するサーバーを実行しています。たとえば、Web ホスティング サーバーをセットアップしていて、そのアカウントに別のドメインを追加できるようにするために、ユーザーが実際に「customers」グループのメンバーであるかどうかを確認したいと考えています。これを行う最良の方法は何ですか?

私はグーグルを検索しましたが、思いついたのはユーザーまたはグループが存在するかどうかを確認する方法だけなので、グーグルは今のところ大きな助けにはなりません.

4

13 に答える 13

42

これをやってみてください:

username=ANY_USERNAME
if getent group customers | grep -q "\b${username}\b"; then
    echo true
else
    echo false
fi

また

username=ANY_USERNAME
if groups $username | grep -q '\bcustomers\b'; then
    echo true
else
    echo false
fi
于 2013-08-25T16:48:33.883 に答える
8

これはおそらく古いスレッドであることはわかっていますが、これもうまく機能する場合に備えて:

id -Gn "username"|grep -c "groupname"

0 より大きい数値が返された場合、ユーザーはそのグループのメンバーです。

于 2015-05-15T05:52:20.750 に答える
1

別の答えのように聞こえます:

username='myuser'
if grep -q -E "^customers:.*[:,]$username(,.*|\b)" /etc/group; then
    echo 'true'
else
    echo 'false'
fi

sputnickコマンドの出力で報告されるようgroupsに、OS によって異なる場合があります。このコードがどのように機能するかはわかりませんが、おそらく改善されるでしょう。

于 2013-08-25T18:20:38.763 に答える
0

私のバージョンはgrepに依存していません。

最初のパラメーター (必須): group
2 番目のパラメーター (オプション、デフォルトは現在のユーザー)

isInGroup(){
   group="$1"
   user="${2:-$(whoami)}"
   ret=false 
   for x in $(groups "$user" |sed "s/.*://g")
   do [[ "$x" == "$group" ]] && { ret=true ; break ; }
   done
   eval "$ret"
}
于 2015-02-19T13:45:56.180 に答える