web-dev-qa-db-ja.com

/ etc / sudoersにNOPASSWDを追加しても機能しない

14.04に。マシンにSSHで接続し、/etc/sudoersに次の行を追加しました。

myuser   ALL=NOPASSWD: ALL

そして、実行してみました:

Sudo mkdir /etc/blah

...パスワードの入力を求められます。なぜ?!?

私はnotこの操作を行うときにパスワードの入力を求められませんls -ltr /を実行すると、次のメッセージが表示されることに注意してください。

drwxr-xr-x 94 root root  4096 Jul 30 13:28 etc

しかし、私は自分を「スーダー」として設定したので、これは重要ではないと思いますか?

さらに重要なことは、パスワードを求められることなく、現在のユーザー(myuser)としてSudo mkdir /etc/blahを実行できるようにするために何をする必要がありますか?

これが私の/etc/sudoersファイル全体です。

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root      ALL=(ALL:ALL) ALL
fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group Sudo to execute any command
%Sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
41
Zac

これを引き起こしたのは、ルールのシーケンス/順序です。最後のルールが優先されます。

問題を解決するには、単に行を移動し、

fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL

sudoersファイルから

Sudo visudo -f /etc/sudoers.d/myOverrides 

これは、プレーンテキストエディタでsudoersファイルを編集するよりも優れたアプローチです。誤ってファイルにエラーを挿入すると、Sudoを実行できなくなる可能性があります。常にvisudoを使用して、構文がチェックされ、間違いに関する警告が表示されるようにしてください!

次のようにオーバーライドされているため、ディレクティブは機能しません。

%admin ALL=(ALL) ALL
%Sudo   ALL=(ALL:ALL) ALL

groupsコマンドを実行すると、ユーザーがこれらのグループに属していることがわかります。

64
Lety

myuserSudoグループにある場合、3番目の行が1番目の行をオーバーライドするため、この順序の行はパスワードなしのアクセスを提供しません(Florian Dieschによると)。 。

myuser    ALL=(www-data:www-data) NOPASSWD: ALL
# Allow members of group Sudo to execute any command
%Sudo   ALL=(ALL:ALL) ALL

したがって、次の順序で行を配置します。

# Allow members of group Sudo to execute any command
%Sudo   ALL=(ALL:ALL) ALL
myuser    ALL=(www-data:www-data) NOPASSWD: ALL

myuserアカウントでSudo -lを使用して、myuserが持つ権限を確認します。

20
Kostyantyn

ユーザーに対して複数のエントリが一致する場合、last oneが使用されます。したがって、fizzbuzzchadminがグループadminまたはSudoのメンバーである場合、パスワードの入力が求められます。

#includedir行の後のsudoersファイルの最後に2行を追加します。

10
Florian Diesch

Sudoを介して実行できるコマンドをカスタマイズする場合、sudoersファイルを直接編集するのではなく、/etc/sudoers.d/の下の別のファイルでこれらの変更を行うのが理想的です。また、ファイルを編集するには、常にvisudoを使用する必要があります。 NOPASSWDコマンドでALLを許可しないでください。

例:Sudo visudo -f /etc/sudoers.d/mynotriskycommand

許可を与える行を挿入:myuser ALL= NOPASSWD: /bin/mkdir

次に、保存して終了すると、visudoは、構文エラーがある場合に警告します。

Sudo -lを実行して、ユーザーに付与された権限を確認できます。ユーザー固有のNOPASSWDコマンドが出力の%groupyouarein ALL=(ALL) ALLコマンドの前に表示される場合、パスワードの入力を求められます。

これらのsudoers.dファイルを大量に作成している場合は、ユーザーごとに名前を付けて作成し、視覚化しやすくすることをお勧めします。ファイル内のファイル名とルールの順序は非常に重要であり、前回のエントリよりも許容範囲が広くても少なくても、最後にロードされたものが優先されることに注意してください。

00-99またはaa/bb/ccのプレフィックスを使用してファイル名の順序を制御できますが、数字のプレフィックスを持たないファイルがある場合は、番号の付いたファイルの後にロードされ、上書きされることに注意してください設定。これは、言語設定に応じて、シェルが最初に使用する「字句ソート」が番号をソートし、次に「昇順」でソートするときに大文字と小文字をインターリーブするためです。

printf '%s\n' {{0..99},{A-Z},{a-z}} | sortおよびprintf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sortを実行して、現在の言語がAaBbCcなどを印刷するか、ABCを表示してからabcを使用して、最適な「最後の」文字プレフィックスを決定しますだろう。

0
dragon788