trunksd.cc revision 3978ff0bfabc5f04798851e003d3dc372280a989
1c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi// Copyright 2014 The Chromium OS Authors. All rights reserved. 2c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi// Use of this source code is governed by a BSD-style license that can be 3c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi// found in the LICENSE file. 4c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi 5c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi#include <base/at_exit.h> 6c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi#include <base/command_line.h> 7c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi#include <base/message_loop/message_loop.h> 880c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn#include <base/threading/thread.h> 980c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn#include <chromeos/libminijail.h> 1080c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn#include <chromeos/minijail/minijail.h> 11c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi#include <chromeos/syslog_logging.h> 12c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi 1380c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn#include "trunks/background_command_transceiver.h" 1480c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn#include "trunks/tpm_handle.h" 15c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi#include "trunks/trunks_service.h" 16c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi 1780c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahnnamespace { 1880c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn 1980c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahnconst uid_t kTrunksUID = 251; 2080c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahnconst uid_t kRootUID = 0; 2180c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahnconst char kTrunksUser[] = "trunks"; 2280c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahnconst char kTrunksGroup[] = "trunks"; 2380c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahnconst char kTrunksSeccompPath[] = "/usr/share/policy/trunksd-seccomp.policy"; 2480c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahnconst char kBackgroundThreadName[] = "trunksd_background_thread"; 2580c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn 2680c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahnvoid InitMinijailSandbox() { 2780c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn CHECK_EQ(getuid(), kRootUID) << "Trunks Daemon not initialized as root."; 2880c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn chromeos::Minijail* minijail = chromeos::Minijail::GetInstance(); 2980c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn struct minijail* jail = minijail->New(); 3080c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn minijail->DropRoot(jail, kTrunksUser, kTrunksGroup); 3180c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn minijail->UseSeccompFilter(jail, kTrunksSeccompPath); 3280c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn minijail->Enter(jail); 3380c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn minijail->Destroy(jail); 3480c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn CHECK_EQ(getuid(), kTrunksUID) 3580c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn << "Trunks Daemon was not able to drop to trunks user."; 3680c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn} 3780c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn 3880c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn} // namespace 39c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi 40c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghiint main(int argc, char **argv) { 413978ff0bfabc5f04798851e003d3dc372280a989Alex Vakulenko base::CommandLine::Init(argc, argv); 42c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi chromeos::InitLog(chromeos::kLogToSyslog | chromeos::kLogToStderr); 43c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi base::AtExitManager at_exit_manager; 4480c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn // A main message loop. 45c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi base::MessageLoopForIO message_loop; 4680c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn // A thread for executing TPM commands. 4780c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn base::Thread background_thread(kBackgroundThreadName); 4880c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn CHECK(background_thread.Start()); 4980c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn trunks::TpmHandle tpm_handle; 5080c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn CHECK(tpm_handle.Init()); 5180c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn trunks::BackgroundCommandTransceiver background_transceiver( 5280c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn &tpm_handle, 5380c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn background_thread.message_loop_proxy()); 5480c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn InitMinijailSandbox(); 5580c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn trunks::TrunksService service(&background_transceiver); 5680c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn service.Init(); 57c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi LOG(INFO) << "Trunks service started!"; 58c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi message_loop.Run(); 59c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi return -1; 60c2be426142cd74b3136b2670f3feb92fb92923cbUtkarsh Sanghi} 61