web-dev-qa-db-ja.com

管理者権限でコマンドを実行し、ログインしたユーザーのファイルにアクセスするにはどうすればよいですか?

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ユーザーを有効にしました。

7
robertj

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などを考慮しない限り、ほとんど選択肢がありません。

13
Daniel Beck

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になりますパスワード。

5
bmike

標準的なアカウント(通常はセキュリティ上の理由から)を使用していて、管理者のユーザー名とパスワードがわかっている場合は、su -l admin_user。パスワードを入力すると、すべての効果について、その管理者の役割を果たします。そうすれば、思い通りにSudoできます。ここで、logoutを実行して、元のプレーンアカウントに戻ります。

2
Erik Neves

私の端末実行可能ファイルは、それ自体が達成することはできませんが、その厄介な操作を行うことによって:

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ウィンドウを取得したが、特権のためにコードを実行できない。

0
cuskus