Sự khác biệt giữa một hệ thống với consolekit và hệ thống không có nó là gì?


7

Trước hết, tôi đang sử dụng hệ thống thử nghiệm Debian với Openbox độc lập. Tôi không có systemd, chỉ sysvinit và tôi chắc chắn sẽ không sử dụng systemd.

Hôm qua, hộp Debian của tôi đã bắt đầu trả về các tin nhắn như những cái bên dưới:

Jun 14 18:08:10 morfikownia login[4722]: pam_unix(login:session): session opened for user morfik by LOGIN(uid=0)
Jun 14 18:08:10 morfikownia dbus[4391]: [system] Activating service name='org.freedesktop.ConsoleKit' (using servicehelper)
Jun 14 18:08:10 morfikownia dbus[4391]: [system] Activated service 'org.freedesktop.ConsoleKit' failed: Failed to execute program org.freedesktop.ConsoleKit: Success
...
Jun 14 18:08:19 morfikownia pulseaudio[4855]: [pulseaudio] sink.c: Default and alternate sample rates are the same.
Jun 14 18:08:19 morfikownia pulseaudio[4855]: [pulseaudio] source.c: Default and alternate sample rates are the same.
Jun 14 18:08:20 morfikownia dbus[4391]: [system] Activating service name='org.freedesktop.ConsoleKit' (using servicehelper)
Jun 14 18:08:20 morfikownia dbus[4391]: [system] Activated service 'org.freedesktop.ConsoleKit' failed: Failed to execute program org.freedesktop.ConsoleKit: Success
Jun 14 18:08:20 morfikownia pulseaudio[4855]: [pulseaudio] module-console-kit.c: GetSessionsForUnixUser() call failed: org.freedesktop.DBus.Error.Spawn.ExecFailed: Failed to execute program org.freedesktop.ConsoleKit: Success
Jun 14 18:08:20 morfikownia pulseaudio[4855]: [pulseaudio] module.c: Failed to load module "module-console-kit" (argument: ""): initialization failed.
Jun 14 18:08:20 morfikownia pulseaudio[4855]: [pulseaudio] main.c: Module load failed.
Jun 14 18:08:20 morfikownia pulseaudio[4855]: [pulseaudio] main.c: Failed to initialize daemon.

Hơn nữa, mỗi sulệnh tạo ra nhật ký sau:

Jun 14 18:08:50 morfikownia su[6043]: Successful su for root by morfik
Jun 14 18:08:50 morfikownia su[6043]: + /dev/pts/2 morfik:root
Jun 14 18:08:50 morfikownia su[6043]: pam_unix(su:session): session opened for user root by (uid=1000)
Jun 14 18:08:50 morfikownia dbus[4391]: [system] Activating service name='org.freedesktop.ConsoleKit' (using servicehelper)
Jun 14 18:08:50 morfikownia dbus[4391]: [system] Activated service 'org.freedesktop.ConsoleKit' failed: Failed to execute program org.freedesktop.ConsoleKit: Success

Tôi quản lý để khắc phục những vấn đề này.

Trong trường hợp của PulseAudio, tôi chỉ nhận xét những dòng này từ /etc/pulse/default.patệp:

### If autoexit on idle is enabled we want to make sure we only quit
### when no local session needs us anymore.
#.ifexists module-console-kit.so
#load-module module-console-kit
#.endif
#.ifexists module-systemd-login.so
#load-module module-systemd-login
#.endif

Trong trường hợp của mọi thứ khác, tôi phải chạy pam-auth-updatevà bỏ chọn ConsoleKit Session Management:

 PAM profiles to enable
    [ ] encfs encrypted home directories                  
    [*] Unix authentication                               
    [ ] Mount volumes for user                            
    [*] GNOME Keyring Daemon - Login keyring management   
    [ ] ConsoleKit Session Management                     
    [ ] Inheritable Capabilities Management

Và một thay đổi nhỏ là cần thiết cho ~/.xinitrctập tin:

#exec ck-launch-session dbus-launch --sh-syntax --exit-with-session openbox-session
exec openbox-session

bởi vì khi tôi đang cố kiểm tra danh sách phiên, tôi đã gặp lỗi sau:

$ ck-list-sessions

** (ck-list-sessions:15584): WARNING **: Failed to get list of seats: Failed to execute program org.freedesktop.ConsoleKit: Success

Hiện tại không có lỗi, nhưng tôi không biết những thay đổi mà các bước này có thể gây ra. Tôi biết giao diện điều khiển đã chết theo cách này hay cách khác, vì vậy điều này cuối cùng sẽ xảy ra. Trong khi đó, tôi đang đọc câu hỏi này để hiểu điều gì sẽ xảy ra sau thay đổi này, nhưng tôi không nhận được nhiều điều.

Nó cho phép chuyển đổi người dùng mà không cần đăng xuất [nhiều người dùng có thể đăng nhập trên cùng một phần cứng cùng lúc với một người dùng hoạt động].

Tôi có thể làm su user, và nó thay đổi mà không có vấn đề gì:

Jun 15 10:36:57 morfikownia su[103349]: Successful su for morfik2 by morfik
Jun 15 10:36:57 morfikownia su[103349]: + /dev/pts/5 morfik:morfik2
Jun 15 10:36:57 morfikownia su[103349]: pam_unix(su:session): session opened for user morfik2 by (uid=1000)

Tôi cũng có thể đăng nhập nhiều người dùng thông qua ssh. Vậy đâu là lợi thế của việc sử dụng consolekit? Bạn có thể cho tôi biết nếu xóa nó có thể gây ra bất kỳ vấn đề bảo mật nào không, và làm thế nào tôi có thể thấy sự thay đổi? Bởi vì có vẻ như không có gì thay đổi.



Tôi biết điều đó. :)
Mikhail Morfikov

Câu trả lời:


6

Nó cho phép chuyển đổi người dùng mà không cần đăng xuất [nhiều người dùng có thể đăng nhập trên cùng một phần cứng cùng lúc với một người dùng hoạt động].

Tôi tin rằng consolekit đã cung cấp một cơ chế cho các ứng dụng để xác định người dùng nào đang hoạt động , tức là ngồi trước máy tính. Điều này khác với su userchuyển đổi theo cách này:

  • Máy tính của bạn có một chỗ ngồi được gán chuột, bàn phím, màn hình hiển thị, micrô, máy ảnh và âm thanh.
  • Bạn ngồi xuống máy tính của mình và đăng nhập thông qua một bảng điều khiển ảo (VC) / trình quản lý đăng nhập đồ họa (GLM).
  • Bạn khóa phiên của bạn, sau đó bỏ đi.
  • Một người khác ngồi xuống và đăng nhập thông qua một VC / GLM thứ hai.
  • Bây giờ hai người dùng đã đăng nhập (hai phiên), nhưng chỉ có người thứ hai hoạt động .

Bây giờ ai có quyền truy cập vào phần cứng? Bạn chắc chắn không muốn người dùng thứ hai bắt đầu chương trình ghi âm mà vẫn giữ quyền truy cập vào micrô / máy ảnh / bàn phím khi bạn quay lại phiên của mình.

Mặc dù tôi không rõ liệu bộ điều khiển có loại bỏ quyền truy cập phần cứng khỏi các quy trình hay không, ít nhất nó cho phép một quy trình trở thành "công dân tốt" và giải phóng phần cứng khi phiên thay đổi.

Đăng nhập từ xa và su

sshsu - userkhông bị ảnh hưởng bởi consolekit. Consolekit được dự định để quản lý phiên cho ghế. Ghế ngồi là tập hợp các thiết bị vật lý (chuột, bàn phím, màn hình, v.v.) được gán cho ghế đã nói. Một phiên được tạo khi người dùng đăng nhập tại chỗ nói. Một chỗ ngồi có thể có nhiều phiên và bộ điều khiển theo dõi các phiên đó và thông báo cho các quy trình (lắng nghe) thông qua DBUS khi phiên thay đổi.

Hạn chế tắt nhiều người dùng

Consolekit cũng có thể được sử dụng cùng với bộ chính sách để ngăn người dùng tắt hệ thống khi nhiều phiên được mở (nhiều hơn một người dùng đã đăng nhập).

Tại sao nên sử dụng consolit?

Đối với hệ thống một người dùng, consolekit không sử dụng. Nếu bạn có một gia đình chia sẻ một máy tính, thì nó cho phép mọi người đăng nhập và chuyển đổi người dùng mà không cần đăng xuất và không can thiệp vào truy cập phần cứng. IIRC, mỗi người dùng cũng có cá thể xserver của riêng họ.

Lựa chọn thay thế

Tôi biết không có lựa chọn thay thế cho consolekit hoặc systemd. Nếu bạn cần chức năng này, bạn có thể cân nhắc việc sử dụng bộ điều khiển.


Vậy nếu không có giao diện điều khiển nếu tôi có hai người dùng đăng nhập (thông qua startx), cả hai đều có quyền truy cập vào các thiết bị này bây giờ? Với tính năng consolekit, chỉ có một hoạt động sẽ có, phải không? Và điều này chủ yếu được phát minh để giúp quản lý các phiên đồ họa, nó không liên quan gì đến ssh và những thứ khác như thế này? Nếu vậy, có cách nào khác để đạt được điều tương tự như trong trường hợp của consolekit (không có systemd) không?
Mikhail Morfikov

Có, cả hai phiên đăng nhập nên có quyền truy cập vào các thiết bị này, trừ khi bạn dựa vào các nhóm phần cứng để hạn chế quyền truy cập. Chỉ các quá trình của người dùng hoạt động có thể sử dụng phần cứng. Một lần nữa, tôi không biết liệu consolekit có thể thực thi điều này không. Ít nhất, các quy trình có thể lắng nghe các thay đổi phiên và giải phóng phần cứng cho đến khi phiên của chúng trở lại. Tôi tin rằng consolekit có nghĩa là để giúp quản lý các phiên đồ họa. Về cơ bản người dùng Windows chuyển đổi trong Linux. Tôi không có bằng chứng để hỗ trợ này, mặc dù. sshsu - userkhông bị ảnh hưởng. Tôi biết không có sự thay thế cho consolekit.
Justin C

1
trên các hệ thống không có systemdbạn cũng có thể sử dụng elogindthay vì consolekit github.com/elogind/elogind ( systemddự án logindđược trích xuất thành gói độc lập)
Stuart Cardall
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.