Cách chạy chương trình với quyền root từ trình khởi chạy trong Linux

Cập nhật lần cuối: 15 Tháng Mười 2026
  • Quyền root cho phép kiểm soát hoàn toàn, nhưng Ubuntu và các bản phân phối khác thường vô hiệu hóa quyền này theo mặc định để giảm thiểu rủi ro.
  • Sudo cho phép bạn nâng cao quyền hạn theo từng trường hợp cụ thể và ghi lại thông tin về người thực thi mỗi lệnh.
  • Đối với các ứng dụng đồ họa, có các công cụ hỗ trợ như kdesu, gksu, gksudo hoặc pkexec, có thể được sử dụng trong các trình khởi chạy .desktop.
  • Bảo mật phụ thuộc vào việc sử dụng quyền hạn tối thiểu, tránh sử dụng các tập lệnh không đáng tin cậy và kiểm tra nhật ký truy cập có quyền cao.

Kỹ sư hệ thống quản lý máy chủ trong trung tâm dữ liệu hiện đại.

Trong Windows, nhiều người đã quen với việc nhấn Shift+Enter hoặc Shift+nhấp chuột trái để mở chương trình với quyền quản trị từ menu Start. Trong Linux, điều này không phải lúc nào cũng đơn giản, bởi vì bảo mật dựa vào quyền root, sudo và các công cụ hỗ trợ đồ họa , và mỗi môi trường máy tính để bàn lại có các công cụ riêng. Tuy nhiên, vẫn có những cách khá đơn giản để khởi chạy ứng dụng với quyền root từ trình khởi chạy, phím tắt hoặc menu ứng dụng, mặc dù điều quan trọng là phải hiểu rõ những thao tác đó bao gồm những gì.

Điều quan trọng là người dùng root có quyền kiểm soát tuyệt đối hệ thống , và các bản phân phối hiện đại, đặc biệt là Ubuntu và các bản phái sinh của nó, thường vô hiệu hóa đăng nhập trực tiếp. Do đó, việc đăng nhập với tư cách root không phổ biến, mà thay vào đó là việc nâng cao đặc quyền đôi khi bằng cách sử dụng lệnh `sudo` hoặc một chương trình đồ họa yêu cầu nhập mật khẩu. Nếu chúng ta muốn biểu tượng trình khởi chạy ứng dụng khởi động với các đặc quyền đó, chúng ta sẽ phải sửa đổi lệnh mà nó thực thi hoặc tạo một trình khởi chạy cụ thể.

Việc chạy một chương trình với quyền root thực sự có nghĩa là gì?

Trạm làm việc quản trị hệ thống với nhiều màn hình hiển thị các cửa sổ dòng lệnh Linux.

Trong Linux, root là tài khoản có UID 0 và quyền hạn không giới hạn . Nó có thể đọc, sửa đổi hoặc xóa bất kỳ tập tin nào, cài đặt phần mềm, thay đổi cấu hình nhân hệ điều hành và điều khiển các tiến trình thuộc về bất kỳ người dùng nào. Điều này khiến nó trở thành một công cụ vô cùng mạnh mẽ, nhưng cũng là một rủi ro lớn nếu sử dụng bất cẩn. Một lỗi chính tả đơn giản với lệnh `rm` hoặc `mv` có thể khiến hệ thống không thể sử dụng được, và một kịch bản độc hại được thực thi với quyền root có thể cài đặt cửa hậu, sửa đổi các biện pháp bảo mật hoặc đánh cắp dữ liệu mà hầu như không để lại dấu vết.

Trong Ubuntu, tài khoản root không có mật khẩu mặc định và không cho phép đăng nhập trực tiếp. Triết lý là bạn làm việc với tài khoản người dùng thông thường của mình và sử dụng `sudo` cho các tác vụ cụ thể . `sudo` về cơ bản có nghĩa là chạy một lệnh với tư cách người dùng khác, thường là root, sau khi xác thực bằng mật khẩu của chính bạn nếu bạn thuộc nhóm `sudo`. Điều này hạn chế thời gian bạn tiếp xúc với hệ thống và ghi lại ai đã làm gì.

Tuy nhiên, trong những trường hợp rất cụ thể, chẳng hạn như khôi phục hệ thống bị hỏng, làm việc trong môi trường bị hạn chế hoặc cấu hình các dịch vụ yêu cầu quyền truy cập liên tục, bạn có thể cân nhắc bật quyền root tạm thời. Khuyến nghị chung là nên tắt quyền root ngay khi cần thiết. Bạn càng dành ít thời gian với quyền root, thì càng tốt cho sự ổn định và bảo mật của máy.

Rủi ro khi sử dụng rễ cây mà không cẩn thận

Một trong những mối nguy hiểm rõ ràng nhất là việc vô tình xóa các tập tin quan trọng . Với quyền root, không có bất kỳ hạn chế nào về quyền truy cập; một lệnh như `sudo rm -rf /` có thể xóa sạch hệ thống mà không có cảnh báo. Thường cũng không có thùng rác cho những tệp bị xóa này, vì vậy việc khôi phục có thể yêu cầu các công cụ pháp y phức tạp hoặc thậm chí là cài đặt lại hệ thống hoàn toàn.

Một rủi ro khác là chạy các tập lệnh không đáng tin cậy. Nếu bạn chạy mã được tải xuống từ bất kỳ trang web nào với quyền quản trị cao, về cơ bản bạn đang trao quyền kiểm soát hoàn toàn cho nó . Ngay cả khi tập lệnh có vẻ vô hại, nó vẫn có thể chứa các lệnh gây hại hoặc cài đặt phần mềm độc hại với quyền root. Do đó, tốt nhất là nên xem xét kỹ mã nguồn, sử dụng các nguồn chính thức, kiểm tra mã kiểm tra (checksum) và thử nghiệm nó trong máy ảo hoặc container trước khi chạy trong môi trường sản xuất.

  Các bản vá Linux hỗ trợ RAS ​​trên nền tảng Qualcomm

Ngoài ra còn có vấn đề về khả năng truy vết. Khi bạn sử dụng `sudo`, hệ thống sẽ ghi lại lệnh, người dùng đã thực hiện lệnh và thời gian vào `/var/log/auth.log`, `/var/log/secure` hoặc `journalctl` . Nếu bạn đăng nhập trực tiếp với quyền root, mọi thứ sẽ hiển thị dưới dạng root, và bạn sẽ mất khả năng biết cá nhân nào đã thực hiện từng thay đổi. Trong môi trường có nhiều quản trị viên hoặc tuân thủ các tiêu chuẩn kiểm toán ISO 27001, PCI DSS hoặc các tiêu chuẩn khác, việc thiếu khả năng truy vết này là một điểm yếu đáng kể.

Các cách để có được quyền truy cập từ thiết bị đầu cuối

Ảnh chụp màn hình chi tiết các cửa sổ terminal của Ubuntu hiển thị nhật ký hệ thống và giám sát tiến trình.

Cách phổ biến và được khuyến nghị nhất là thêm từ khóa `sudo` trước một lệnh cụ thể. Ví dụ, để cập nhật gói phần mềm, khởi động lại dịch vụ hoặc chỉnh sửa tệp được bảo vệ, `sudo` sẽ yêu cầu mật khẩu người dùng của bạn, chứ không phải mật khẩu root, và sau khi xác thực, nó sẽ thực thi lệnh với quyền quản trị. Nếu bạn cần chạy lệnh với tư cách người dùng khác, bạn có thể sử dụng `sudo -u username command` . Và nếu bạn nhận ra mình quên sử dụng `sudo`, bạn có thể lặp lại lệnh cuối cùng bằng `sudo !! `.

Khi bạn cần thực hiện nhiều tác vụ quản trị liên tiếp, việc mở một shell tạm thời với quyền root có thể rất tiện lợi. Lệnh `sudo -i` mô phỏng việc đăng nhập với quyền root đầy đủ, tải môi trường root và đưa bạn vào thư mục chính. Lệnh `sudo su` hoặc `sudo su -` cũng hoạt động, mặc dù `sudo -i` thường đáng tin cậy hơn. Để thoát khỏi phiên này, chỉ cần gõ `exit`. Không nên để shell root mở mà không có người giám sát.

Ngược lại, lệnh `su` chuyển đổi người dùng. `su - root` hoặc đơn giản là `su -` cũng kế thừa các biến môi trường của người dùng đích, trong khi `su root` hoặc `su` không có dấu gạch ngang giữ lại một phần môi trường trước đó. Sự khác biệt này giải thích các lỗi như `command not found`: các lệnh quản trị thường nằm trong `/usr/local/sbin`, `/usr/sbin` và `/sbin`, các đường dẫn không phải lúc nào cũng xuất hiện trong PATH của người dùng thông thường. Nếu bạn sử dụng `su` không có dấu gạch ngang, bạn sẽ phải gõ toàn bộ đường dẫn hoặc chuyển sang `su -` để kế thừa PATH của người dùng root.

Nếu bạn muốn thiết lập mật khẩu cho người dùng root, bạn có thể sử dụng lệnh `sudo passwd root` . Ubuntu không khuyến khích điều này, nhưng về mặt kỹ thuật, nó cho phép người dùng root có mật khẩu. Để khóa tài khoản, hãy sử dụng `sudo passwd -l root` , và để mở khóa, hãy sử dụng `sudo passwd -u root`. Trong SSH, quyền truy cập trực tiếp vào tài khoản root được kiểm soát bởi `PermitRootLogin` trong `/etc/ssh/sshd_config`. An toàn nhất là giữ nguyên thiết lập này là `no` hoặc tối đa là `prohibit-password` để chỉ cho phép sử dụng mật khẩu SSH. Sau đó, bạn cần khởi động lại dịch vụ SSH.

Cấu hình áo len chính xác

Tệp `/etc/sudoers` định nghĩa ai có thể sử dụng `sudo` và cho mục đích gì. Tốt nhất là không nên chỉnh sửa thủ công; cách đúng là sử dụng `sudo visudo` , lệnh này sẽ khóa tệp và kiểm tra cú pháp trước khi lưu. Quy tắc cơ bản có dạng `host user=(target_user)`. Ví dụ, `bob ALL=(ALL) ALL` cho phép `bob` thực thi bất kỳ lệnh nào với quyền root trên bất kỳ máy nào. Các nhóm cũng có thể được sử dụng, chẳng hạn như `%admin ALL=(ALL) ALL`.

  Nhân Liquorix trong Linux: nhân được tối ưu hóa cho máy tính để bàn và chơi game.

Để cấp quyền chi tiết hơn, người ta sử dụng bí danh. `User_Alias ​​​​ADMINS = alice, bob` nhóm người dùng, và `Cmnd_Alias ​​​​LOCATE = /usr/sbin/updatedb` nhóm các lệnh. Sau đó, `ADMINS ALL = LOCATE` được sử dụng để chỉ những người dùng đó mới có thể thực thi các lệnh đó. Các bí danh như `NETWORKING` có thể được tạo cho các lệnh như `route`, `ifconfig`, `ping`, `iptables`, v.v. Điều này áp dụng nguyên tắc quyền hạn tối thiểu mà không cấp quyền truy cập root hoàn toàn cho bất kỳ ai.

Tùy chọn NOPASSWD cho phép bạn chạy một số lệnh nhất định mà không cần mật khẩu, ví dụ: `pi ALL=(ALL)`. NOPASSWD: ALL. Điều này rất tiện lợi, nhưng lại nguy hiểm nếu bị lạm dụng. Hơn nữa, mọi lần sử dụng `sudo` đều được ghi lại, giúp kiểm tra quyền truy cập và khắc phục sự cố. Nếu có lỗi xảy ra, việc xem lại nhật ký này có thể cho biết thay đổi gần đây nào đã gây ra lỗi.

Khởi chạy các ứng dụng đồ họa với quyền root từ trình khởi chạy.

Hình ảnh cửa sổ dòng lệnh Linux hiển thị danh sách các tệp trong thư mục gốc /.

Đối với các chương trình có giao diện đồ họa, việc chỉ sử dụng `sudo` thường không hiệu quả vì không có cửa sổ dòng lệnh để yêu cầu nhập mật khẩu. Đây là lúc các công cụ hỗ trợ đồ họa phát huy tác dụng . Trong KDE, có `kdesu` : nếu bạn biết lệnh nào khởi chạy ứng dụng, bạn có thể chạy `kdesu that_command`. Tùy chọn `Run Command` trong menu KDE cũng cho phép bạn khởi chạy ứng dụng với tư cách người dùng khác bằng cách nhập thông tin đăng nhập của họ. Trong môi trường GNOME và GTK , `gksu` và `gksudo` được sử dụng rộng rãi ; đây là các giao diện người dùng cho `sudo` hoặc `su`. Ví dụ, `gksu synaptic` hoặc `gksudo gparted` sẽ mở ứng dụng và yêu cầu nhập mật khẩu.

Trong các hệ thống hiện đại, gksu hoặc không được khuyến khích sử dụng hoặc đã bị loại bỏ. Phương án thay thế thường được sử dụng là pkexec , dựa trên PolicyKit, cho phép các chương trình chạy với các quyền hạn theo các chính sách đã định nghĩa. Nhiều trình khởi chạy hiện nay sử dụng pkexec cho các tác vụ quản trị. Ý tưởng là như nhau: người dùng không cần phải mở cửa sổ dòng lệnh, mà hệ thống sẽ xác thực quyền truy cập một cách có kiểm soát.

Để tạo lối tắt trong trình khởi chạy, bạn cần chỉnh sửa tệp .desktop . Dòng `Exec` là chìa khóa. Nếu bạn muốn chạy với quyền root, bạn có thể sử dụng các lệnh như `Exec=gksu /path/to/program`, `Exec=kdesu /path/to/program` hoặc `Exec=pkexec /path/to/program`. Nếu bạn sử dụng `sudo` trực tiếp, bạn cần đảm bảo trình khởi chạy có `Terminal=true` hoặc cấu hình askpass đồ họa. Bạn cũng có thể thử nhấn Alt+F2 và nhập lệnh hỗ trợ cùng tên chương trình, ví dụ: `gksu synaptic`. Trong KDE, `kdesu synaptic` hoặc tùy chọn chạy với tư cách người dùng khác thực hiện chức năng tương tự.

Có một giải pháp thay thế kinh điển gọi là consolehelper , một trình bao bọc cho các ứng dụng GUI. Bạn tạo một liên kết tượng trưng, ​​ví dụ: /usr/bin/xterm-root trỏ đến /usr/sbin/consolehelper. Sau đó, bạn cấu hình PAM bằng cách tạo /etc/pam.d/xterm-root với các thiết lập auth, account và session từ config-util. Tiếp theo, bạn định nghĩa /etc/security/console.apps/xterm-root với USER=root và PROGRAM=/usr/bin/xterm. Khi bạn chạy xterm-root, consolehelper sẽ yêu cầu xác thực PAM và khởi chạy xterm với quyền root. Nếu bạn gặp lỗi "Xlib connection to :0.0 refused by server", việc chạy lệnh xhost local:root có thể hữu ích.

Trong mọi trường hợp, việc mở các ứng dụng đồ họa với quyền root đều có những nhược điểm: nó trộn lẫn các biến môi trường, có thể làm hỏng bus phiên, ảnh hưởng đến Wayland hoặc X11, và tạo ra các tệp thuộc sở hữu của root trong thư mục nhà của bạn. Tốt nhất là chỉ nên sử dụng nó cho các công cụ quản trị cụ thể và đóng chúng ngay sau khi bạn hoàn thành. Không nên duyệt internet hoặc mở các tài liệu đáng ngờ với quyền root , vì bất kỳ lỗ hổng nào cũng sẽ được khai thác để có được toàn bộ đặc quyền.

Một số ví dụ phổ biến về các tác vụ yêu cầu quyền truy cập root.

Nhiều thao tác hàng ngày yêu cầu quyền quản trị cao. Quản lý các gói bằng apt, zypper, dnf hoặc yum thường yêu cầu sudo. Ví dụ: `sudo apt update` , `sudo apt install firefox` hoặc `sudo zypper install docker-ce`. Điều tương tự cũng áp dụng cho các dịch vụ hệ thống: `sudo systemctl restart apache2`, `sudo systemctl restart ssh` hoặc `sudo systemctl restart nginx`. Để sửa đổi tài khoản người dùng, hãy sử dụng `sudo usermod`, và để thay đổi quyền sở hữu tệp, hãy sử dụng `sudo chown`. Chỉnh sửa các cấu hình quan trọng, chẳng hạn như `/etc/ssh/sshd_config`, cũng yêu cầu quyền root nếu được thực hiện bằng nano, vim hoặc gedit.

  Hướng dẫn sửa lỗi GRUB mà không cần LiveCD từng bước một

Bạn không cần dùng `sudo` cho các lệnh chỉ đọc thông tin hoặc không sửa đổi hệ thống, chẳng hạn như `zypper repos` hoặc `systemctl status NetworkManager`. Việc sử dụng `sudo` cho mọi thứ theo thói quen là một thói quen xấu. Điều hợp lý là chỉ nâng cao quyền khi tác vụ yêu cầu và sau đó chuyển về người dùng thông thường càng sớm càng tốt.

Các biện pháp tốt nhất khi làm việc với quyền hạn cao.

Ảnh cận cảnh một giá đỡ máy chủ với ánh sáng xanh lam trong trung tâm dữ liệu.

Nguyên tắc quyền hạn tối thiểu nên chi phối mọi việc. Hãy sử dụng `sudo` cho từng lệnh riêng lẻ bất cứ khi nào có thể, tránh sử dụng shell root liên tục trừ khi thực sự cần thiết, và thoát ngay khi hoàn thành. Không chạy các script từ nguồn không rõ nguồn gốc với quyền root; hãy xem xét mã trước, tải xuống từ các kho lưu trữ chính thức hoặc các dự án uy tín, xác minh mã kiểm tra (checksum), và kiểm tra trong môi trường biệt lập nếu bạn có bất kỳ nghi ngờ nào. Một chút hoài nghi là đức tính cần thiết khi làm việc với mã nguồn của bên thứ ba có đầy đủ quyền hạn.

Cũng nên cấu hình người dùng sudo một cách chi tiết, không chỉ dựa vào nhóm sudo cho mọi việc, và nên kiểm tra nhật ký thường xuyên. Nếu bạn quản trị máy chủ, hãy kiểm tra `/var/log/auth.log`, `/var/log/secure` hoặc `journalctl -xe` để phát hiện hành vi lạm dụng. Trong môi trường đa người dùng, việc biết ai đã thực thi từng lệnh là rất quan trọng để đảm bảo trách nhiệm và tuân thủ các quy định bảo mật.

Bật và tắt quyền root bằng lệnh head.

Nếu bạn quyết định bật quyền truy cập root, hãy đặt mật khẩu bằng lệnh `sudo passwd root`, chỉ sử dụng mật khẩu đó cho các tác vụ thiết yếu, sau đó khóa lại tài khoản. Để vô hiệu hóa đăng nhập SSH trực tiếp, hãy chỉnh sửa tệp `sshd_config` và đặt `PermitRootLogin no` hoặc `prohibit-password`, sau đó khởi động lại SSH. Để khóa tài khoản cục bộ, hãy sử dụng lệnh `sudo passwd -l root`. Để mở khóa, hãy sử dụng lệnh `sudo passwd -u root`. Những biện pháp này giúp giảm thiểu bề mặt tấn công và ngăn chặn các cuộc tấn công vét cạn mật khẩu nhắm vào tài khoản mạnh nhất.

Trong hầu hết các trường hợp, câu trả lời thực tế cho câu hỏi ban đầu là có: bạn có thể khởi chạy một chương trình từ trình khởi chạy với quyền root bằng cách sử dụng trình hỗ trợ đồ họa như kdesu, gksu, gksudo hoặc pkexec, hoặc bằng cách tạo tệp .desktop với lệnh thích hợp. Tuy nhiên, đây không phải là điều bạn nên để mặc định cho mọi ứng dụng. Tốt hơn hết là nên có các trình khởi chạy quản trị cụ thể với tên rõ ràng và chỉ sử dụng chúng khi cần thiết.

Điều quan trọng cần nhớ là quyền root không phải là đồ chơi, và sudo tồn tại chính xác là để trao quyền cho bạn mà không biến mỗi cú nhấp chuột thành rủi ro thường trực. Nếu bạn cần khởi chạy một ứng dụng đồ họa với quyền người dùng cao nhất, hãy ưu tiên các trình hỗ trợ yêu cầu mật khẩu, xác minh xem ứng dụng đó có thực sự cần mật khẩu hay không, và giới hạn việc sử dụng nó cho các tác vụ quản trị. Bằng cách này, bạn tận hưởng sự tiện lợi của trình khởi chạy mà không phải hy sinh tính bảo mật vốn làm nên sức mạnh của Linux.