Sudo không thể thấy các tệp thực thi được liên kết cộng sinh trong đường dẫn


0

Trên CentOS 7, tôi đã cài đặt một số tệp thực thi /opt/app-version/bin/executable. Những thực thi đó có các quyền sau:

rwxrwxr-x. 500 500

Quyền sở hữu của mọi thư mục trong đường dẫn /opt/app-version/bin/là - 500 500ngoại trừ /opt, đó là root root.

Câu hỏi đầu tiên của tôi: 500 500kinh doanh này là gì? Cho rằng tôi đã cài đặt các tệp thực thi bằng cách sử dụng sudo, chủ sở hữu và nhóm không nên root?

Tôi đã chạy lệnh sau với quyền root để tạo các liên kết tượng trưng đến các tệp thực thi trong /usr/local/bin/:

ln /opt/app-version/bin/executable /usr/local/bin/executable --symbolic

Tôi có thể chạy executabletừ dòng lệnh như một người dùng thông thường, nhưng không phải là người dùng thông thường sử dụng sudo.

Chạy sudo executabletrở lại sh: executable: command not found.

Chạy sudo echo $PATHcho thấy đó /usr/local/bin/là trong $PATHmôi trường sudo. (Hoặc hiện nó? Tôi nhìn thấy các nội dung của $PATHcho môi trường sử dụng siêu hay $PATHcho môi trường của người sử dụng mà gọi sudo? Liệu CentOS tạo ra một môi trường mới cho các lệnh chạy với sudo, hay nó chỉ cần chạy lệnh trong môi trường của người gọi? )

Chạy sudo ls -la /usr/local/bin/executabletrả về một danh sách cho executable/usr/local/bin/với quyền sở hữu lrwxrwxrwx. 1 root root. (Có ln --symbolicthực sự tạo các liên kết có thể chỉnh sửa trên toàn cầu theo mặc định không? Đó không phải là - một ý tưởng khủng khiếp?) Sự hiểu biết của tôi là chương trình này sudo sẽ có thể chạy executable.

Tôi đang thiếu gì?

Câu trả lời:


0

Trước tiên 500 500, nếu bạn khôi phục từ tarkho lưu trữ (trong số những người khác), chủ sở hữu và nhóm sẽ được bảo vệ khỏi hệ thống nơi lưu trữ được tạo: Tôi đoán rằng trình cài đặt thực hiện việc này và nếu người dùng hoặc nhóm được khôi phục không tồn tại trên hệ thống của bạn, giá trị số được hiển thị.

Bây giờ PATH, tôi đã sao chép điều này trên Ubuntu và có vẻ như điều sudochỉnh PATH: trong lệnh của bạn sudo echo $PATH, PATHbiến đã được mở rộng trong trình bao ban đầu trước khi gọi sudo. Có một tập tin /etc/sudoersvới một mục "defaults secure_path="...", và đây dường như là những gì được sử dụng.

Nếu bạn sử dụng, sudo sh -c 'echo $PATH'bạn sẽ có một ý tưởng tốt hơn về việc PATHđang được sử dụng. Lưu ý rằng tôi đã cố tình sử dụng shthay vì bashđể bỏ qua một số tệp khởi tạo, có thể thay đổi mọi thứ, mặc dù shtất nhiên sẽ có một số tệp riêng.

Trên Ubuntu, secure_pathdòng này có chứa /user/local/bin, nhưng CentOS có thể khác (cả hai đều có nguồn gốc từ Debian, nhưng theo man sudoersSELinux có thể ghi đè một số mục). Theo như tôi có thể thấy bạn có ít nhất bốn lựa chọn: -

  • Sửa đổi secure_pathđể bao gồm `/ usr / local / bin '.
  • Đặt liên kết vào một trong các thư mục được xác định trong secure_path.
  • Sử dụng su -c "{command} {parameters}"thay vì sudo {command} {parameters}.
  • Sử dụng sudo -sđể có được một root bashvới PATHkhởi tạo giống như shell ban đầu, sau đó gọi tệp thực thi của bạn từ đó và thoát sau đó.

Tôi cũng tìm thấy rất nhiều cuộc thảo luận và một số giải pháp có thể khác ở đây .


Không có tính năng nhắn tin riêng tư nào trong StackExchange mà tôi biết, vì vậy - tôi sẽ chỉ đăng nó ở đây: vừa đọc qua hồ sơ người dùng của bạn, tôi nghĩ những người như bạn có thể không được nói thường xuyên đủ bao nhiêu người như bản thân tôi đánh giá cao việc va vào bạn trong bối cảnh chuyên nghiệp. Ngả mũ vì kinh nghiệm và sự hỗ trợ của bạn! Nếu tôi ở Anh thay vì LA, vòng đầu tiên sẽ thuộc về tôi. Chào nghiêm! (Và cảm ơn)
Học sinh vào
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.