blob: 9341e94362db77bff131542b9cbd9d1a54282a35 [file] [log] [blame]
Elly Fong-Jonesd9a16cd2012-11-12 16:09:49 -05001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Alex Vakulenko262be3f2014-07-30 15:25:50 -07005#ifndef DEBUGD_SRC_SANDBOXED_PROCESS_H_
6#define DEBUGD_SRC_SANDBOXED_PROCESS_H_
Ben Chana0011d82014-05-13 00:19:29 -07007
8#include <string>
Ricky Liang1ef73e52016-05-24 16:32:34 +08009#include <vector>
Elly Fong-Jonesd9a16cd2012-11-12 16:09:49 -050010
Alex Vakulenkoe7696532015-10-16 16:27:29 -070011#include <brillo/process.h>
Elly Fong-Jonesd9a16cd2012-11-12 16:09:49 -050012
13namespace debugd {
14
Alex Vakulenkoe7696532015-10-16 16:27:29 -070015class SandboxedProcess : public brillo::ProcessImpl {
Elly Fong-Jonesd9a16cd2012-11-12 16:09:49 -050016 public:
17 SandboxedProcess();
Ricky Liang1ef73e52016-05-24 16:32:34 +080018 ~SandboxedProcess() override;
Ben Chan297c3c22013-07-17 17:34:12 -070019
20 // Get the full path of a helper executable located at the |relative_path|
21 // relative to the debugd helpers directory. Return false if the full path
22 // is too long.
23 static bool GetHelperPath(const std::string& relative_path,
24 std::string* full_path);
Elly Fong-Jonesd9a16cd2012-11-12 16:09:49 -050025
26 virtual bool Init();
27
Ricky Liang1ef73e52016-05-24 16:32:34 +080028 void BindFd(int parent_fd, int child_fd) override;
29
Jorge Lucangeli Obesc99a12a2014-09-17 16:43:40 -070030 // Disable the default sandboxing for this process.
Elly Fong-Jonesd9a16cd2012-11-12 16:09:49 -050031 virtual void DisableSandbox();
32
Jorge Lucangeli Obesc99a12a2014-09-17 16:43:40 -070033 // Change the default sandboxing for this process.
Elly Fong-Jonesd9a16cd2012-11-12 16:09:49 -050034 virtual void SandboxAs(const std::string& user, const std::string& group);
35
Jorge Lucangeli Obesc99a12a2014-09-17 16:43:40 -070036 // Allow this process to access the root mount namespace.
37 virtual void AllowAccessRootMountNamespace();
38
Jorge Lucangeli Obes389a9ee2015-05-14 17:37:01 -070039 // Kill the sandboxed process' process group.
40 virtual bool KillProcessGroup();
41
Elly Fong-Jones215b5622013-03-20 14:32:18 -040042 static const char *kDefaultUser;
43 static const char *kDefaultGroup;
44
Elly Fong-Jonesd9a16cd2012-11-12 16:09:49 -050045 private:
46 bool sandboxing_;
Jorge Lucangeli Obesc99a12a2014-09-17 16:43:40 -070047 bool access_root_mount_ns_;
Elly Fong-Jonesd9a16cd2012-11-12 16:09:49 -050048 std::string user_;
49 std::string group_;
Ricky Liang1ef73e52016-05-24 16:32:34 +080050 std::vector<int> bound_fds_;
Elly Fong-Jonesd9a16cd2012-11-12 16:09:49 -050051};
52
Ben Chana0011d82014-05-13 00:19:29 -070053} // namespace debugd
Elly Fong-Jonesd9a16cd2012-11-12 16:09:49 -050054
Alex Vakulenko262be3f2014-07-30 15:25:50 -070055#endif // DEBUGD_SRC_SANDBOXED_PROCESS_H_