/ etc / bóng và / etc / passwd đặc quyền - tại sao nó có thể ghi


0
sghk1> id
uid=0(root) gid=0(root)

sghk1> ls -l /etc/shadow
-r--------   1 root     sys         4045 Aug 24 15:52 /etc/shadow

sghk1> ls -l /usr/bin/passwd
-r-sr-sr-x   1 root     sys        26764 Jan 11  2012 /usr/bin/passwd

Khi tôi cố gắng chỉnh sửa vi và tệp và: wq, nó sẽ nhắc bên dưới

"/etc/shadow" File is read only

Tại sao khi tôi gọi / usr / bin / passwd, tệp có thể ghi / thay đổi được bởi tệp thực thi, nhưng khi tôi cố gắng chỉnh sửa thủ công bằng root, tôi không thể


Nếu bạn thực sự muốn viết, hãy sử dụng:wq!
Cyrus

Câu trả lời:


2

Như root, bạn có thể làm "bất cứ điều gì", nhưng các chương trình như visẽ thực hiện kiểm tra để tư vấn cho bạn. vim(đó là những gì bạn có thể đang sử dụng) sẽ cho phép bạn ghi vào một tệp chỉ đọc bằng cách sử dụng :w!(một dấu chấm than).

Các passwdchương trình được thiết kế để cập nhật /etc/shadow, và sẽ sử dụng bất cứ sự kết hợp của chmod, writevv, đó là cần thiết mà không làm phiền để tư vấn cho người sử dụng.

Là một người dùng bình thường (không chạy như root), tất nhiên, vi( m) không thể cập nhật /etc/shadow. Các /usr/bin/passwdchương trình hoạt động vì nó sử dụng các tính năng setuid ( "s" khi bạn làm ls -l /usr/bin/passwd).


điều đó có nghĩa là usr / bin / passwd bằng cách nào đó bỏ qua thực tế là / etc / bóng chỉ được đọc .. logic của tôi là nếu chương trình passwd đang sử dụng setuid để thực thi với quyền root, thì tự nhiên root có thể để ghi vào tập tin. Vì vậy, lý do không thể là vì vi đang thực hiện một số kiểm tra đối với tệp. tôi có đúng không
Noob

Các /usr/bin/passwdchương trình có thể thay đổi các điều khoản vì nó chạy với rootđặc quyền.
Thomas Dickey

điều đó có nghĩa là chương trình passwd thay đổi sự cho phép của tập tin bóng cả trước và sau khi thay đổi tập tin?
Noob

Mã nguồn có tại anonscm.debian.org/cgit/pkg-shadow/shadow.git/tree (nó trải qua một số bước để đảm bảo rằng chỉ có một quá trình cập nhật các tệp tại bất kỳ điểm nào).
Thomas Dickey

2

Tệp mà bạn đã tham chiếu ( /etc/shadow) không hiển thị cờ có thể ghi trong các quyền của nó . vihoặc vimtheo mặc định sẽ không ghi vào tệp không có cờ ghi được, ngay cả với quyền root hoặc là chủ sở hữu của tệp, trừ khi bạn ghi đè hành vi của tệp đó bằng dấu chấm than.

Bạn có thể sử dụng :w!để ghi vào tệp, bỏ qua thực tế là cờ có thể ghi bị thiếu.


0

Xem các quyền bạn có trên tệp, root là chủ sở hữu và bản thân root chỉ có quyền đọc. Để thay đổi, bạn nên thực hiện "chmod u + w / etc / Shadow" với quyền root và nó sẽ cấp cho "chính bạn" quyền ghi.

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.