パスワードなしでSudoとして何かを実行する必要があるため、visudo
を使用して、これをsudoers
ファイルに追加しました。
MYUSERNAME ALL = NOPASSWD: /path/to/my/program
それから私はそれを試しました:
$ Sudo /path/to/my/program
[Sudo] password for MYUSERNAME:
なぜパスワードを要求するのですか?パスワードを要求せずに、root以外のユーザーでrootとしてコマンドを実行/使用するにはどうすればよいですか?
sudoers
ファイルに別のエントリがあり、通常は/etc/sudoers
にありますが、これもユーザーと一致します。 NOPASSWD
ルールが優先されるためには、そのルールの後にある必要があります。
これを実行すると、Sudo
は/path/to/my/program
を除くすべてのコマンドで通常パスワードの入力を求めます。これにより、パスワードを要求せずに常に実行できます。
/etc/sudoers
に一致するエントリが複数ある場合、Sudoは最後のエントリを使用します。したがって、パスワードプロンプトで任意のコマンドを実行でき、パスワードプロンプトなしで特定のコマンドを実行できるようにしたい場合は、最後に例外が必要です。
myusername ALL = (ALL) ALL
myusername ALL = (root) NOPASSWD: /path/to/my/program
(root)
の使用に注意してください。これにより、プログラムをrootとして実行し、他のユーザーとしては実行できなくなります。 (意味を考えない限り、必要最低限の許可以上の許可を与えないでください。)
Ubuntuを実行していないか、デフォルトのSudo設定を変更した読者への注意(UbuntuのSudoはデフォルトで問題ありません):昇格した特権でシェルスクリプトを実行する危険であり、クリーンな環境から開始する必要があります(シェルが開始した後は手遅れです( シェルスクリプトでsetuidを許可する を参照)。そのため、Sudoを使用する必要があります)。 Defaults env_reset
に/etc/sudoers
があること、またはこのオプションがコンパイル時のデフォルトであることを確認してください(Sudo sudo -V | grep env
にはReset the environment to a default set of variables
を含める必要があります)。
完全なソリューション:次の手順は、目的の出力を達成するのに役立ちます。
新しいスクリプトファイルを作成します(create_dir.sh
を目的のスクリプト名に置き換えます)。
vim ~/create_dir.sh
スクリプトはユーザーのホームディレクトリに作成されます
root
またはSudo
ユーザーのみがルートディレクトリレベルでフォルダーを作成するように実行できるいくつかのコマンドを追加します。
mkdir /abc
注:これらのコマンドにSudo
を追加しないでください。保存して終了(:wq!
を使用)
以下を使用して実行権限を割り当てます。
Sudo chmod u+x create_dir.sh
このスクリプトがパスワードを必要としないように変更を加えます。
sudoers
ファイルを開きます。
Sudo visudo -f /etc/sudoers
最後に次の行を追加します。
ahmad ALL=(root) NOPASSWD: /home/ahmad/create_dir.sh
ahmad
をユーザー名に置き換えます。また、これが最後の行であることを確認してください。保存して終了。
ここで、コマンドを実行するときに、次のようにSudo
を追加します。
Sudo ./create_dir.sh
これにより、パスワードを要求せずにスクリプトファイル内のコマンドが実行されます。
ここに記載されている簡単な手順に従ってください http://step4wd.com/2013/09/14/run-root-commands-in-linux-ubuntu-without-password/
構文が間違っていると思います。少なくとも私は私のために働く以下を使います:
myusername ALL=(ALL) NOPASSWD: /path/to/executable
Sudoを使用したり、sudoers構成ファイルを変更したりする必要がない場合は、次のコマンドを使用できます。
Sudo chown root:root path/to/command/COMMAND_NAME
Sudo chmod 4775 path/to/command/COMMAND_NAME
これにより、Sudoを使用せずにコマンドがrootとして実行されます。
Manjaroのようなディストリビューションがある場合は、最初に/ etc/sudoersの定義をオーバーライドするファイルを処理する必要があります。ファイルを削除するか、そのファイルを直接操作して、新しい構成を追加します。
このファイルは:
Sudo cat /etc/sudoers.d/10-installer
それを確認する唯一の方法は、ルート権限の下にあります。このディレクトリがないと、このディレクトリを一覧表示できません。このファイルはManjaro固有であり、他の名前でこの設定を見つけることができますが、同じディレクトリにあります。
選択したファイルに次の行を追加して、目的の構成を取得できます。
グループの認証を無視する
%group ALL=(ALL) NOPASSWD: ALL
またはユーザーの認証を無視する
youruser ALL=(ALL) NOPASSWD: ALL
または特定のユーザーの実行可能ファイルの認証を無視する
youruser ALL=(ALL) NOPASSWD: /path/to/executable
クイックノート:認証なしでSudoを使用するためのドアを開いています。つまり、システムからすべてを変更してすべてを実行でき、責任を持ってそれを使用できます。
Sudoにエイリアスが設定されていないことを確認します。このように走る
/usr/bin/Sudo /path/to/my/program
たとえば、次のようなシェルエイリアス:
alias Sudo="Sudo env PATH=$PATH"
この動作を引き起こす可能性があります。
これは私のために問題を解決しました(役立つかもしれない他の答えのいくつかも試しました):
呼び出していたスクリプトは/usr/bin
にありました。このディレクトリには、書き込み権限がありません(通常、そこにあるすべてのファイルを読み取ることができます)。スクリプトはchmodded + x(実行可能権限)でしたが、それでも機能しませんでした。このファイルを/usr/bin
ではなく、ホームディレクトリ内のパスに移動すると、パスワードを入力せずにSudoで呼び出すことができるようになりました。
また、私が疑問に思ったこと(将来の読者のために明確にします):スクリプトをSudoとして実行する必要があります。 callingスクリプトの場合は、Sudo
と入力します。実際にrootを必要とするスクリプト内のコマンドにはSudo
を使用しないでください(私の場合、キーボードのバックライトを変更します)。たぶんそれでもうまくいくかもしれませんが、そうする必要はありません。
スクリプトを実行するときは、Sudo /path/to/my/script
として実行する必要があります。
編集:別の回答へのコメントに基づいて、これをアイコンから実行します。端末と同じように、Sudoでプログラムを実行する.desktop
ファイルを作成する必要があります。
ビジュアルパスワードプロンプトにgtk-Sudo
を使用することも検討できます。
Rootとして実行するべきではなく、システムをさらに変更してroot権限をまったく必要としないほうがよい方法だと考えてください。
別の可能性は、インストールして構成し、次に super コマンドを使用してスクリプトを次のように実行することです。
super /path/to/your/script
いくつかのバイナリを実行したい場合 実行可能 (たとえば、いくつかのCソースコードから [〜#〜] elf [〜#〜] バイナリにコンパイルした場合)-これはnotスクリプト-rootとして、あなたはそれを作ることを考える setuid (実際には/bin/login
、/usr/bin/Sudo
と/bin/su
とsuper
はすべてこの手法を使用しています)。ただし、非常に注意してください巨大なセキュリティホールを開く可能性があります。
具体的には、プログラムを偏執的にコード化する必要があります(したがって、潜在的に敵意のあるユーザーを想定して、「実行」する前にすべての引数と環境および外部条件を確認してください)。次に、 seteuid(2) とフレンド(以下を参照)を使用できます。また、慎重に setreuid(2) )(また参照 capabilities(7) & credentials(7) & execve(2) ...)
そのようなバイナリをインストールするときは、chmod u+s
(read chmod(1) )を使用します。
ただし、十分注意してください。
そのようなものをコーディングする前に、 Advanced Linux Programming を含むsetuidに関する多くのことを読んでください。
スクリプト、または Shebang -edのものはsetuidできないことに注意してください。しかし、それをラップする小さなsetuid-binaryを(Cで)コーディングできます。
Sudo
を介して実行できるコマンドをカスタマイズする場合は、sudoers
ファイルを直接編集するのではなく、_/etc/sudoers.d/
_の下の別のファイルでこれらの変更を行うのが理想的です。また、ファイルを編集するには常にvisudo
を使用する必要があります。 NOPASSWD
コマンドに対してALL
を付与しないでください。
例:_Sudo visudo -f /etc/sudoers.d/mynotriskycommand
_
アクセス許可を付与する行を挿入します:_myuser ALL= NOPASSWD: /path/to/your/program
_
次に保存して終了すると、構文エラーがある場合は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
etcまたはABC
を出力するかどうかを確認し、次にabc
を使用して最適な「最後の」文字を判別します。使用する接頭辞は次のようになります。
または、python pudo パッケージを使用できます。
インストール:
user$ Sudo -H pip3 install pudo # you can install using pip2 also
以下は、ルート権限でコマンドを実行するためのpython自動化で使用するためのコードスニペットです。
user$ python3 # or python2
>>> import pudo
>>> (ret, out) = pudo.run(('ls', '/root')) # or pudo.run('ls /root')
>>> print(ret)
>>> 0
>>> print(out)
>>> b'Desktop\nDownloads\nPictures\nMusic\n'
以下は、root権限でコマンドを実行するためのcmdの例です。
user$ pudo ls /root
Desktop Downloads Pictures Music
ユーザーにパスワードを尋ねずにSudoとしてプログラムを実行できるようにするには、次の行を追加します
%Sudo ALL=(root) NOPASSWD: /path/to/your/program
/etc/sudoers
%Sudoにすることに注意してください。
以下は、特定のオプションセットがある場合にのみパスワードなしでコマンドを実行する場合(オプションの一部が変数である場合)です。私の知る限り、sudoers宣言で変数または値の範囲を使用することはできません。つまり、以下を使用して_command option1
_へのアクセスを明示的に許可できますが、_command option2
_へのアクセスは許可できません。
user_name ALL=(root) /usr/bin/command option1
ただし、構造が_command option1 value1
_である場合、_value1
_は変化する可能性があるため、_value1
_の可能な値ごとに明示的なsudoers行が必要です。シェルスクリプトはそれを回避する方法を提供します。
この回答はM. Ahmad Zafarの回答に触発され、セキュリティの問題が修正されています。
Sudo
なしでコマンドを呼び出すシェルスクリプトを作成します。/usr/local/bin/
_)に保存し、ファイルをルート所有(例:_chown root:wheel /usr/local/bin/script_name
_)に他のユーザーへの書き込みアクセス権なし(例:_chmod 755 /usr/local/bin/script_name
_)にします。Visudoを使用してsudoersに例外を追加します。
user_name ALL=(root) NOPASSWD: /usr/local/bin/script_name
。
スクリプトを実行します_Sudo script_name
_。
たとえば、macOSでディスプレイのスリープタイムアウトを変更したいとします。これは以下を使用して行われます:
_Sudo pmset displaysleep time_in_minutes
_
スリープタイムアウトを変更することは、パスワード入力の煩わしさを正当化しない無害なアクションであると考えていますが、pmset
は多くのことを実行できるため、他のことはSudoパスワードの背後に置いておきたいと思います。
だから私は_/usr/local/bin/ds
_に次のスクリプトを持っています:
_#!/bin/bash
if [ $# -eq 0 ]; then
echo 'To set displaysleep time, run "Sudo ds [sleep_time_in_minutes]"'
else
if [[ $1 =~ ^([0-9]|[1-9][0-9]|1[0-7][0-9]|180)$ ]]; then
pmset displaysleep $1
else
echo 'Time must be 0..180, where 0 = never, 1..180 = number of minutes'
fi
fi
_
sudoers
ファイルの最後に、次の行があります。
user_name ALL=(root) NOPASSWD: /usr/local/bin/ds
タイムアウトを3分に設定するには、通常のユーザーアカウント_user_name
_からスクリプトを実行します。
_Sudo ds 3
_
PS私のスクリプトのほとんどは入力検証であり、これは必須ではないため、以下も機能します。
_#!/bin/bash
pmset displaysleep $1
_