web-dev-qa-db-ja.com

ユーザーがsudoを介して他のユーザーのホームディレクトリを表示できるようにする

私はシステム管理に不慣れです。サーバーとクライアントマシンがあるラボがセットアップされています。クライアントマシンには、集中サーバー内のすべてのユーザーの作業領域を持つLDAPユーザーがいます。したがって、ユーザーがログインするたびに、ユーザーの作業領域はクライアントマシンのNFSサービスを介してマウントされ、ユーザーがログアウトすると、すべての作業がサーバーに保存されます。

ここで、サーバー内のローカルユーザーに制限付きのrootアクセスを許可したいと思います。このローカルユーザーがすべてのLDAPユーザーのホームディレクトリを表示できるようにしたいのですが、それ以外は何も表示できません。サーバーでホイールユーザーを探していると思います。また、サーバー内のローカルユーザーに制限付きのルートアクセスを許可するために、visudoファイルにいくつかの変更を加える必要があると思います。

user1, %operator ALL= /home/users

ローカルユーザーuser1のvisudoファイルに上記のコマンドを追加してみました。また、以下のようにユーザーをホイールグループに追加しました。

usermod -G 10 user1

ただし、変化は見られません。 Sudoを使用したアプローチが機能しなかったのはなぜですか?

このアプローチは機能していないように思われるので、私は尋ねました: ユーザーに他のユーザーのホームディレクトリの読み取りを許可する

2
Ramesh

いくつかのこと:

  1. コマンドSudoは、コマンドまたはコマンドセットのいずれかについて、より高いレベルの資格情報に昇格するためのものであり、(1)所有者でもないディレクトリへのアクセスを取得するためのものではありません。上記のディレクトリへの読み取り権限を持つグループ内、または(3)ディレクトリに他の権限が公開されていない。

  2. ファイル/etc/sudoersは、特定のシステムのすべてのルールを含み、どのユーザー、ユーザーのグループが、通常はrootとして、または他のユーザーとしてどのコマンドを昇格して実行できるかを規定するファイルです。アカウント。通常、このファイルを直接編集したくない[〜#〜]しない[〜#〜]ことはできますが、編集しないことをお勧めします。

  3. コマンドvisudoは、/etc/sudoersファイルを編集するための所定の方法です。

  4. ユーザーがアクセスできるSudo資格情報を確認する場合、最も簡単な方法は、そのユーザーになり、コマンドSudo -lを実行することです。

    $ Sudo -l
    Matching Defaults entries for saml on this Host:
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL
    LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
    
    User saml may run the following commands on this Host:
    (ALL) ALL
    (root) NOPASSWD: /usr/lib/jupiter/scripts/bluetooth, (root) /usr/lib/jupiter/scripts/cpu-control, (root) /usr/lib/jupiter/scripts/resolutions, (root)
    /usr/lib/jupiter/scripts/rotate, (root) /usr/lib/jupiter/scripts/touchpad, (root) /usr/lib/jupiter/scripts/vga-out, (root) /usr/lib/jupiter/scripts/wifi
    

ホイールアクセス

あなたはユーザーのグループwheelを参照していると思います。これは、(私の知る限り)su -を介してrootになる権限をユーザーに付与する古い方法です。この記事は、このグループの使用法について、次のように説明しています。 Linuxシステムの管理

/home/<user>へのアクセスを許可しますか?

私の知る限り、制限しようとしている他の方法でこのユーザーに昇格された特権を与えずにこれを行う体系的な方法はありません。この特定のユーザーがこの方法でアクセスする責任を信頼していない場合、彼らはおそらくこの作業を行うのに適切な人物ではないと思います。

グループ

例えば。 2人の学生と1人のTAがいるとします。学生(user1&user2)TA(user3)。

したがって、グループは次のようになります。

  • class1
  • vboxuser1

したがって、上記のユーザー(1〜3)のいずれかとしてシステムにログインすると、グループは次のようになります。

$ groups
users vboxusers class1

このグループは、学生の自宅のディレクトリにも設定する必要があります。

$ ls -l /home/user1 | head -3
total 37784
drwxrwxr-x   2 saml class1     4096 May 16 22:02 alsa
drwxrwxr-x  31 saml class1     4096 Mar 26 12:09 apps

これは1つのアイデアにすぎず、このアプローチには問題がありますが、提供した情報を考えると、「それを行う1つの方法」です。

1
slm

ここで、サーバーのローカルユーザーに制限付きのルートアクセスを許可したいと思います。

これは悪い考えのように聞こえます。

まず、データプライバシーの問題があります。このユーザーが完全なルート権限を持っていると信頼していない場合、なぜユーザーのデータで彼を信頼するのでしょうか。

第二に、どういうわけかこのユーザーに/homeへの制限付きルートアクセスを許可することに成功したとしても(これは不可能だと思います)、おそらく予期しない完全なルートアクセスを取得する方法がいくつかあります。 :

  • 彼は/へのシンボリックリンクを作成できます。

    cd /home
    ln -s / evil-symlink
    

    これで、ルートファイルシステムは/home/evil-symlink/内にあるため、ルートとして/homeとしてルートファイルシステムのコンテンツにアクセスできます。

  • 彼は/home内にsetuid実行可能ファイルを作成できます。 /bin/bash/home/bashにコピーし、chmod u+s /home/bashを実行すると、独自のrootシェルが作成されます。

私が思いつくことができる権限に関係なく、ユーザーを特定のディレクトリに制限する唯一の方法はchrootであり、rootがchrootから抜け出すことができることは一般的な知識です。

0

まず、あなたが間違ったこと:

user1, %operator ALL= /home/users

これにより、user1はディレクトリ/home/users内の任意のコマンドを任意のユーザーとして実行できます。そのディレクトリに実行可能プログラムがない場合、ルールは事実上何もしません。そこに実行可能プログラムがある場合、ルールはuser1がそれらを実行することを許可します。

Sudoを使用して、ユーザーにファイルへのアクセス許可を与えることはできません。別のユーザーとしてコマンドを実行する許可のみを与えることができます。

実行しようとしていることを実行する方法については、 ユーザーが他のユーザーのホームディレクトリを読み取れるようにする を参照してください。