Một vài điều về sudo command
Chắc hẳn khi dùng Ubuntu, chúng ta ai cũng đã từng gặp phải lỗi kinh điển “Permission denied”. Lúc đó, mặc định với 99% người đang sử dụng Ubuntu là sử dụng lệnh sudo để giải quyết vấn đề, mọi vấn đề được giải quyết 1 cách đơn giản. Trong bài viết tới mình giới thiệu về lệnh sudo này mà chúng ta vẫn sử dụng hằng ngày nhé :D.
0. Tổng quan
Lệnh sudo
, theo hướng dẫn từ trang man page, nó được sử dụng để thực thi một lệnh như một người dùng khác.
Detail: http://manpages.ubuntu.com/manpages/xenial/man8/sudo.8.html
2. sudo visudo
?
Đây là cách để chúng ta thực hiện các cấu hình với lệnh sudo
. Trong file này sẽ cấu hình được các lệnh sử dụng sudo, NOPASSWD hoặc có thể cấu hình thời gian phiên làm việc với lệnh sudo. Chi tiết như thế nào thì mình trình bày chi tiết trong từng phần nhé.
3. What is a sudo session?
Một phiên làm việc với lệnh sudo
sẽ có thời gian là 15 phút theo mặc định. Bạn có thể tùy chỉnh nó lên bao nhiêu phút là tùy bạn :D1
sudo visudo
Sau đó tìm tới dòng:1
Defaults env_reset
Và tùy chỉnh thời gian mà bạn muốn:1
Defaults env_reset,timestamp_timeout=[new-value]
[new-value]
ở đây là số phút mà bạn muốn cài đặt cho mỗi phiên sử dụng lệnh sudo. Ví dụ nếu bạn muốn cài đặt mỗi phiên sudo là 40 phút.1
Defaults env_reset,timestamp_timeout=40
Easy nhỉ :D. Nếu bạn muốn mỗi lần sử dụng sudo đều phải nhập mật khẩu, hãy set giá trị này về 0. Trong trường hợp bạn muốn mỗi phiên thời gian sử dụng sudo là vô tận, set giá trị này về -1. Tuy nhiên hãy chú ý khi set về -1 vì nó gây điểm yếu cho hệ thống của bạn.
4. The sudo password
Mỗi khi sử dụng lệnh sudo, bạn phải nhập mật khẩu. Tuy nhiên không có bất cứ gì show mật khẩu cho bạn, nếu bạn thấy điều đó là khó chịu, bạn có thể setup để mỗi lần nhập mật khẩu sẽ show lên.
Bạn hãy tìm tới dòng:1
Defaults env_reset
Và thay thế nó là:1
Defaults env_reset,pwfeedback
Và kết quả là:
5. No Password
Đôi khi việc gõ mật khẩu khi sử dụng sudo gây bất tiện cho bạn (nhưng hãy lưu ý, nó là bảo mật nhé, việc sử dụng No Password này không khuyến khích, chỉ nên sử dụng cho lệnh không quan trọng hoặc trong shell script), một số cách sau sẽ giúp bạn sử dụng sudo mà không cần mật khẩu.
Cách 1: Set thời gian session trong file cấu hình.
Cách này đã được đề cập ở trên, set thời gian session sử dụng sudo
command về -1. Cách này cực kì nguy hiểm vì nó sẽ áp dụng cho mọi scripts sử dụng sudo
Một cách khác mà bạn có thể sử dụng là Cách 2
Cách 2: Sử dụng ngoại lệ.
Ban có thể tạo một vài ngoại lệ trong file cấu hình sudo
command không sử dụng mật khẩu với nội dung như sau1
YOUR_USER_NAME ALL=(ALL:ALL) NOPASSWD:/abs/path/to/your/script
Với
YOUR_USER_NAME
là username của bạn, có thể xem bằng cách sử dụng lệnhwhoami
hoặcwho
/abs/path/to/your/script
: đường dẫn sử dụng command của bạn
Xem xét ví dụ sau mỗi khi bạn muốn sử dụng1
sudo apt-get update
mà không cần nhập mật khẩu. Đầu tiên hãy mở file cấu hình của lệnh sudo
lên:1
sudo visudo
Và thêm dòng1
minhnv ALL=(ALL:ALL) NOPASSWD:/usr/bin/apt-get update
OK rồi đó, đơn giản nhể :D. Việc cấu hình như thế này sẽ cho phép bạn chọn được những lệnh nào là “NOPASSWD”.
Cách này hiệu quả khi bạn sử dụng sudo
trong các shell script
. Hãy thử xem xét trường hợp máy bạn cài cả nginx
và apache2
, và nginx
sẽ luôn được khởi động ưu tiên apache2
. Bạn cần viết 1 shell script để ưu tiên apache2
hơn (tắt nginx
và bật apache2
). Vấn đề là 2 lệnh1
2service stop nginx
service start apache2
này lại yêu cầu quyền root
, vì vậy bạn cần cấu hình nó trong file /etc/sudoers
kia :D1
2minhnv ALL=(ALL:ALL) NOPASSWD:/usr/bin/service start
minhnv ALL=(ALL:ALL) NOPASSWD:/usr/bin/service stop
Rồi ngon, giờ triển với shell script thôi nào1
2
3#!/bin/sh
sudo service nginx stop && sudo service apache2 start
Finish!!!
Tài liệu tham khảo
Một vài điều về sudo command
http://yoursite.com/2020/01/09/Mot-vai-dieu-ve-sudo-command/