Làm thế nào tôi có thể cd vào một thư mục là root?


10

Giả sử có một thư mục mà tôi không có quyền truy cập. Rõ ràng là sudo cd foosẽ không hoạt động, bởi vì cdmột vỏ được tích hợp trong mọi vỏ bao giờ.

Cho đến nay, tôi mới sử dụng sudo bash(vâng tôi biết có nhiều cách tốt hơn) để nhận được lời nhắc root. Sau đó, tôi có thể cdvào thư mục để chọc xung quanh.

Có cách nào tốt hơn để làm điều này?


Tại sao bạn muốn cdlàm root (trừ khi bạn thực sự ở trong vỏ gốc)?
tripleee

nếu một thư mục được sở hữu bởi root và không có lệnh thực thi toàn cầu
strugee

1
Đó không thực sự là một trường hợp hợp lệ. Có thể hữu ích để có thể đọc thư mục, nhưng điều đó không yêu cầu thư mục phải là thư mục làm việc của bạn, tức là bạn không cần cd.
tripleee

Vâng, tôi đã không nhận ra rằng cho đến khi câu trả lời được chấp nhận chỉ ra rằng tôi có thể sudo ls.
strugee

Câu trả lời:


12

Không, không có cách nào cdđể một thư mục chỉ cho phép root mà không phải root. Thực sự không nên có quá nhiều thư mục có giới hạn này. Hầu hết thời gian, đó là quyền truy cập vào một tệp nhất định bị giới hạn, chẳng hạn như /etc/shadowtệp hoặc tệp nhật ký cụ thể bên dưới /var/log.

Bạn có thể sử dụng sudo ls <dir>để xem chúng thay vì bash. Ngoài ra, khi sử dụng sudođể trở thành root, bạn thường muốn đặt user ( sulệnh) thay vì bash, vì vậy hãy sử dụng lệnh này thay thế:

$ sudo su -

Bạn cũng có thể thực hiện điều tương tự với -icông tắc của sudo :

$ sudo -i

đoạn trích từ trang người đàn ông liên quan sudo -i

Tùy chọn -i (mô phỏng đăng nhập ban đầu) chạy shell được chỉ định trong mục nhập passwd (5) của người dùng đích dưới dạng shell đăng nhập. Điều này có nghĩa là các tệp tài nguyên dành riêng cho đăng nhập như .profile hoặc .login sẽ được đọc bởi trình bao. Nếu một lệnh được chỉ định, nó được chuyển đến shell để thực thi. Mặt khác, một vỏ tương tác được thực thi.

Đối với các tệp mà bạn không thể truy cập, bạn có thể sử dụng một trong các sudolệnh sau:

$ sudo tail /var/log/messages

$ sudo less /etc/shadow

3
Tại sao bạn sẽ sử dụng sudo su -thay vì sudo -i? Cả hai đều cung cấp cho bạn tất cả các đặc quyền siêu người dùng mặc dù tất cả những gì bạn cần là khả năng CAP_DAC_READ_SEARCH.
Stéphane Chazelas

@StephaneChazelas - Tôi chưa bao giờ nhận thấy công tắc đó trước đây. Giới thiệu ban đầu của tôi sudolà thông qua môi trường Solaris và phiên bản sudođó không có công tắc này. Nhìn qua thay đổi sudo, có vẻ như tùy chọn đó đã được thêm vào năm 2004. Đoán tôi đang hẹn hò với chính mình nhưng bạn đã hỏi 8-). Tôi sẽ sửa đổi câu trả lời để bao gồm cả hai, cảm ơn!
slm

@ StéphaneChazelas Tôi đồng ý. Tôi thích sudo -Hibởi vì nó cũng đặt thư mục chính (nó không đặt mặc định về nhà trên bản phân phối của tôi, mặc định có thể thay đổi). Nếu bạn không, bạn có thể kết thúc với các tệp sở hữu gốc trong nhà của bạn, nếu nó tạo các tệp mới ở đó.
doug65536 7/11/2015

5

Không, không có. Bạn cần một shell chạy như root.


Và, như đã chỉ ra trong các bình luận, nó khá vô nghĩa cdtrừ khi bạn đang chạy một trình bao hoặc một quá trình tương đương.
tripleee

0

Phải, bạn không thể. Đây là một cách giải quyết:

sudo sh -c "cd restricted-dir; some_command"
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.