visudoのNOPASSWDがLinux Mint 18で動作しない理由

visudoのNOPASSWDがLinux Mint 18で動作しない理由

これは私が持っているsudoersファイルです。Debian 9サーバーとそれ働く/etc/sudoers含む:

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
# the following line I've added for sudo to work on Debian, which by default does not
vlastimil   ALL=(ALL:ALL) ALL
# and this line I've added just now, so I could enable / disable teamviewer daemon as I wish
vlastimil   ALL = (root) NOPASSWD: /usr/bin/teamviewer

# 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

これは、パスワードを入力しなくても次のコマンドを実行できることを意味します。

sudo teamviewer daemon disable
sudo teamviewer daemon enable

しかし、これは非動作sudoersファイルLinux Mint 18ある意味、まだ私のパスワードを聞いているようです。/etc/sudoers含む:

Defaults    env_reset
Defaults    mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root        ALL=(ALL:ALL) ALL
# this line I've added myself, because I felt it is needed, however user vlastimil has had sudo access all the time, added just now
vlastimil   ALL=(ALL:ALL) ALL
# and this line I've added just now, so I could enable / disable teamviewer daemon as I wish, but it does not work
vlastimil   ALL = (root) NOPASSWD: /usr/bin/teamviewer

# 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

追加された行が機能しないようにするDebianとMintの間にはいくつかの違いがあるようです。

このページで他の回答を読みました。

パスワードを要求せずにルートで特定のプログラムをどのように実行できますか?

しかし、私はそれについてスマートではありません。

編集1:

最初の答えはLinux Mintで奇妙なエラーを引き起こします。

$ sudo /usr/bin/teamviewer
 Init...
 *** TeamViewer can not be executed with sudo! ***
 Either use your normal user account without sudo
 or use a the real root account to log in to your desktop (not recommended!).

私もこれを理解していません。


$ which teamviewer
/usr/bin/teamviewer

$ file /usr/bin/teamviewer
/usr/bin/teamviewer: symbolic link to /opt/teamviewer/tv_bin/script/teamviewer

$ file /opt/teamviewer/tv_bin/script/teamviewer 
/opt/teamviewer/tv_bin/script/teamviewer: Bourne-Again shell script, ASCII text executable

$ cat /opt/teamviewer/tv_bin/script/teamviewer
#!/bin/bash

# If you see this message, you probably attempted to start TeamViewer.
# Please open a terminal (Konsole, gnome-terminal, xterm),
# navigate to this folder (type 'cd /path/to/teamviewer' [Enter])
# then execute TeamViewer (type './teamviewer' [Enter])


TV_SCRIPT_DIR="$(dirname "$(readlink -e "$0")")"
source "$TV_SCRIPT_DIR/tvw_main"

Main "$@"

編集2:

たとえば、AskUbuntuの場合、コメントで提案されているとおりです。

sudoers NOPASSWDオプションが機能しないのはなぜですか?

他の多くの場所に解決策があり、彼らが支配するでしょう。後ろに管理者グループのルール。試してみて、後で再起動してみましたが、まだ機能しません。

答え1

# this line I've added myself, because I felt it is needed, however user vlastimil has had sudo access all the time, added just now
vlastimil   ALL=(ALL:ALL) ALL
# and this line I've added just now, so I could enable / disable teamviewer daemon as I wish, but it does not work
vlastimil   ALL = (root) NOPASSWD: /usr/bin/teamviewer

最初のコメントは、ユーザーがグループのメンバーであることを示しますsudo。これは、Linux Mintユーザーがsudoデフォルトでアクセス権を取得する方法です。その後、グループのルールがsudo導入されました。

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

これ最後一致ルールが勝ちます。将来のルールも適用される場合、以前のvlastimilルールは重要ではありません。NOPASSWDこのNOPASSWD規則はこの規則の後に続く必要があります。これがすぐにファイルを使用するのが/etc/sudoers.d効果的な理由です。このファイルが最後に含まれているためです。

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

#includedir /etc/sudoers.d

に複数のファイルを追加する場合は、sudoers.d番号付きファイル名規則(XX-somefile)を使用すると、ファイルが確実にソートされ、規則の正しい優先順位を確保できます。

答え2

Ubuntu 16.04ベースのLinux Mint 18.2の1つの解決策は、visudo以下を使用して別々のsudoersファイルを作成することです。

sudo visudo -f /etc/sudoers.d/teamviewer

追加行を追加します。

vlastimil   ALL = (root) NOPASSWD: /usr/bin/teamviewer

入ってください。おそらく最もエレガントな解決策かもしれませんが、それは単にコメントの問題です。

答え3

これはバイナリファイルに定義された絶対パスですteamviewer

vlastimilユーザーとして次のことを試してください。

$ sudo /usr/bin/teamviewer

関連情報