libpcap函数的root权限要求

时间:2011-02-03 11:58:32

标签: c libpcap

以非root用户身份运行时pcap_lookupdev()填充errbuf变量,而以root身份运行时,相同的函数返回第一个可用网络接口的值。

操作系统或库是否禁用此访问权限。我认为这是操作系统。什么是正确的答案?

这不是一个家庭作业问题

3 个答案:

答案 0 :(得分:6)

通常,在访问操作系统提供的文件,设备和其他服务时,Unix(以及Linux)中的访问模型都是在操作系统 中实现的。

用户空间程序只需尝试他们想做的任何事情,并通过例如优雅的方式处理任何错误情况。告知用户一条消息。

这有几个好处:

  • 可维护性:操作系统仍然存在访问策略实施,可以统一配置。想要限制对资源的访问权限的管理员一次,而不是必须在此配置此库,而不是那个库,然后......

  • 可配置性:管理员可以将所需的访问策略配置为简单或复杂,而不受每个用户空间实施的限制。

  • 安全性:通常不应通过强制执行访问策略来信任用户空间程序。这就像是有一只狼守护着绵羊。

编辑:

在您的情况下,pcap需要对网络接口进行低级访问。由于安全隐患(捕获网络流量,生成任意网络数据包等),此类访问仅限于特权用户。例如,在Linux上,pcap需要CAP_NET_RAW capability可供用户使用。

答案 1 :(得分:0)

许多pcap函数需要root权限才能正常工作。这可能是问题吗?

答案 2 :(得分:0)

主要取决于操作系统。并非所有 --- title: "MRE" output: flexdashboard::flex_dashboard: orientation: columns vertical_layout: fill runtime: shiny --- ```{r setup, include=FALSE} library(flexdashboard) library(mapview) library(shiny) library(leaflet) #library(RSQLite) #library(sf) ``` Sidebar {.sidebar} ----------------------------------------------------------------------- ```{r} # This is shiny input that will trigger entire map redraw sliderInput("gridlines", "Grid Line Opacity", 0, 1, 0, step = 0.1, ticks = FALSE) ``` ```{r} ### THIS IS MY ACTUAL CODE...For reference # sp_grid <- reactive({ # db <- "../data/modeldata.db" # con <- dbConnect(SQLite(), db ) # # # set the sql based on user input # sql <- 'SELECT id, Time,Cell_I, Cell_J, Cell_K, Cell_Botdepth_M, Zmax, Salinity, WKT_GEOMETRY # FROM vwGridTK # WHERE Time = :time # AND Cell_K = :layer' # # df.grid <- dbGetQuery(con, sql, params = list(time = 0, # layer = 1)) # dbDisconnect(con) # # st_as_sf(df.grid, wkt = "WKT_GEOMETRY") %>% st_set_crs(4326) # # }) ``` Column {data-width=500} ----------------------------------------------------------------------- ### Reproducible Example NOTE the shiny input to control opacity ```{r} renderLeaflet({ m <- mapview(franconia, zcol = "district", alpha = input$gridlines) m@map }) ``` Column {data-width=500} ----------------------------------------------------------------------- ### My Example ```{r} # renderLeaflet({ # m <- mapview(sp_grid(), zcol = "Salinity", # legend = TRUE, alpha = input$gridlines) # # m@map # # }) ``` 函数都需要在所有操作系统上具有root特权。

参考Reference Manual Pages,分别列出所有特殊特权要求。