root以外のユーザーとしてsudoを実行し、そのユーザーのホームディレクトリに保存します。

root以外のユーザーとしてsudoを実行し、そのユーザーのホームディレクトリに保存します。

新しいグループircuserと新しいユーザーを追加しました。ircuser

私はその中にvisudo次の行を入れました。

myuser localhost=(ircuser) NOPASSWD: /usr/bin/irssi

ircuser設定ファイル、キャッシュなどを保存する必要があるディレクトリは次のとおりです。

drwxrwx--- 2 ircuser ircuser 4096 Mar  2 10:28 ircuser

コマンドを実行するとき:

sudo -Hu ircuser /usr/bin/irssi

または

sudo -u ircuser /usr/bin/irssi

ircuserプログラムはディレクトリに設定ファイルを保存できません。

** ERROR **: Couldn't create /home/myuser/_web/ircuser/.irssi directory
aborting...
Aborted

ただし、動作方法は次のとおりですircuser

ps auxw | grep irssi
ircuser  11962  0.0  0.0  23684  2504 pts/6    S+   11:18   0:00 /usr/bin/irssi

それではirssi実行されますが、ircuser同じユーザーが所有するディレクトリには書き込めませんか?そのままにするには何を変更する必要がありますか?

答え1

問題は、ircuserホームディレクトリに接続されている親ディレクトリの1つにeXecute権限がないことです。すべてのユーザーがトラバース(ディレクトリを表示する必要はありません)できるようにするには、ユーザーにグループまたは他のグループを介した実行権限が必要です。次の権限がある場合:

drwxrwx--- 2 myuser myuser 4096 Mar  2 10:28 /home/myuser

そして、ircuserはmyuserグループに属していないため、そのディレクトリに対する権限がある場合でも、ircuserはその下のすべてのファイルにアクセスできません。これを試してみると:

drwxrwx--x 2 myuser myuser 4096 Mar  2 10:28 /home/myuser

その後、ircuserはmyuserのホームディレクトリを参照できませんが、その下にある一部のファイルにアクセスできます。/home/myuser/_web/ircuser

更新:上記の説明からいくつかの詳細を省略しました。ファイルシステムを参照すると、権限が評価されます。ルートディレクトリからアクセスできないフォルダは、現在のディレクトリからアクセスできます。作業ディレクトリを別の場所に変更すると、現在のディレクトリへのハンドルが失われ、そこにあるファイルへのアクセスが失われます。 sudo su - ircuserなどのコマンドを使用すると、suはroot権限を放棄する前にircuserのホームディレクトリに切り替えます。この時点で、ircuserのホームディレクトリが現在の作業ディレクトリであるため、これに有効なハンドルがあります。 irssi が起動すると、ircuser のホームディレクトリから ircuser として実行されます。現在のディレクトリに対するeXecute権限があるため、.irssiにアクセスしようとすると機能します。 eXecute 権限のないディレクトリを通過しなければ失敗します。たとえば、ファイルを開くには、/home/myuser/_web/ircuser/.irssi現在のディレクトリから始めて相対パスを使用します。これは、eXecute権限のない場所に../../_web/ircuser/.irssi移動する必要があるためです。/home/myuser

答え2

-Hコマンドを実行するときに、sudo「home」がユーザーのホームディレクトリとして処理されるようにするオプションを使用します。 sudo のマニュアルページで詳細な説明を見ることができます。http://linux.die.net/man/8/sudo

答え3

sudo -iu ircuser /usr/bin/irssiを試してみますか?

また、Patkos Csabaがすでに指摘したように、sudoersに設定されているenv_reset、env_keepのデフォルト値を確認してください。

sudoersのマンページから:

As a special case, if sudo's -i option (initial login) is specified,
sudoers will initialize the environment regardless of the value of
env_reset.  The DISPLAY, PATH and TERM variables remain unchanged;
HOME, MAIL, SHELL, USER, and LOGNAME are set based on the target user.
On Linux and AIX systems the contents of /etc/environment are also
included.  All other environment variables are removed.

したがって、sudo -i はこれらの値をバイパスするように環境を初期化します。

編集:Ubuntuボックスで設定を再現し、sudo -u ircuser /usr/bin/irssiも正しく機能します。

私の/etc/sudoersから

<snipped>
Defaults    env_reset, log_output
<snipped>
testing LABUBU01=(ircuser) NOPASSWD: /usr/bin/irssi

バージョン:

testing@LABUBU01:~$ sudo -V
Sudo version 1.8.3p1
pmplugin policy_plugin 5.6.0 (034)
pmplugin io_plugin 5.6.0 (034)
testing@LABUBU01:~$ uname -a
Linux LABUBU01 2.6.35-28-generic #50-Ubuntu SMP Fri Mar 18 19:00:26 UTC 2011 i686 GNU/Linux


testing@LABUBU01:~$ ls -lap /home/
total 64
drwxr-xr-x 16 root     root     4096 2012-03-02 15:57 ./
drwxr-xr-x 22 root     root     4096 2011-12-08 15:48 ../
drwxr-xr-x  3 ircuser  ircuser  4096 2012-03-02 15:57 ircuser/

/編集する

編集2:

あなたのエラー:

**エラー**:/home/myuser/_web/ircuser/.irssiディレクトリを作成できません。中止中...中止

状態では、ircuserのホームディレクトリではなく、ユーザーのホームディレクトリにある/home/myuser/_web/ircuser/.irssiを作成できません。 /編集2

関連情報