[AWS] fix lỗi “sudo: /etc/sudo.conf is owned by uid 996, should be 0”

Không biết vì lý do vì sao, có thể là chạy một cái role ansible nào đó chưa đúng hay cấu hình bằng tay mà hôm nay, một con instance trên AWS mình start lên lại (bữa giờ stop chứ không dùng mà chạy tốn tiền), login vào và sudo lên user root thì bị lỗi như sau:

sudo: /etc/sudo.conf is owned by uid 996, should be 0
sudo: /etc/sudo.conf is owned by uid 996, should be 0
sudo: /etc/sudoers is owned by uid 996, should be 0
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

Biết cái mùi là sai phân quyền file sudoers rồi, nhưng không biết cách nào để sudo lên được user root để sửa lại phân quyền, sau một hồi bần thần thì mình và sếp quyết định xử lý như sau: Deattach EBS (Elastic Block Store), sau đó Attach vào một con khác rồi mount nó vào để xử lý.

Oke fine, nói làm liền, khi attach được nó vào một instance khác, mình kiểm tra thử xem có partition đó hay chưa

[root@r2-ha-api ~]# lsblk 
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 15G 0 disk 
├─nvme0n1p1 259:1 0 15G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part 
nvme1n1 259:3 0 50G 0 disk 
├─nvme1n1p1 259:4 0 50G 0 part 
└─nvme1n1p128 259:5 0 1M 0 part

Đây rồi !!! nó chính là phân vùng 50GB nvme1n1p1, giờ đơn giản là mount vào /mnt là được đúng không nhỉ?? Nhưng mà …

[root@r2-ha-api ~]# mount /dev/nvme1n1p1 /mnt/
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/nvme1n1p1, missing codepage or helper program, or other error.

Tại sao mount không được ta? Google tìm hiểu chút mình phát hiện ra

[root@r2-ha-api ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
nvme0n1 
├─nvme0n1p1 xfs / be4f19b3-a8ae-4d74-a7a0-b12b49e21194 /
└─nvme0n1p128 
nvme1n1 
├─nvme1n1p1 xfs / be4f19b3-a8ae-4d74-a7a0-b12b49e21194 
└─nvme1n1p128

Cả 2 partiton, bao gồm partition của OS hiện tại và cái được mount vào có cùng UUID, có thể đó là nguyên nhân lỗi, vì vậy mình tiến hành mount và bỏ qua bước check UUID thử xem sao

mount -o nouuid /dev/nvme1n1p1 /mnt

Kết qủa thành công rồi, đi vào /mnt/etc/ kiểm tra xem phân quyền các file sudoers xem thế nào

-rw-r----- 1 zabbix zabbix 1786 21:21 12 Thg 3 sudo.conf
-r--r----- 1 zabbix zabbix 4724 10:55 23 Thg 6 sudoers
drwxr-x--- 2 zabbix zabbix 33 07:00 18 Thg 6 sudoers.d

Quái lạ thật, không hiểu mình thao tác sao hồi nào hay một cái role nào của ansible viết chưa đúng không mà nó thành quyền user zabbix rồi, thôi kệ, cái đó kiểm tra sau, giờ change lại quyền user root đã.

Tiện đât mình cũng xin chia sẽ thêm, không nên mở file /etc/sudoers ra để edit mà nên dùng lệnh visudo sẽ an toàn hơn.

Always use visudo to edit your sudoers file, never edit it directly yourself. It will prevent you saving it to disk unless it validates.

Thao tác xong, umount parition này ra:

umount /mnt

Rồi giờ mình sẽ detach cái EBS này ra, attach vào lại con instance cũ, start lên là xong rồi.

Lựu đạn vẫn không được, nó bị lỗi:

Instance does not have a volume attached at root (/dev/xvda)

Sau một hồi Google tiếp thì lỗi này là do root volume được gán với tên khác so với instance đang chạy. Cách fix như sau:

1. Stop instance

2. Detach EBS. Đi tới ELASTIC BLOCK STORE –> Volumes và chọn lại volume vừa detach . Volume này sẽ có trạng thái là “in-use”.

3. Thử attach lại volume, tuy nhiên đảm bảo rằng bạn không sử dụng tên mặc định của “device” mà hãy đổi lại thành “/dev/xvda”

4. Start lại instance sẽ thành công.

Bài học kinh nghiệm, nắm rõ những thứ mình đã làm trên hệ thống để mà control được khi có lỗi, và tới giờ ngồi viết bài này vẫn chưa biết mình cấu hình gì sai mà lại bị đổi mất permission nữa … Haizzz
Cuối tuần rồi, ngủ cái tính tiếp !!!