Browse Source

add options to drop root privileges and change root directory

master
Miroslav Lichvar 4 years ago
parent
commit
9735b4804a
  1. 1
      Cargo.toml
  2. 12
      src/main.rs

1
Cargo.toml

@ -9,4 +9,5 @@ license = "GPLv2+" @@ -9,4 +9,5 @@ license = "GPLv2+"
byteorder = "1.2.0"
getopts = "0.2.14"
net2 = "0.2.29"
privdrop = "= 0.2.0"
rand = "0.6"

12
src/main.rs

@ -17,6 +17,7 @@ extern crate byteorder; @@ -17,6 +17,7 @@ extern crate byteorder;
extern crate getopts;
extern crate net2;
extern crate rand;
extern crate privdrop;
use std::thread;
use std::env;
@ -444,6 +445,8 @@ fn main() { @@ -444,6 +445,8 @@ fn main() {
opts.optopt("a", "ipv4-address", "set local address of IPv4 server sockets (0.0.0.0:123)", "ADDR:PORT");
opts.optopt("b", "ipv6-address", "set local address of IPv6 server sockets ([::]:123)", "ADDR:PORT");
opts.optopt("s", "server-address", "set server address (127.0.0.1:11123)", "ADDR:PORT");
opts.optopt("u", "user", "run as USER", "USER");
opts.optopt("r", "root", "change root directory", "DIR");
opts.optflag("d", "debug", "Enable debug messages");
opts.optflag("h", "help", "Print this help message");
@ -477,5 +480,14 @@ fn main() { @@ -477,5 +480,14 @@ fn main() {
let server = NtpServer::new(addrs, server_addr, matches.opt_present("d"));
if matches.opts_present(&["r".to_string(), "u".to_string()]) {
privdrop::PrivDrop::default()
.chroot(matches.opt_str("r").unwrap_or("/".to_string()))
.user(&matches.opt_str("u").unwrap_or("root".to_string()))
.unwrap_or_else(|e| { panic!("Couldn't set user: {}", e) })
.apply()
.unwrap_or_else(|e| { panic!("Couldn't drop privileges: {}", e) });
}
server.run();
}

Loading…
Cancel
Save