SSD Nodes Learn 🎉 VPS kutoka $5.50/mwezi
Mwongozo Matt ConnorNa Matt Connor · Imeboreshwa 2026-08-13

Cockpit dhidi ya Webmin: ipi bora kwa seva ya Ubuntu?

Chagua kati ya Cockpit na Webmin kwa ajili ya seva yako ya Ubuntu. Tunachambua tofauti zao katika usimamizi wa faili, usalama wa port, na kwa nini Ansible ni bora zaidi.

Cockpit dhidi ya Webmin: jibu fupi

Cockpit na Webmin zote ni paneli za wavuti kwa ajili ya kusimamia seva ya Linux kupitia kivinjari, na zinajibu mahitaji tofauti. Cockpit inapatikana katika hazina (repository) ya usambazaji wako na inasoma mashine kupitia systemd, journald, polkit na udisks, kwa hivyo inakuonyesha seva unayoendelea kuisimamia kupitia SSH. Webmin ni ya zamani zaidi na pana zaidi: inaandika faili za usanidi kwa ajili ya Apache, BIND, Postfix, MariaDB na huduma nyingine nyingi ambazo Cockpit haizigusi, na inaendesha seva yake ya wavuti kama root ili kufanya hivyo.

Sakinisha Cockpit unapotaka mwonekano wa moja kwa moja wa mashine moja, kisoma logi, na terminal ya dharura. Sakinisha Webmin unapohitaji kihariri cha fomu kwa ajili ya huduma ambayo hutaki kuisanidi kwa mikono. Usiweke yoyote kati ya hizi kwenye port ya umma yenye login ya nenosiri. Ikiwa tayari unaendesha zaidi ya seva mbili au tatu, jibu la kweli mara nyingi ni kutotumia yoyote kati ya hizo, na njia ya SSH pamoja na Ansible inakua vizuri zaidi kuliko paneli yoyote.

Kile kila paneli inaweza kubadilisha kwa hakika

Ufungaji wa msingi wa Cockpit ni mdogo, na maeneo mengi ni vifurushi tofauti unavyoweza kuviacha:

  • huduma za systemd na vipima muda: kuanza, kusimamisha, kuwezesha, na kusoma faili ya unit
  • journal, iliyochujwa kwa unit na kipaumbele, ambayo ni journalctl yenye kiteuzi cha tarehe
  • akaunti za ndani, uanachama wa vikundi, na funguo za SSH zilizoidhinishwa
  • hifadhi kwa kutumia cockpit-storaged: partitions, LVM volume groups, mifumo ya faili na mount points
  • containers kwa kutumia cockpit-podman, ambayo inadhibiti Podman pekee
  • masasisho ya vifurushi kwa kutumia cockpit-packagekit
  • grafu za CPU, kumbukumbu, diski na mtandao kwa kutumia cockpit-pcp
  • terminal ya root kwenye tab ya kivinjari

Maeneo mawili yanaonekana yameharibika kwenye Ubuntu VPS lakini sivyo. Ukurasa wa Networking wa Cockpit ni kiolesura cha NetworkManager, na picha za seva za Ubuntu hutumia netplan pamoja na systemd-networkd, kwa hivyo ukurasa huo haupo au ni tupu. Usisakinishe NetworkManager kwenye seva ya mbali ili kuurejesha, kwa sababu unachukua udhibiti wa interface na kosa lolote hapo litakugharimu pia session ya SSH. Vidhibiti vya firewall vya Cockpit ni kiolesura cha firewalld, na Ubuntu hutumia ufw, kwa hivyo hupati vidhibiti vyovyote vya firewall. Endelea kutumia sudo ufw status kwenye terminal.

Webmin inashughulikia maeneo mengi zaidi, kwa sababu ni mkusanyiko wa moduli za kila huduma badala ya programu moja:

  • usanidi wa Apache, nginx, BIND, Postfix, Dovecot, MariaDB, PostgreSQL na Samba kupitia fomu
  • watumiaji, vikundi na disk quotas
  • cron jobs na saa ya mfumo
  • masasisho ya vifurushi, pamoja na kidhibiti faili chenye uwezo wa kupakia na kupakua
  • violesura vya firewall, ikijumuisha kimoja cha iptables na kingine cha firewalld
  • nakala za faili za usanidi, na moduli za cluster zinazosukuma mabadiliko moja kwenda kwa seva nyingine za Webmin

Webmin huhariri faili halisi chini ya /etc. Hakuna hifadhidata iliyofichwa nyuma ya fomu hizo, kwa hivyo ikiwa /etc iko kwenye version control, sudo git -C /etc diff baada ya kuhifadhi fomu inaonyesha hasa kile moduli ilichoandika. Hiyo ndiyo njia ya haraka zaidi ya kujifunza kile ukurasa wowote wa Webmin hufanya kwa hakika. Mwongozo wa usakinishaji wa Webmin na kuingia kwa mara ya kwanza unapitia mti wa moduli kwa kina. Virtualmin na Usermin ni bidhaa tofauti zilizojengwa kwenye injini hiyo hiyo, kwa ajili ya shared hosting na kwa ajili ya watumiaji wa mwisho, na hurithi kila kitu kilichosemwa hapa kuhusu uwezekano wa kufikiwa.

Jinsi kila moja inavyothibitisha utambulisho

Cockpit haina hifadhidata ya watumiaji. Ukurasa wake wa kuingia huendesha mfumo wa PAM (pluggable authentication modules) katika /etc/pam.d/cockpit, kwa hivyo akaunti ni akaunti zako za Unix na nywila ni nywila zako za Unix. Akaunti ya root hukataliwa kwa chaguomsingi kwa sababu /etc/cockpit/disallowed-users imeiorodhesha. Vitendo vinavyohitaji upendeleo hupitia polkit, na kiolesura huomba nywila yako tena kabla ya kubadilisha chochote, ndiyo maana kichwa cha ukurasa kinaweza kusoma "Limited access" hadi utakapopandisha hadhi ya ufikiaji.

Usanifu huo una matokeo moja ambayo watu hukutana nayo kwenye seva iliyoimarishwa usalama. Ikiwa ulifuata key-only SSH login with password authentication disabled, akaunti inaweza isiwe na nywila inayoweza kutumika kabisa, kwa hivyo kuingia kwa Cockpit hukataliwa wakati ssh bado inafanya kazi. Iangalie kwenye seva:

sudo passwd -S deploy

Pato linaloanza na deploy L linamaanisha nywila imefungwa, kwa hivyo PAM haina cha kukubali na hakuna nywila unayoandika inayoweza kufanya kazi. P inamaanisha nywila inayoweza kutumika imewekwa. Ukurasa wa kuingia wa Cockpit wenyewe haukubali funguo za SSH. Funguo hutumika tu wakati Cockpit inapounganisha kutoka kwenye mashine uliyoiingia kwenda kwenye seva nyingine.

Webmin hutunza watumiaji wake katika /etc/webmin/miniserv.users, tofauti na /etc/passwd, na inaweza pia kuagizwa kuthibitisha utambulisho dhidi ya akaunti za Unix. Mtumiaji wa Webmin aliyeruhusiwa moduli zote ni root kwenye mashine hiyo, bila kujali shell yake ya kuingia inasema nini. Webmin inakuja na usaidizi wake wa TOTP (time-based one-time password) na uzuiaji wake wa seva baada ya majaribio mengi ya kuingia yaliyoshindikana, yote yakiwa yamewashwa ndani ya Webmin Configuration. Cockpit hupata hatua ya pili ya uthibitishaji ikiwa tu utaiongeza kwenye PAM, kwa mfano kwa kutumia libpam-google-authenticator.

Jinsi kila moja inavyosasishwa

Cockpit hupakiwa na mfumo wako wa uendeshaji (distribution). Kwenye Ubuntu 24.04 inatoka kwenye archive, na mradi wa upstream unapendekeza kutumia backports pocket kwa ajili ya toleo jipya zaidi:

. /etc/os-release
sudo apt update
sudo apt install -t ${VERSION_CODENAME}-backports cockpit
sudo systemctl status cockpit.socket
apt policy cockpit

apt policy huchapisha toleo uliloweka na hazina (repository) ilikotoka. Ikiwa backports haina toleo jipya zaidi, apt itatumia toleo la archive, ambalo ni sawa. cockpit.socket inapaswa kusoma active (listening). Marekebisho ya kiusalama kisha hufika kupitia mchakato uleule wa unattended-upgrades kama wa kernel yako, kutoka kwa mchapishaji unayemwamini tayari.

Webmin haipo kwenye archive ya Ubuntu. Usakinishaji rasmi huongeza hazina ya Webmin na ufunguo wa kusaini (signing key) kwanza:

curl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh
sudo sh webmin-setup-repo.sh
sudo apt-get install webmin --install-recommends

Soma hati hiyo kabla ya kuiendesha, kwa sababu inaendeshwa kama root. Kuanzia hapo, kila apt upgrade kwenye seva pia itavuta data kutoka kwa hazina ya Webmin, kwa hivyo umeongeza mchapishaji wa pili mwenye mamlaka ya root kwenye mashine yako. Hiyo ndiyo gharama halisi ya Webmin, na inastahili mfano wa wazi: CVE-2019-15107 ilikuwa mlango wa nyuma (backdoor) katika vifurushi kadhaa vya 1.9x iliyotoa uwezo wa kutekeleza amri bila uthibitisho, na iliwafikia watumiaji kwa sababu seva ya ujenzi (build host) ya mradi huo ilivamiwa, si hazina ya source code. Ufungaji wa distribution haufanyi jambo hili kuwa lisilowezekana. Hata hivyo, unaongeza hatua ya ujenzi na uhakiki ambayo wewe mwenyewe huisimamii.

Kwa nini huduma hizi hazipaswi kuwa kwenye port ya umma

Cockpit husikiliza kwenye TCP 9090 na Webmin kwenye TCP 10000, zote zikiwa na TLS (transport layer security) yenye cheti kilichojitolea (self-signed certificate), kwa hivyo jambo la kwanza unaloliona ni onyo la kivinjari. Kutengeneza na kuamini cheti kilichojitolea inaeleza onyo hilo linakuambia nini na nini halikuambii. Port zote mbili huchunguzwa mara kwa mara, na paneli zote mbili huongoza kwenye root, kwa hivyo nenosiri lililokisiwa au kutumika tena husababisha seva kuvamiwa kikamilifu.

Njia salama ni kufunga paneli kwenye localhost na kuifikia kupitia SSH tunnel. Kwa Cockpit, badilisha socket unit:

sudo systemctl edit cockpit.socket
[Socket]
ListenStream=
ListenStream=127.0.0.1:9090

ListenStream= tupu kwenye mstari wake ni ya lazima. systemd huongeza kwenye mipangilio ya orodha, kwa hivyo bila hiyo unit itabaki na 0.0.0.0:9090 ya awali na kuongeza anwani mpya, na paneli yako bado itakuwa ya umma. Tekeleza mabadiliko na uangalie kinachosikiliza:

sudo systemctl daemon-reload
sudo systemctl restart cockpit.socket
sudo ss -lntp | grep 9090

Matokeo lazima yaonyeshe 127.0.0.1:9090. Anwani ya *:9090 au 0.0.0.0:9090 inamaanisha mabadiliko hayajafanya kazi. Sasa fungua tunnel kutoka kwenye mashine yako na uende kwenye https://localhost:9090:

ssh -N -L 9090:127.0.0.1:9090 deploy@203.0.113.10

Weka port ya ndani iwe sawa na port ya mbali. Cockpit hulinganisha header ya Origin ya kivinjari na anwani inayoamini inahudumia, kwa hivyo tunnel kutoka port ya ndani 9999 hupakia ukurasa wa kuingia kisha hushindwa wakati wa kuingia, na journalctl -u cockpit hurekodi asili iliyokataliwa. Ikiwa unahitaji port tofauti ya ndani, itaje kwenye /etc/cockpit/cockpit.conf:

[WebService]
Origins = https://localhost:9999 https://127.0.0.1:9999

Anzisha upya kwa sudo systemctl restart cockpit.socket ili kutumia mabadiliko hayo. Kwa Webmin, mpangilio unaolingana unapatikana kwenye /etc/webmin/miniserv.conf:

bind=127.0.0.1
sudo systemctl restart webmin
sudo ss -lntp | grep 10000
ssh -N -L 10000:127.0.0.1:10000 deploy@203.0.113.10

Webmin pia hukagua header ya Referer kwenye form posts na kukataa maombi yanayoonekana kutoka kwa host nyingine, jambo ambalo huvunja jaribio la kwanza la reverse proxy. Mstari wa referers= kwenye faili hiyo hiyo ndipo unaporuhusu hostname ya proxy, na webprefix= ndipo unapoambia Webmin kuwa inaishi chini ya path fulani.

Reverse proxy iliyothibitishwa (authenticated) ni chaguo jingine: nginx mbele, ikiwa na safu ya Authentik single sign-on inayoshughulikia kuingia. Inafanya kazi, na ni chaguo la pili bora. Paneli bado inaendeshwa kama root nyuma ya proxy, na sasa unadumisha milango miwili ya mbele badala ya mmoja. Tunnel haiongezi huduma yoyote inayoweza kusikilizwa kwenye Internet, na inatumia tena SSH key ambayo tayari unailinda.

Ni paneli ipi ya kutumia kwenye seva inayohudumia uzalishaji

Cockpit, kwa sababu mbili muhimu wakati watu wengine wanategemea mashine hiyo. Inawashwa kupitia socket, kwa hivyo cockpit-ws hufanya kazi tu wakati kikao kimefunguliwa na hakuna root daemon ya kudumu inayongojea kwenye port. Na haimiliki chochote: ondoa kifurushi hicho na kila huduma itaendelea kufanya kazi kama awali, kwa sababu Cockpit haihifadhi usanidi wowote wake. miniserv.pl ya Webmin hubaki ikifanya kazi iwe kuna mtu ameingia au la. Angalia gharama ya rasilimali ya mfumo wako kwa kutumia systemctl status webmin, ambayo huchapisha kumbukumbu inayotumiwa na mchakato unaoendelea.

Ikiwa unahitaji moduli za DNS au barua pepe za Webmin, zipe seva yake yenyewe. Seva ya Webmin inayofanya kazi moja, iliyofungwa kwenye 127.0.0.1, ni hatari iliyodhibitiwa. Webmin inayoshiriki seva moja na programu yako inayotumiwa na wateja si salama. Fanya kazi ya msingi kabla ya paneli yoyote kuwekwa: dakika kumi za kwanza kwenye VPS mpya inashughulikia mtumiaji asiye root na firewall ambayo paneli zote mbili huchukulia kuwa tayari ipo.

Wakati jibu si hili wala lile

Paneli ni ya kila seva na inahitaji utendaji wa mikono, na haiachi kumbukumbu ya kile kilichobadilika au sababu yake. Hilo linafaa kwa mashine moja. Kwenye mashine tano unajirudia, na kwenye ishirini unakisia ni seva ipi iliyokosa mabadiliko hayo. Cockpit inaweza kuongeza seva nyingine kwenye kikao kimoja kupitia SSH, lakini matoleo ya hivi karibuni huzima hilo kwa chaguo-msingi na kuhitaji AllowMultiHost=yes katika /etc/cockpit/cockpit.conf, na bado inakuacha ukibofya mabadiliko yaleyale mara tano.

Mbadala wake ni SSH ya kawaida ukiwa na usanidi wako kwenye git repository. Kusimamia seva kadhaa za Linux kutoka sehemu moja inaelezea muundo wa usanidi huo, na Ansible playbook ya kwanza inatumia sheria ileile ya firewall kwa kila seva kutoka faili moja unayoweza kuikagua kama diff. Kazi za container hufuata njia hiyo hiyo: docker compose up -d kupitia SSH kutoka faili iliyo kwenye git, kama ilivyo katika mwongozo wa msingi wa Docker Compose, ni bora kuliko kubofya kwenye paneli yoyote, na Cockpit haisimamii Docker hata kidogo.

Tumia paneli kwa mambo ambayo terminal haifanyi vizuri, kama vile kusoma grafu ya metrics au kubaini ni ipi kati ya unit arobaini iliyofeli. Tumia msimbo (code) kwa chochote utakachofanya zaidi ya mara mbili.

Njia za hitilafu na ujumbe utakaouona

Cockpit inakataa nenosiri ambalo SSH inalikubali. Akaunti hiyo inatumia funguo pekee. sudo passwd -S alice huchapisha L katika sehemu ya pili, kwa hivyo PAM haina nenosiri la kukagua. Weka nenosiri kwa kutumia sudo passwd alice, au tumia akaunti hiyo kwa SSH pekee na uingie kwenye Cockpit ukitumia mtumiaji mwingine.

Cockpit inakataa root hata kwa nenosiri sahihi. /etc/cockpit/disallowed-users huorodhesha root. Ingia kama mtumiaji wa kawaida mwenye haki za sudo. Hiyo ndiyo njia iliyokusudiwa, kwa sababu polkit hurekodi ni binadamu yupi aliyepandisha mamlaka.

Cockpit haionyeshi ukurasa wa Networking au Firewall. Kurasa hizo zinahitaji NetworkManager na firewalld. Ubuntu VPS hutumia netplan pamoja na systemd-networkd na ufw, kwa hivyo kurasa hizo hazionekani. Hakuna kilichoharibika, na suluhisho ni kuendelea kutumia ufw kupitia SSH.

Ukurasa wa kuingia wa Cockpit unapakia kupitia tunnel, kisha kuingia kunashindwa. Port yako ya ndani ni tofauti na port ya mbali, kwa hivyo ukaguzi wa Origin unashindwa na journalctl -u cockpit huonyesha hilo. Linganisha port hizo, au weka Origins ndani ya /etc/cockpit/cockpit.conf.

Fomu za Webmin zinashindwa kutuma data baada ya kuiweka nyuma ya proxy. Ukaguzi wa Referer unazikataa. Ongeza hostname ya proxy kwenye referers= ndani ya /etc/webmin/miniserv.conf, na uweke webprefix= wakati paneli inahudumiwa chini ya njia (path) fulani.

Huna uhakika kama paneli imefichuliwa hadharani. sudo ss -lntp | grep -E '9090|10000' hujibu hilo kutoka kwa seva yenyewe, na Webmin huandika kila jaribio la kuingia kwenye /var/webmin/miniserv.log, ambayo inafaa kusomwa mara moja baada ya mabadiliko yoyote ya jinsi inavyosikiliza (listen).

FAQ

Je, Cockpit au Webmin ni bora zaidi kwa Ubuntu VPS moja?

Kwa watu wengi, Cockpit ni bora zaidi kwa sababu inatoka kwenye hazina (repository) ya Ubuntu yenyewe, inasasishwa pamoja na mfumo mzima, na inaendeshwa tu wakati kipindi cha kivinjari (browser session) kikiwa wazi. Chagua Webmin pale unapohitaji kihariri cha fomu kwa ajili ya huduma ambayo Cockpit haigusi, kama vile BIND au Postfix, na ukubali kwa kubadilishana kwamba seva yake ya wavuti inaendeshwa kama root wakati wote na masasisho yake yanatoka kwenye hazina ya Webmin yenyewe.

Je, ninaweza kuendesha Cockpit na Webmin kwenye seva moja?

Ndiyo. Zinatumia port tofauti, 9090 na 10000, na hazigongani, kwa sababu kila moja inahariri mfumo moja kwa moja badala ya kuumiliki. Hata hivyo, huu ni uamuzi mbaya. Kila paneli ni sehemu tofauti ya kuingia yenye uwezo wa root kwenye mashine moja, kwa hivyo unaongeza hatari ya usalama mara mbili ili tu kuokoa mibofyo michache. Ukizisakinisha zote mbili, zifunge zote kwenye 127.0.0.1 na uzifikie kupitia SSH tunnel.

Je, ni salama kufungua port 9090 au 10000 kwenye Internet?

Si kwa kutumia login ya nenosiri. Paneli zote mbili zinaelekea kwenye root, na port zote mbili hugunduliwa na uchunguzi wa kawaida ndani ya saa chache baada ya kufunguliwa. Funga paneli kwenye 127.0.0.1, kisha endesha ssh -N -L 9090:127.0.0.1:9090 user@host na uvinjari kwenda https://localhost:9090. Thibitisha na sudo ss -lntp | grep 9090, ambayo lazima ionyeshe 127.0.0.1:9090 badala ya 0.0.0.0:9090. Reverse proxy iliyo na uthibitishaji (authenticated) ni chaguo la pili linalokubalika.

Kwa nini login yangu ya Cockpit inafeli wakati SSH kwa kutumia key inafanya kazi?

Cockpit inathibitisha kupitia PAM kwa kutumia nenosiri la Unix, na ukurasa wake wa login haukubali SSH keys. Kwenye seva iliyoimarishwa usalama, akaunti mara nyingi haina nenosiri linaloweza kutumika. Endesha sudo passwd -S youruser: L katika sehemu ya pili inamaanisha nenosiri limefungwa, kwa hivyo PAM haina cha kukubali na kila jaribio linakataliwa. Weka nenosiri kwa kutumia sudo passwd youruser, au tumia akaunti tofauti kwa ajili ya paneli hiyo.

Je, Cockpit inasimamia Docker containers?

Hapana. Ukurasa wa container wa Cockpit unatoka kwenye cockpit-podman na inasimamia Podman. Moduli ya zamani ya Docker iliondolewa miaka mingi iliyopita na haitarudi. Ikiwa huduma zako zinaendeshwa chini ya Docker, zisimamie kwa kutumia faili ya compose iliyo kwenye version control kupitia SSH, na uiruhusu Cockpit ishughulikie mfumo unaozizunguka, kama vile journal na diski.

#cockpit#webmin#server-management#admin-panel#ubuntu