Có nhiều cách khác nhau để có được phiên gốc trong thiết bị đầu cuối Linux. Điều này có thể tạo ra nhầm lẫn, vì hầu hết người dùng mới bắt đầu đang tìm cách đạt được đặc quyền root có thể không quen với cách mỗi lệnh có thể có được quyền truy cập root, chúng khác nhau như thế nào và khi những khác biệt này quan trọng. Ở đây chúng tôi tách từng lệnh khác nhau được sử dụng để có được quyền truy cập root trong một thiết bị đầu cuối, giải thích cách chúng giành quyền root, khi nào sử dụng chúng và mọi thứ ở giữa.

Sự khác biệt giữa Su,Sudo Su,Sudo -s và Sudo -i


Su

Lệnh su thay thế người dùng hiện tại cho root trong shell hiện tại.

Sự khác biệt giữa Su,Sudo Su,Sudo -s và Sudo -i

Bạn có thể chuyển sang bất kỳ người dùng nào bằng cách nhập su và thêm tên người dùng sau tên người dùng đó.

Sự khác biệt giữa Su,Sudo Su,Sudo -s và Sudo -i

Điều này sẽ yêu cầu hệ thống chuyển (về cơ bản là đăng xuất) người dùng hiện tại sang người được chỉ định. Ngoài ra, su lệnh có thể đạt được quyền truy cập root bằng cách nhập su mà không cần chỉ định bất kỳ điều gì sau lệnh.

su được sử dụng tốt nhất khi người dùng muốn truy cập trực tiếp vào tài khoản root trên hệ thống. Nó không đi qua sudo hay bất cứ điều gì tương tự. Thay vào đó, bạn được yêu cầu nhập mật khẩu của người dùng root bởi vì bạn đang đăng nhập vào nó theo đúng nghĩa đen. Hơn nữa,các cách khác để đạt được quyền truy cập root không có lợi ích bằng việc truy cập vào thư mục chính gốc và môi trường gốc.

Cảnh báo: Sử dụng su là cách kém an toàn nhất để thực hiện hành động root. Nói chung, nếu bạn có thể tránh nó, không sử dụng cái này.


Su -c

Lệnh này chuyển trực tiếp các lệnh khác tới người dùng root.

Sự khác biệt giữa Su,Sudo Su,Sudo -s và Sudo -i

Tương tự như gõ sudo trước một lệnh, su -c sẽ chạy một lệnh với tư cách là người dùng root. Tuy nhiên, thay vì chỉ cần gõ lệnh, bạn sẽ phải đặt nó trong dấu ngoặc kép.

Đây là một cách nhanh chóng để bắn một lệnh thông qua thiết bị đầu cuối của bạn với các đặc quyền nâng cao. Nó rất hữu ích nếu sudo bằng cách nào đók hông có sẵn (nó không được cài đặt sẵn trong các bản phân phối như Arch Linux) hoặc không hoạt động chính xác vì nó bị hỏng.

Vì bạn đang chuyển một cái gì đó trực tiếp tới root, nếu mật khẩu người dùng và root của bạn khác nhau, bạn sẽ phải nhập mật khẩu root của mình để xác thực.


Sudo su

Lệnh này yêu cầu mật khẩu của người dùng hiện tại thay vì root.

Sự khác biệt giữa Su,Sudo Su,Sudo -s và Sudo -i

Về cơ bản nó giống như chỉ chạy su trong shell, tiết kiệm cho một sự khác biệt quan trọng. Thay vì yêu cầu hệ thống “chuyển đổi người dùng” trực tiếp, bạn đang yêu cầu hệ thống chạy su lệnh với các đặc quyền của người dùng siêu cấp. Khi sudo su chạy, “.profile,” “.bashrc” và “/etc/profile” sẽ được bắt đầu, giống như chạy su. Nếu bất kỳ lệnh nào được chạy sudo trước đó, nó sẽ được cấp quyền root.

Mặc dù không có sự khác biệt lớn giữa sudo susu, lệnh trước vẫn là một lệnh rất hữu ích vì một lý do quan trọng – khi người dùng đang chạy su để giành quyền truy cập root trên hệ thống, họ phải biết mật khẩu root. Roto được cung cấp bằng sudo su cách yêu cầu mật khẩu của người dùng hiện tại. Điều này làm cho nó có thể đạt được root mà không cần mật khẩu root.

Điều này hữu ích trong các tình huống mà bạn có thể đã quên mật khẩu gốc nếu mật khẩu đó khác với  mật khẩu cho tài khoản người dùng của bạn. Mặc dù bạn có thể thực hiện việc này trong thời gian chờ đợi, nhưng chắc chắn bạn vẫn nên đặt lại mật root tại một số thời điểm.


Sudo -i

Việc sử dụng sudo -i hầu như giống với sudo su lệnh với một ngoại lệ: nó không tương tác trực tiếp với người dùng root.

Sự khác biệt giữa Su,Sudo Su,Sudo -s và Sudo -i

Tương tự như vậy sudo su, -i cho phép người dùng có được môi trường root mà không cần phải biết mật khẩu của tài khoản root. sudo -i cũng rất giống với việc sử dụng sudo -su nó sẽ đọc tất cả các tệp môi trường (“.profile”,v.v.) và thiết lập môi trường bên trong shell.

Điểm khác biệt của sudo susudo -i là cách lấy root và môi trường root sạch hơn nhiều mà không cần tương tác trực tiếp với người dùng.

Để làm rõ với việc sudo su bạn đang sử dụng nhiều hơn một setuid lệnh root trong nền. Điều này làm cho việc tìm ra những biến môi trường nào sẽ được giữ lại và những biến số nào sẽ bị thay đổi (khi hoán đổi sang môi trường gốc) trở nên khó khăn hơn nhiều. Điều này không đúng với sudo -i. Bởi vì điều này, hầu hết mọi người xem nó như là phương pháp ưa thích để có được quyền root mà không cần đăng nhập trực tiếp.

Bằng ngôn ngữ đơn giản hơn: sudo -i sẽ cung cấp cho bạn thông tin đăng nhập root “sạch” trong thư mục “/root”, là thư mục “home” cho người dùng root.


Sudo -s

Lệnh này triệu hồi một trình bao với biến $ SHELL của bạn.

Sự khác biệt giữa Su,Sudo Su,Sudo -s và Sudo -i

Switch -s cho sudo lệnh đọc biến $ SHELL của người dùng hiện tại đang thực thi các lệnh. Lệnh này hoạt động như thể người dùng đang chạy sudo /bin/bash, nếu shell mà người dùng đến là bash.

Trong trường hợp của chúng tôi, sudo -s đã cung cấp cho chúng tôi trình bao tương tác cá vì trước đó chúng tôi đã cài đặt cá làm trình bao mặc định của mình, vì vậy nó sẽ giống như thể chúng tôi đã chạy sudo /usr/bin/fish.

Sự khác biệt giữa Su,Sudo Su,Sudo -s và Sudo -i

sudo -s là một trình bao kiểu “không đăng nhập”. Không giống như lệnh sudo -i hoặc sudo su, hệ thống sẽ không đọc bất kỳ tệp môi trường nào. Khi người dùng yêu cầu shell chạy sudo -s, nó sẽ có quyền root nhưng sẽ không thay đổi môi trường người dùng.

Sự khác biệt giữa Su,Sudo Su,Sudo -s và Sudo -i

Lệnh này được sử dụng tốt nhất khi người dùng muốn chuyển sang root nhưng vẫn giữ nguyên môi trường shell. Ví dụ: bạn có thể muốn chạy một script fish và không bị buộc vào bash shell mặc định mà root thường có trong hầu hết các bản phân phối.

Các lệnh khác được đề cập ở trên ó quyền truy cập root, nhưng cũng sẽ cung cấp cho bạn các biến shell và môi trường mà bản phân phối có quyền root. Có thể bạn chỉ muốn chuyển sang người dùng mà không có tất cả hành lý đó.