Debian

無法在 debian 包中設置 setuid 位和文件所有者

  • April 29, 2020

我有以下結構:

./inst/opt/test/ls: 一個二進制的副本/bin/ls,只是為了簡單起見。

./inst/DEBIAN/changelog:

test (1) unstable; urgency=low

 * test 1

-- test <test@test.com> April 28, 2020

./inst/DEBIAN/control:

Package: test
Version: 1
Architecture: amd64
Section: unknown
Priority: optional
Maintainer: test <test@test.com>
Build-Depends: debhelper (>= 8.0.0)
Standards-Version: 3.9.4
Homepage: https://www.test.com/
Depends: libappindicator1
Description: Test

./inst/DEBIAN/compat:

9

到現在為止還挺好。

我想要實現的是在安裝後ls由 set setuid 位擁有root並使用 set setuid 位。這是我這樣做的眾多嘗試之一:

./inst/DEBIAN/rules:

#!/usr/bin/make -f

%:
       dh $@

override_dh_fixperms:
       dh_fixperms --exclude ls
       find . -name ls -exec chmod +s {} \;

但是有和沒有這個文件的結果根本不會改變。

建構 deb 包

dpkg-deb --build ~/test/inst/ ~/test/

我顯然錯過了一些大事。有人能告訴我什麼嗎?

請注意,postinst在我的情況下,這不是一個選項。

您正在直接建構二進制包;debian/rules僅在從源包建構時處理。

要使用帶有 setuid 位的文件建構二進制包(chmod +s設置 setuid 位,而不是粘性位),請在執行前將其設置在文件系統中dpkg-deb

chmod 4755 inst/opt/test/ls

然後,為確保文件儲存為 root 所擁有,dpkg-deb執行fakeroot

fakeroot dpkg-deb -b ~/test/inst ~/test

檢查生成的包內容dpkg-deb -c應該顯示

-rwsr-xr-x root/root ... ./opt/test/ls

引用自:https://unix.stackexchange.com/questions/583140