2017-03-22 2 views
0

質問を展開することを願ってhereさんに、空のパスワードを持つユーザーを探すことについて尋ねました。私が欲しいのは、システムが、私はそれを実行したときに空のパスワードで「実ユーザ」のアカウントを検索するにはどうすればよいですか?

sudo getent shadow | grep '^[^:]*:.\?:' | cut -d: -f1 

ラインがプリントアウトすることを占めるフィルタリングです。

私の問題は、私のシステムのスクリプトや端末を使って追加された空のパスワードを持つユーザーアカウント、つまり「本当の」人物だけでなく、私が所有しているアカウントだけを表示できるようにしたいということです自分自身を作った。深さで

何が起こる

希望は何
~$ sudo useradd bob 

~$ sudo getent shadow | grep '^[^:]*:.\?:' | cut -d: -f1 
Sudo password for user: [pw] 
daemon 
bin 
sys 
[...] 
rtkit 
saned 
usbmux 
bob 
~$ 

:私はパスワードなしでボブを追加したとき、つまり

~$ sudo useradd bob 

~$ sudo [getent command for the problem] 
Sudo password for user: [pw] 
bob 
~$  

を私は彼だけを見ることができるようにしたい。

これはおそらくではありません。であるため、詳しい説明が必要です。

これは、上記のプロパティを持つすべてのユーザーを検索して削除することです。したがって、私はシステム作成のアカウントを削除したくありません。


アップデート1:修正し誤植。


アップデート2:私はgetentで受信された3番目のフィールドで自分のIDですべてのユーザーを除外することができることを見出しました。

したがって、このように、パイプラインかかわら2のgrepを実行している:

sudo getent shadow | grep '^[^:]*:.\?:' | grep (regex) | cut -d: -f1 

は仕事を取得します。

正規表現では、'.:.:[^(17212)]:.:.:.:.:.:.'を使用する必要があることを理解していますが、一致するものは返されません。

誰かに代替案を提案できますか?


私はUbuntu 16.04を使用しています。

ありがとうございました。


答えて

0

ケース解決の出力の3番目のフィールドです:次を使用して

sudo getent shadow | awk -F ':' '{print $1 \" \"$2 \" \" $3} 

でスクリプト内のカスタムパーサーとの組み合わせにより、空のパスワードを持つすべてのユーザーアカウントをアプリケーション内のリストに入れることができました。

次に、17212プロパティでは、システムアカウントをユーザーアカウントから区別できます。

システムアカウントをユーザーアカウントから通知するこの方法は、あなたのためには機能しない可能性があります。

0

ユーザーアカウントIDは、あなたがそれらをフィルタリングする必要があるので、下のIDは、システムアカウントに所属し、1000年からスタート - idが

> getent passwd 
+0

私はすべてのフィールドを見るためにcutコマンドを実行しました - システムには17212のIDがありますが、 "Bob"には17247があります。 "1000"の制限は正しいですか?私の場合は17212以下に制限するだけですか? –

+0

ユーザアカウントとシステムアカウントに割り当てられる数値ユーザIDのセットは、システムによって異なる場合があります。 –

+0

@KeithThompsonこれは慣行であることを認識していますが、保管されていないケースは思い出すことができません。どうやら、それはここのケースです。 – MirMasej

関連する問題