Sửa lỗi Ansible bỏ qua ansible.cfg trong thư mục world-writable

beginner🔧 Ansible2026-05-07| Ansible 2.x trở lên, Linux/macOS, thư mục có quyền chmod 777 hoặc other-write

Error Message

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
#ansible-cfg#phân-quyền#world-writable#cấu-hình

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.cfg khô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.cfg củ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/tmp có sticky bit (drwxrwxrwt) nhưng vẫn là world-writable. Ansible sẽ bỏ qua mọi ansible.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.

Related Error Notes