パスワードを忘れた? アカウント作成
12532520 story
MacOSX

OS X 10.11ではrootでも/usrや/bin以下に書き込みできない 62

ストーリー by hylom
これでrootが奪取されても大丈夫ですね 部門より
あるAnonymous Coward 曰く、

10月1日にリリースされるOS Xの最新版「OS X 10.11 El Capitan」では、root権限でも/usrや/binなどのディレクトリにアクセスできないようになっており、これらのディレクトリにシステム関連以外のファイルがインストールされていた場合、アップデート時に別のディレクトリにそれらが移動されるようになっているとのこと(Appleちゃんねる)。

この仕組みは「rootless」と呼ばれているとのこと。Appleの「System Integrity Protection Guide」によると、保護対象となるのは/usrおよび/bin、/sbin、/System、/Applications/Utilities以下のディレクトリで、これらのディレクトリにはAppleのコード署名がされたシステムプロセスからしか書き込みが行えないという。ただし、/usr/local以下については対象外になっているとのこと。また、/Applicationsや/Libraryディレクトリ以下についても対象外。

つまり、今後は独自にビルドしたアプリケーションやライブラリなどは、/Applicationsおよび/Library、/usr/local以下にインストールするよう設定する必要があるということになり、多くのソフトウェアやデバイスドライバで影響が出そうである。

なお、rootlessを無効にするにはリカバリーモードでOSを起動してcsrutilコマンドでの設定を行う必要があるとのこと。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2015年10月01日 12時03分 (#2892205)

    OSのパッケージング管理下に無いものが/usr/binとかに入っていると誤動作の元。

    • by annoymouse coward (11178) on 2015年10月01日 12時45分 (#2892253) 日記

      純正バイナリは/usr以下,サードパーティは/usr/local以下に入れるというのは,
      UNIX(?)における原始的で古典的なパッケージ管理法だと思います

      今時のUNIX(?)ならパッケージ管理システムが必ず用意されていて
      例えば debian 系だったら
      find /usr/bin -type f | xargs dpkg -S > /dev/null
      redhat系だったら
      find /usr/bin -type f | xargs rpm -qf > /dev/null
      BSD系だったら
      portでごにょごにょ
      を実行するだけで,簡単にパッケージング管理下にないファイルの一覧が見れます
      そして一覧をチェックして,不要なファイルが見つかった場合は, xargs sudo rm で消すだけです

      一方,WindowsやOS Xではこのような機能が十分には整備されていません.
      だからこそ,/usr以下を書き込み禁止にする,という古典的な方法をとるしか術が無いのかも知れません

      親コメント
      • by Anonymous Coward on 2015年10月01日 13時04分 (#2892280)

        > 今時のUNIX(?)ならパッケージ管理システムが必ず用意されていて

        「?」をつけてるのである程度意識されてるようですが、
        パッケージシステムで管理されていても、ディレクトリ分けはそれなりに有用ですし、行われてますよ。

        Solaris 含む SVR4 系の追加パッケージ: /opt
        FreeBSD で ports で追加したパッケージ: /usr/local
        NetBSD で pkgsrc で追加したパッケージ: /usr/pkg

        といった感じであり、基本システムが使う / や /usr とは別ディレクトリにしてあります。

        親コメント
      • by Anonymous Coward

        BSD系だったら
        portでごにょごにょ

        これかな?
        https://www.freebsd.org/doc/ja/books/handbook/updating-upgrading-freeb... [freebsd.org]
        でもpackagesの話なら
        https://www.freebsd.org/cgi/man.cgi?query=pkg-check&sektion=8&... [freebsd.org]
        でも上のからの話なら
        https://www.freebsd.org/cgi/man.cgi?query=pkg-wh [freebsd.org]

      • by Anonymous Coward

        古典的だけど、決定的でもあるかな
        書き込み禁止すりゃチェックする必要も無いし

      • by Anonymous Coward

        一方,WindowsやOS Xではこのような機能が十分には整備されていません.
        だからこそ,/usr以下を書き込み禁止にする,という古典的な方法をとるしか術が無いのかも知れません

        へー、UNIXってすすんでるねー。

        で、"find /usr/bin -type f | xargs dpkg -S > /dev/null"なる先進的な呪文は、既存のファイルと同じ名前のバイナリにマルウェアを仕込むという古典的な攻撃をどうやって回避または探知してくれるのでしょうか?

        1) あなたの書いたこの先進的なコマンドは新しいバイナリの出現しか探知出来ず、既存のバイナリを改竄する攻撃には無力。よってほぼ無意味。せめてdebsums(1)くらい使いましょう。
        2) そうやって改善しても、このコマンドはどうや

    • by Anonymous Coward

      WindowsのVirtualStoreのパクリやで。

      • by Anonymous Coward

        言われりゃそうだな

      • by Anonymous Coward

        Virtualstoreは簡単にオフれちゃうからなぁ。。
        まあ、下手にそういった仕組み作ると居座り続けるのがいるから、
        アップルはバサッときりすてたと。
        まあ、/sbinに謎ファイルあったら困るからいいかな?

        • by Anonymous Coward on 2015年10月01日 15時38分 (#2892413)

          Unixの/binとか/sbinは、WindowsだとProgramFilesじゃなくてSystemの方に相当する。
          でも、Windowsの方はいまさらSystemの書き込みを禁止できないもんだから、ドライバやアプリなんかが平気で汚すようになってしまっている。

          親コメント
          • by Anonymous Coward
            VirtualStoreはアプリケーションがSystem32やProgram Filesに書いているように見えて実際は他のところに保存されていて実際は汚れない。さらにアプリからは保存されたデータが意識せずにその別の場所からロードされて続行可能というもの。下位互換性が主な目的のやつだよね。
            (%LOCALAPPDATA%\VirtualStore以下に保存される)

            つか今時はユーザーもProgram FilesもSystemも昇格が必要なので普通には書けないよ。
            hostsも管理者コマンドプロンプトとかからエディタ起動するとか別箇所で編集してコピーする(その時ダイアログでコピー行為を昇格して行う)と
      • by Anonymous Coward
        元々どこに入れてもアプリは動きましたし。
        Libraryも「/System/Library」「/Library」「$HOME/Library」と用途別に用意されてましたし。

        *.appで必要なファイルをひとまとめにできて、せいぜい$HOME/Library/Preferences/に
        設定ファイルができる程度でしたから。

        自分なんかは、インストーラーが勝手に入れるやつ以外は、$HOME/Applicationsに
        入れるようにしてましたし。

        今はWindows10使ってますけど、フォントとか、最初から入ってるやつと後から入れたやつの
        区別がつかなくて困ってます。実際のフォントファイルがどこに入ってるのかは知りませんけど。
    • by Anonymous Coward

      /binと/sbinと/usr/binと/usr/sbinと/usr/local/binと/usr/local/sbinの使い分けってどのように考えてますか?

      • by Anonymous Coward on 2015年10月01日 12時31分 (#2892237)
        親コメント
        • by Anonymous Coward on 2015年10月01日 16時12分 (#2892434)

          > https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard [wikipedia.org]

          これって、事実上 Linux distro 間で決めた標準であって、
          Linux 以外で使ってるところはないから、注意は必要だけどね。

          たとえば NetBSD は
          https://www.freebsd.org/cgi/man.cgi?query=hier&apropos=0&sekti... [freebsd.org]
          みたいな感じ。
          BSD系は全部 hier(7) なので、このページのメニューで OS 変更すれば、参照できる。

          Linuxと比べた大きな違いとして、
          ・/usr/lib/アプリ/ みたいなデータファイルはない。/usr/lib/ に置くのはライブラリだけ。
          ・/var/lib/ はそもそも存在しない。
          ・データは /usr/share か /usr/libdata か /var/ の下の適切な場所に置く。
          ・Linuxで/usr/lib/にあるような実行ファイルは、/usr/libexec/ に置く。
          みたいな点がある。(この辺は *BSD 共通)

          元々、/var その他は、ディスクレス構成とかをサポートするために、
          1980年代の BSD BOF で、商業ベンダーとかも含めて決めたもので、
          経緯的に BSD が一番きれいな構成になってるんだよね。

          Linux が生まれたのはそれより後なんだけど、歴史的経緯を引きずった
          商業ベンダーの使ってる構成を真似たから、/usr/lib の下とかだいぶ汚いし、
          /var/lib みたいに変なディレクトリもあったりする。

          まあ *BSD でも、Linux で生まれたアプリケーションを動かすために、
          結局 /var/lib を掘ったりして、ディレクトリ構造が汚くなってガックリとか
          するわけだけど。

          親コメント
      • by Anonymous Coward

        /bin, /sbin, /usr/bin, /usr/sbinは、yumに任せる。自分では触らない。
        /usr/localは使わない。
        自分でインストールするものは、/homeか/opt。

    • by Anonymous Coward

      OSX でもやろうと思えば昔から同じようなことはできたはず。
      なんで新しい仕組みを作ったんだろう?

      # chflags schg filename

      とすれば、そのファイルは root でも変更できなくなる。
      さらに、

      # sysctl kern.securelevel=1

      とすれば、schg フラグをはずすこともできなくなる。

      このあたりの機能はかなり古い BSD に由来するので、
      初期の OSX からずっと使えてたはず。使ったことないけど。

      • それやっちゃうとOSの更新とかまで出来なくなったりしません?

        親コメント
        • by Anonymous Coward

          rebootしてnoschgして更新、再度schgしてsecurelevel=1
          ってのを手でやると間違えがちなのでスクリプト化、
          ってrebootとか面倒臭いというならそこまでしないし、
          それで安心なの?ってのもごもっともなのでsnort入れるとか。
          そこらへんがセキュリティポリシーというやつ。

      • by Anonymous Coward

        ディレクトリに対して使えたっけ?

        • by Anonymous Coward

          つかえるよー

          # mkdir hoge
          # chflags schg hoge
          # echo fuga > hoge/hoge
          hoge/hoge: Operation not permitted.

  • by Anonymous Coward on 2015年10月01日 13時08分 (#2892286)

    Windowsしか知らない無知どもがピンぼけなこと言い出す前に書いておくと、
    ほぼすべてのLinuxディストリビューションでは、すべてのパッケージはパッケージ管理システムの管理下に置くのが前提なので、
    こういうしちめんどくさいことする必要もない。

    自分で造ったシステムワイドなアプリケーションもパッケージ管理に合わせてパッケージ化して使用する。
    OSXもそういうシステム用意しようと思えばできたはずなんだが。

    何かのアプリケーションの参考書に sudo make install などと書いてあってもまともなユーザーならそんなことしない。

    • by nim (10479) on 2015年10月01日 13時17分 (#2892298)

      え? ./configure --prefix=/opt/hoge ; make all; sudo make install じゃないの?

      親コメント
      • by Anonymous Coward on 2015年10月01日 13時37分 (#2892328)

        未だにソースから自分でコンパイルして入れるのが常識って人もいるよね。

        自分は、どっちもありかと思っているけど
        ソースからコンパイルするのが増えると、あとあと面倒が増えそうでw

        親コメント
        • by Anonymous Coward

          最近はdistributionがいろいろ用意してくれてるから
          自分でコンパイルしたものを/optに入れるとかないな。

          $HOME/opt/には細かいものがいろいろ入ってるが。

        • by Anonymous Coward

          自前のパッチがあって上流に取り込んでもらうにはあまりにも私的なものであればソースからコンパイル必須。
          つっても一般化して他人にも有用っぽいパッチができたりして上流に取り込んでもらったことは何度かある。

          • by Anonymous Coward

            それでもバージョンアップ時、自前パッチ当てる手間を少しでも減らすために、パッケージ管理システム使ってローカルなパッケージとして維持してたり。

        • by Anonymous Coward

          Mac には MacPorts というものがあってのう。
          未だにソースからコインパイルというものも少なくないんじゃよ。
          え?それは自分でコンパイルとは言わないって?
          しかし、./configure とかやってる時点で大して変わらんと思うがのう。

      • by Anonymous Coward

        普通 make buildworld

    • by Anonymous Coward on 2015年10月01日 20時56分 (#2892625)

      その前提は崩壊しつつあるように思うけど。
      各処理系(php, ruby, node.js, phtyhon etc)が勝手にパッケージ管理システム作っていて、結局好き勝手にファイルを置いている。
      もう、makeなんて使わなくてもネットワークからパッケージ自動導入が当たり前。

      それと、コード署名が検査されるのはそれなりにいいのでは。まあAppleだからできるというのはあるのかもしれないが。
      新しいなり、Appleなりにかんがえられていて、しちめんどくさいだけではないと思うが。

      # Linuxだって変なリポジトリからパッケージ持って来ればxcode騒ぎと変わらない事件が起きないとも限らない。

      親コメント
      • by Anonymous Coward

        訓練されたパッケージ管理システムは各処理系のパッケージ管理システムにパッチを当て、同期を図る。
        よく訓練された各処理系のパッケージ管理システムはシステムのパッケージ管理システムに同化出来る。

    • by Anonymous Coward

      マジで言ってるのか、ボケてるのか。

    • by Anonymous Coward
      依存関係とか気にしなきゃいけないと大変だね、としか。
      • by Anonymous Coward

        最近はside by sideでDLL地獄回避とかいうらしいよ。
        ホントかしらんけど。

    • by Anonymous Coward

      >こういうしちめんどくさいことする必要もない。

      selinux とか、そういうしちめんどうくさいことのような気もするんだけど。

    • オプティマイズレベルは自分で書き換えないか?

      >sudo make install などと書いてあってもまともなユーザーならそんなことしない。
      オレまともじゃなかったんだwそういう人をバカにするような言われ方、初めてだぞ。
      おまえがまともじゃないだけじゃないのか?

      何をインストールするのか自分でチェックできる方法を無視して、お客に納品する人なんだ。すごいな。
      それとも、バックアップを取っておいて、失敗したら戻すタイプ?

      • by Anonymous Coward
        ソースで拾ってきてもローカルパッケージ作って、それをインストールするだろっていう当たり前な話。
        10年前には、まだ見掛けたけど文字通り make install なんて今の時代にはありえないでしょ?
        • by Anonymous Coward

          いや、やりませんが。>ローカルパッケージ作って。

          • by Anonymous Coward

            いや、やりましょうよ。
            それともスクリプトで自動化すると手抜きするなって怒るタイプ?

          • by Anonymous Coward
            うわぁ、、、
            いまだに、こんなのいるんだ。

            無駄な仕事をして、仕事した気になってるタイプだ。
            知識も10年は世間から遅れてるうえに、ルールを守る気もないやつ。
            外注で、こんなの来たら即日で切るな。
            • by Anonymous Coward

              あぁ、ローカルパッケージ作ったくらいで仕事した気になっているヤツいるよな。

    • by Anonymous Coward

      >ほぼすべてのLinuxディストリビューションでは、すべてのパッケージはパッケージ管理システムの管理下に置くのが前提なので、
      こういうしちめんどくさいことする必要もない。

      ユーザの良識を信じてるってだけで、他の選択肢を使えないよう強制するってことじゃないので、
      rootlessが対応する問題とはまた別だと思います。

      RedHat系だって、「RPMがないソフトウェア」をインストールする場合、
      RPMをbuildせず、直接make; make installして使ってる人もいるし。

  • by Anonymous Coward on 2015年10月01日 19時57分 (#2892586)

    よく分からないが、root で rm -rf /usr とかやっても大丈夫ってことかな?

    • by Anonymous Coward

      システムは大丈夫でも/usr/local以下は保護されてないから無条件に大丈夫とも言えない気がする。

typodupeerror

私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson

読み込み中...