Quản lý tài khoản dịch vụ theo thông số RPM


16

Tôi đã được cung cấp thông số RPM hoàn chỉnh một phần cho dịch vụ chúng tôi đang viết. Nó có được như tạo các thư mục cần thiết, sao chép tệp, thiết lập quyền, v.v., nhưng nó không tạo tài khoản hệ thống cần thiết mà dịch vụ sẽ chạy theo. Tôi được thông báo rằng tốt nhất là RPM nên quan tâm đến vấn đề này, vì vậy tôi đã thêm

Requires(pre): /usr/sbin/useradd

%pre
useradd -r -d /path/to/program -s /bin/false myservice

Điều này thành công trong việc tạo tài khoản người dùng (và nhóm được liên kết), vì vậy sau này khi nó cố gắng đặt quyền sở hữu / quyền trên các tệp của dịch vụ, điều đó cũng thành công.

Vấn đề hiện tại của tôi là, a) nếu tài khoản người dùng đã tồn tại, cài đặt RPM không thành công vì useraddkhông thành công (vì người dùng đã tồn tại); và b) Tôi không biết làm thế nào để rpm -e myserviceloại bỏ người dùng và nhóm liên quan.


//, Bạn có cân nhắc sử dụng FPM không?
Nathan Basan

Câu trả lời:


18

Tôi thực sự đã giải quyết vấn đề này một cách độc lập, bằng cách xem xét các thông số kỹ thuật RPM khác đã làm những điều tương tự. Nếu bạn chỉ muốn thêm người dùng (có điều kiện), hãy sử dụng liên kết của Ignacio. Tôi đã làm điều này:

Requires(pre): /usr/sbin/useradd, /usr/bin/getent
Requires(postun): /usr/sbin/userdel

%pre
/usr/bin/getent group myservice || /usr/sbin/groupadd -r myservice
/usr/bin/getent passwd myservice || /usr/sbin/useradd -r -d /path/to/program -s /sbin/nologin myservice

%postun
/usr/sbin/userdel myservice

Điều này đảm bảo rằng RPM "tự dọn sạch" nhưng vẫn cung cấp khả năng cài đặt ngay cả khi tài khoản đã tồn tại.


13
Mặc dù đây trả lời câu hỏi, nó rất đáng đọc các lưu ý trong liên kết Fedora liên kết đăng bởi Ignacio về việc tại sao xóa người dùng / nhóm là không mong muốn.
CoverosGene

1
Có một vấn đề tái sử dụng UID và GID (khi người dùng bị xóa có UID / GID cao nhất), điều đó làm cho bất kỳ việc sử dụng tự động nào của người dùng trở thành một ý tưởng tồi.
Bruno9779

1
Trên CentOS 6.7 của tôi, tôi đã xóa lệnh / usr / sbin / groupadd vì lệnh useradd sẽ tự tạo nhóm. Ngoài ra, useradd sẽ thoát với một lỗi khi một nhóm cùng tên đã tồn tại.
Raffael

báo cáo rpmlint "W: nguy hiểm-lệnh-in-% postun userdel" nếu bạn sử dụng nó
Rfraile

5

Một trong hai câu trả lời trước đã sẵn sàng sản xuất vì các phương thức đó sẽ xóa người dùng nếu gói được nâng cấp. Yum cài đặt gói mới sau đó loại bỏ gói cũ. Điều này sẽ khiến bạn không có người dùng. Không mát mẻ!

Sử dụng phương pháp này thay thế:

%postun
case "$1" in
   0) # This is a yum remove.
      /usr/sbin/userdel myservice
   ;;
   1) # This is a yum upgrade.
      # do nothing
   ;;
 esac

4

Phản hồi từ Coderer là tốt nhưng lệnh pre thứ hai cho tôi một lỗi trên Centos 7. Nhóm phải được chỉ định.

Requires(pre): /usr/sbin/useradd, /usr/bin/getent
Requires(postun): /usr/sbin/userdel

%pre
/usr/bin/getent group myservice > /dev/null || /usr/sbin/groupadd -r myservice
/usr/bin/getent passwd myservice > /dev/null || /usr/sbin/useradd -r -d /path/to/program -s /sbin/nologin -g myservice myservice

%postun
/usr/sbin/userdel myservice

Tôi cũng đã thêm chuyển hướng đến / dev / null để bỏ qua tiếng vang không mong muốn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.