Sudo
の理解に問題があります。端末に非管理者/非rootユーザーとしてログインしています。この「通常の」ユーザーはsudoersファイルにありません(私の意見ではそうではありません)。
ここで、admin/root権限と、通常のユーザーのディレクトリへのアクセスを必要とするコマンドを実行しようとしました。そのため、単にadminまたはrootユーザーにsu
することはできません。
私の理解ではSudo -u root
でうまくいくはずですが、root
(または通常の管理者ユーザーで試してみる場合は管理者)のパスワードを受け入れません。 -u username
オプションが期待どおりに機能しないことを示す「通常の」ユーザーのパスワードのみを受け入れます。
私の期待は、Sudo -u root some_command
がrootの権限でsome_command
を実行するため、rootのパスワードも要求することです。明らかにそうではありません。
TL; DR:管理者権限を必要とし、通常のユーザーをsudoersファイルに追加せずに「ログイン(通常)ユーザー」のファイルにアクセスできるコマンドを実行するにはどうすればよいですか?
Mac OS X 10.7でrootユーザーを有効にしました。
Sudo
には常に実行ユーザーのパスワードが必要です(これを行うには特定の権限が必要です。つまり、sudoers
の1つです)。
su
にはターゲットアカウントのパスワードが必要です(デフォルトではroot
ですが、ルートアカウントにはデフォルトでOS Xのパスワードがありません)。代わりにsu
を使用する場合、宛先アカウントのパスワードを入力し、そのユーザーの特権を使用してコマンドを実行できます。
su -c some_cmd # as root
su username -c some_cmd # as username
これは、ユーザー名の後のすべての引数を宛先アカウントのログインシェルに渡すことで機能します。シェルは通常、-c <commands>
引数をサポートします。 GNU coreutils su
には、su
への実際の-c command
引数があり、ユーザー名の前に配置できます。
(他のユーザーアカウントのパスワードを使用して)別のユーザーアカウントにsu
でき、そこからSudo
できます(他のアカウントがsudoer
である場合)。
別のアカウントのパスワードを入力したり、通常のアカウントにsudoers
権限を付与したりしない場合は、キー認証付きのSSHなどを考慮しない限り、ほとんど選択肢がありません。
Mac OS Xで個別のrootユーザーを維持する必要がない限り、Sudo -s
を使用してrootシェルを取得する方がはるかに簡単です。
あなたの場合、管理者以外のユーザーは/ etc/sudoersに含まれていません。そのため、Sudoを許可するユーザー/グループを手動で追加する必要があります。
# User privilege specification
root ALL=(ALL) ALL
%admin ALL=(ALL) ALL
それが完了すると、SudoはPATHやその他の変数などのシェルからほぼすべての素晴らしいものを継承しますが、管理者以外のユーザーを即座にrootに昇格させます。 rootを有効にすることの欠点は、時間と、誰かが実際にローカルまたはリモートでrootとしてログインすることのセキュリティリスクです。
Sudo
がログインウィンドウ画面にログインしたユーザーのパスワードを要求していることに注意してください。 su -
はrootアカウントのパスワードを要求します。Sudo -s
は特権エスカレーションを使用して、現在のユーザーのパスワードを使用し、ルートを必要とせずに(または、あなたの場合は実際の)rootになりますパスワード。
標準的なアカウント(通常はセキュリティ上の理由から)を使用していて、管理者のユーザー名とパスワードがわかっている場合は、su -l admin_user
。パスワードを入力すると、すべての効果について、その管理者の役割を果たします。そうすれば、思い通りにSudo
できます。ここで、logout
を実行して、元のプレーンアカウントに戻ります。
私の端末実行可能ファイルは、それ自体が達成することはできませんが、その厄介な操作を行うことによって:
App> Utility> Terminal.appを開きます。
〜user $ Sudo/PATH_TO_TERMINAL_EXEC
管理者権限を取得します。
できました。
...これがterminal_executableの中にあります
#!/bin/bash
echo PATCHING HOSTS FILE...!
echo >> /etc/hosts
echo \# IsPatched >> /etc/hosts
echo 127.0.0.1 somewebsite.com >> /etc/hosts
...私がすでに試したことは
#!/bin/bash
tmpvar=$(whoami)
echo TRYING!
su $tmpvar echo 127.0.0.1 somesite.com >> /etc/hosts
または
su cuskus -c Sudo -s echo 127.0.0.1 somesite.com >> /etc/hosts
パスワードを要求した後に#!/ bin/bashウィンドウを取得したが、特権のためにコードを実行できない。