12/08/2018, 13:16

Anh tạo user cho em rồi, vào đổi password đi nhé!

Dự án hiện tại của tôi đang dùng 26 con Ubuntu server lớn nhỏ, và tất nhiên không phải ai trong đội phát triển cũng có quyền truy cập vào tất cả chúng. Tôi có quyền đó, đồng nghĩa với việc tôi phải đảm nhận nhiệm vụ quản lý quyền truy cập của các thành viên trong đội tới từng server một. Gần đây ...

Dự án hiện tại của tôi đang dùng 26 con Ubuntu server lớn nhỏ, và tất nhiên không phải ai trong đội phát triển cũng có quyền truy cập vào tất cả chúng. Tôi có quyền đó, đồng nghĩa với việc tôi phải đảm nhận nhiệm vụ quản lý quyền truy cập của các thành viên trong đội tới từng server một. Gần đây việc cấp quyền truy cập diễn ra thường xuyên hơn, khiến tôi cứ phải lặp đi lặp lại những công việc khá nhàm chán.

Để cho phép một người có thể truy cập (ssh) vào một server, tất nhiên tôi phải tạo user cho người đó trên server tương ứng. Đầu tiên là phải hỏi SSH public key. Việc này thì cũng không mệt mỏi cho lắm, tôi có note lại để đỡ phải hỏi lại nhiều lần. Sau đó tôi phải gõ một loạt các lệnh như tạo user, tạo thư mục .ssh, phân quyền... Mỗi lần là một chuỗi các copy paste nhàm chán (tôi không có năng lực nhớ được những thứ phức tạp như thế).

Và một vấn đề tôi cho là phiền phức nhất, như cái tiêu đề tôi đã đặt, đó là mỗi lần tôi tạo xong một user, tôi lại phải đổi password cho user đó thành "changeme" và yêu cầu thành viên được cấp quyền thay password của mình vào. Trăm lần như một, tốn thời gian của tôi thì không sao, nhưng tốn thời gian của đội thì rõ là có vấn đề!

Giải pháp

Việc tìm giải pháp không tốn quá nhiều thời gian, vì thực sự nó không có gì khó. Hơn nữa tôi cũng đã từng làm việc với các sư phụ infra (ở công ty tôi người ta gọi là các sư phụ hạ tầng) nhiều nên cũng học hỏi được chút đỉnh. Giải pháp ở đây là thay vì note lại SSH keys, note lại các lệnh để copy paste thì tôi viết vài cái bash script cho từng thành viên một. Lúc cần tạo cho ai thì lên server chạy file tương ứng là xong. Easy enough?

Ví dụ tạo user tên là bs90 thì file bash script đó sẽ trông như sau:

#!/bin/bash
useradd -d /home/bs90 -s /bin/bash -m bs90 -G admin
mkdir /home/bs90/.ssh
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUCPMsp8q/h/JtCqFH...itistoolong...K1iIj bs90_htdd@yahoo.com.vn' > /home/bs90/.ssh/authorized_keys
chown -R bs90:bs90 /home/bs90/.ssh
chmod 700 -R /home/bs90/.ssh
chmod 600 -R /home/bs90/.ssh/*
sed -i '/^bs90:.*$/d' /etc/shadow
echo 'bs90::$6$F2...hidden...Ux1.:16728:0:99999:7:::' >> /etc/shadow

Giải thích chi tiết

Tạo user

useradd -d /home/bs90 -s /bin/bash -m bs90 -G admin

Tạo user tên là bs90, có thư mục gốc là /home/bs90 và thuộc group tên là admin. Bạn có thể thiết lập ID mong muốn, hoặc đổi group khác cho user, useradd có thể làm được rất nhiều điều. Kiến thức cơ bản, chạy man useradd để biết thêm chi tiết.

Tạo authorized_keys

mkdir /home/bs90/.ssh
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUCPMsp8q/h/JtCqFH...itistoolong...K1iIj bs90_htdd@yahoo.com.vn' > /home/bs90/.ssh/authorized_keys

Tạo thư mục .ssh trong thư mục gốc của user, sau đó add public key vào file authorized_keys trong thư mục đó. Điều này cho phép máy tính có public key tương ứng (tất nhiên là phải có cả private key nữa) truy cập vào server. Như đã nói ở trên, thay vì phải note public key ở chỗ khác, đây là chỗ note thông minh hơn nhiều.

Phân quyền

chown -R bs90:bs90 /home/bs90/.ssh
chmod 700 -R /home/bs90/.ssh
chmod 600 -R /home/bs90/.ssh/*

Có một số quy định về quyền của thư mục .ssh và các file phía bên trong. Không biết các bạn đã gặp thông báo "ssh permissions are too open" bao giờ chưa             </div>
            
            <div class=

0