Những gì bạn đang thấy
Bạn chạy một playbook và Ansible không nhận ansible.cfg của bạn — hoặc bạn thấy cảnh báo này trên terminal:
Ansible is being run in a world writable directory (/path/to/dir), ignoring it as an ansible.cfg source.
For more information see https://docs.ansible.com/ansible/devel/reference_appendices/config.html#cfg-in-world-writable-dir
Playbook vẫn tiếp tục chạy, nhưng với cấu hình mặc định — hoặc tệ hơn, nó âm thầm lấy config từ nơi khác. Đường dẫn inventory, cài đặt become, tùy chọn SSH: bất kỳ thứ nào trong số này đều có thể hoạt động khác với mong đợi của bạn mà không có một thông báo lỗi nào.
Tại sao Ansible làm vậy
Ansible từ chối tải ansible.cfg từ một thư mục mà bất kỳ ai trên hệ thống cũng có thể ghi vào. Lý do bảo mật rất rõ ràng: nếu người dùng khác có thể ghi vào thư mục đó, họ có thể đặt một ansible.cfg giả vào đó. File config giả đó sau đó có thể ghi đè SSH key, cài đặt leo thang đặc quyền, hoặc callback plugin của bạn — mà bạn không hề hay biết.
Kiểm tra này được thêm vào từ Ansible 2.4 và không có cờ bỏ qua nào. Không có biến môi trường nào để bỏ qua nó. Cách duy nhất là sửa quyền của thư mục.
Kiểm tra quyền hiện tại
Trước khi làm bất cứ điều gì, hãy xác nhận bạn đang đối mặt với vấn đề gì:
ls -ld /path/to/dir
Một thư mục world-writable trông như thế này — chú ý chữ w ở nhóm cuối cùng:
drwxrwxrwx 3 alice devops 4096 May 6 10:00 /path/to/dir
# ^--- chữ "w" này là nguyên nhân vấn đề
Ansible từ chối bất kỳ thư mục nào mà "others" có quyền ghi. Đó là nhóm thứ ba trong chuỗi quyền. drwxrwxrwx (777) sẽ kích hoạt cảnh báo. drwxrwxr-x (775) thì không — others chỉ có thể đọc. Khi nghi ngờ, hãy nhìn vào chữ w cuối cùng đó.
Cách sửa nhanh: gỡ quyền ghi toàn cục
Loại bỏ bit world-writable:
chmod o-w /path/to/dir
Với hầu hết các thư mục dự án, 755 là lựa chọn phù hợp:
chmod 755 /path/to/dir
Kiểm tra xem đã sửa chưa:
ls -ld /path/to/dir
# Bây giờ nên hiển thị: drwxr-xr-x
Chạy lại playbook. Cảnh báo biến mất và Ansible tải config của bạn bình thường.
Nếu là thư mục dùng chung hoặc thư mục hệ thống
Đôi khi bạn đang ở trong /tmp, một workspace dùng chung, hoặc thư mục của CI/CD agent được cố tình đặt world-writable — và bạn không thể thay đổi quyền đó. Có hai lựa chọn:
Lựa chọn 1 — Di chuyển ansible.cfg sang nơi an toàn hơn
Ansible tìm kiếm ở nhiều vị trí theo thứ tự cố định. Thư mục home của bạn là một trong số đó, và hầu như luôn có quyền an toàn.
mkdir -p ~/.ansible
cp ansible.cfg ~/.ansible/ansible.cfg
Hoặc bỏ qua hoàn toàn việc tìm kiếm thư mục bằng ANSIBLE_CONFIG. Trỏ trực tiếp vào file — Ansible bỏ qua kiểm tra quyền thư mục khi bạn dùng biến này:
export ANSIBLE_CONFIG=/home/alice/secure-dir/ansible.cfg
ansible-playbook site.yml
Lựa chọn 2 — Sửa quyền trong CI/CD pipeline
Thư mục checkout trong CI thường được cấp quyền rộng theo mặc định. Thêm một bước trước khi chạy Ansible để siết chặt quyền:
# GitHub Actions
- name: Fix workspace permissions
run: chmod 755 $GITHUB_WORKSPACE
- name: Run playbook
run: ansible-playbook site.yml
GitLab CI:
before_script:
- chmod 755 "$CI_PROJECT_DIR"
Xác nhận bản sửa đã hoạt động
Kiểm tra file config nào Ansible đang thực sự tải:
ansible --version
Nhìn vào dòng config file:
ansible [core 2.16.0]
config file = /path/to/dir/ansible.cfg ← phải trỏ đến file của bạn bây giờ
configured module search path = ...
...
Nếu vẫn hiển thị config file = None hoặc một đường dẫn không mong đợi, quyền thư mục chưa được sửa — hoặc Ansible đang tìm thấy một config khác cao hơn trong thứ tự tìm kiếm.
Để xem toàn bộ mọi cài đặt đang hoạt động và nguồn gốc của chúng, chạy:
ansible-config dump --only-changed
Các lỗi thường gặp sau khi sửa
- Sửa file thay vì thư mục — Ansible kiểm tra quyền của thư mục. Chạy
chmod 600 ansible.cfgkhông có tác dụng gì ở đây; bạn cần sửa quyền của thư mục chứa file. - Thư mục lồng nhau — Nếu
ansible.cfgcủa bạn nằm tại/shared/projects/myapp/, hãy sửa quyền của thư mục đó. Không phải thư mục cha. Ansible chỉ kiểm tra thư mục trực tiếp chứa file config. - Làm việc từ /tmp —
/tmpcó sticky bit (drwxrwxrwt) nhưng vẫn là world-writable. Ansible sẽ bỏ qua mọiansible.cfgở đó. Hãy di chuyển dự án của bạn sang một thư mục làm việc thích hợp.
Mẹo
Các con số quyền như 755 hay 777 đôi khi khó đọc nhanh. Unix Permissions Calculator trên ToolCraft cho phép bạn nhập bất kỳ giá trị chmod nào và xem chính xác các bit đọc/ghi/thực thi được đặt cho owner, group và others — rất tiện trước khi bạn thay đổi quyền trên thư mục dùng chung.
Đối với các file group_vars hoặc host_vars không parse đúng như mong đợi, YAML ↔ JSON Converter là cách nhanh để phát hiện lỗi thụt lề: dán YAML của bạn vào, chuyển sang JSON, và mọi vấn đề cấu trúc sẽ hiện ra ngay.

