Tại sao tôi không thể chạy `su`? (và tôi nên làm thế nào?)


33

Bất cứ khi nào tôi cố gắng phát hành, sutôi nhận được điều này:

$ su  
Password:  
su: Sorry

Không cần phải nói, tôi đang nhập đúng mật khẩu quản trị viên hoạt động với sudo. Những gì tôi muốn là không phải nhập sudomỗi lần.

Câu trả lời:


34

Trong MacOS X, người dùng root bị tắt theo mặc định, do đó susẽ không hoạt động. Như những người khác đã tuyên bố, tốt nhất nên sử dụng sudo.

Nếu bạn phải cho phép người dùng root, xem technote của Apple: Việc kích hoạt và sử dụng người dùng "root" trong Mac OS X .


13
sudo suvẫn hoạt động, vì vậy nó không thực sự bị vô hiệu hóa. Nó chỉ không có mật khẩu.
Tên giả

@FakeName Đây là cửa hậu vui nhộn nhất! Nếu bạn có thể chạy sudo su, điều gì trên thế giới là điểm vô hiệu hóa su?
Hẻm núi Kolob

3
@KolobCanyon - Điểm không thực sự là "vô hiệu hóa su", đó là để ngăn chặn đăng nhập root . Bằng cách không cho phép đăng nhập như root, bạn ngăn chặn một loạt các vấn đề bảo mật có thể xảy ra. Không cho phép một người có thể sudocho sulà loại ngớ ngẩn. Về cơ bản, suchỉ cần thay đổi id người dùng hiện tại và thực thi một lệnh (shell, nếu không được chỉ định). Nếu id người dùng đã là 0 (root), chẳng hạn như khi được thực thi sudo, sẽ không có gì để nó thực hiện, vì vậy nó chỉ thực thi shell. Bạn có thể có được một hiệu ứng tương tự bằng cách làm sudo bash.
Tên giả

1
@FakeName Vẫn còn bối rối. Sự khác biệt giữa đăng nhập bằng root và chạy 'sudo su' là gì? Nó không thực sự cùng cấp?
Hẻm núi Kolob

2
@KolobCanyon - Không. Về cơ bản, nếu bạn vô hiệu hóa đăng nhập , điều đó có nghĩa là nếu có lỗ hổng trong quá trình đăng nhập, tin tặc không thể sử dụng nó để lấy root trực tiếp. Về cơ bản, nó chuyển sự thỏa hiệp gốc cần thiết từ "thỏa hiệp đăng nhập" sang "thỏa thuận đăng nhập cho tài khoản người dùng + privec". Về cơ bản, nó được thực hiện như một thứ chuyên sâu.
Tên giả

14

Bạn có hai lựa chọn. Đầu tiên là sử dụng sudo -s- điều này sẽ cung cấp cho bạn quyền truy cập siêu người dùng, nhưng bạn vẫn sẽ là "chính mình" (có thể nói), vì vậy những thứ như ~vẫn sẽ là thư mục chính của bạn. Ngoài ra, bạn có thể sử dụng sudo su, cung cấp cho bạn một vỏ là người dùng root thực sự của máy Mac.


5
Apple Way (tm) là để sử dụng sudođể chạy các lệnh yêu cầu đặc quyền nâng cao, không chuyển sang vỏ gốc và hoạt động từ đó.
Ian C.

3
@Ian C. - Không, đó thực sự là cách unix. Apple chỉ sử dụng nó vì nó dựa trên * nix.
Tên giả

Tên @Fake: Apple trải qua những khó khăn lớn để không bao giờ nói chuyện hoặc tiết lộ vỏ gốc cho người dùng. Bạn có thể nói họ đưa sudoethos đến cùng cực. Nhưng bất cứ điều gì: ngữ nghĩa. Không sử dụng shell root trong OS X.
Ian C.

1
@Ian C - Apple không làm được gì nhiều hơn các nhà thiết kế * nix làm, Apple chỉ không nói nhiều về nó. Trong cả hai trường hợp, nó ở đó, chỉ với những thứ như linux, họ sẽ cho bạn biết cách sử dụng nó một cách dễ dàng. Nếu điều đó làm cho nó được sử dụng rộng rãi hơn , thì nó không chỉ ra sự khác biệt về kiến ​​trúc cơ bản.
Tên giả

1

Ví dụ, nếu bạn cần di chuyển tệp hoặc sử dụng git bằng CLI thì trong trường hợp đó, giải pháp tốt nhất sẽ là sử dụng sudo -slệnh. Sau lệnh đó, bạn không phải tiếp tục nhập mật khẩu nhiều lần.


1

Tôi nghĩ bạn không thể làm điều này như một người dùng "bình thường" ...

Nếu có một tài khoản người dùng khác có quyền quản trị, bạn phải sử dụng tài khoản này

restricted user$ su
Password:(the root password here)
Sorry!

restricted user$ su - (an admin account here)
password:(the admin account password)
$ su - root
Password:(The root password here)
# -> You are root user now

1

Giải pháp hiện đại: sudo -u

Để chạy như sử dụng khác, sử dụng sudo -u.

Ví dụ: để chạy trình soạn thảo văn bản, chẳng hạn như nano :

sudo -u someuser nano

Hãy và nhập mật khẩu người dùng quản trị Mac của bạn khi được nhắc. Tại thời điểm này, chính người dùng quản trị Mac của bạn đang gọi sudo, không phải someuserngười dùng để bạn không nhập someusermật khẩu.

  • sudo có nghĩa là để chạy một cái gì đó bằng cách sử dụng đặc quyền superuser.
  • -u nghĩa là có thể chạy một lệnh được chỉ định như người dùng được chỉ định này.
  • someuser nên được thay thế bằng tên người dùng mong muốn của bạn.

Để mô phỏng thông tin đăng nhập ban đầu với tư cách là một người dùng cụ thể, bao gồm chạy các tập lệnh khởi động của họ, hãy sử dụng -I.

sudo -u someuser -i nano

Điều này chạy nanoứng dụng với tư cách là người dùng someusernhưng chỉ sau khi đã chạy các tập lệnh khởi động cho người dùng đó.

Nếu chúng tôi chọn không chỉ định một lệnh hoặc ứng dụng để chạy, chúng tôi sẽ nhận được một vỏ tương tác chạy như người dùng đó.

sudo -u someuser -i

Trường cũ: sudo su someuser

Một cách tiếp cận khác sử dụng sulệnh kết hợp với sudo. Các sulệnh có nghĩa là “người sử dụng chuyển đổi”.

sudo su someuser

Hoặc, để bao gồm chạy các tập lệnh khởi động của người dùng, hãy thêm dấu gạch nối.

sudo su - someuser

root người sử dụng

Người rootdùng trong các hệ điều hành liên quan đến Unix có sức mạnh tuyệt đối để làm bất cứ điều gì.

Apple đã chọn vô hiệu hóa roottài khoản trong macOS, để tránh khai thác lỗ hổng bảo mật và bảo vệ bạn khỏi tự bắn vào chân mình. Apple đã tạo ra ý tưởng về tài khoản người dùng Quản trị viên có nhiều quyền hạn, nhiều quyền hạn hơn tài khoản người dùng Chuẩn , nhưng không có quyền lực tuyệt đối như rootcó. Xem ghi chú Hỗ trợ này của Apple để thảo luận.

Nếu cần, bạn có thể kích hoạt rootngười dùng trong macOS và sau đó chuyển sang người dùng đó. Điều này được khuyến khích mạnh mẽ . Tôi sẽ đi xuống con đường này chỉ như một phương sách cuối cùng tuyệt vọng.


Để thảo luận về vấn đề này trong bối cảnh postgresngười dùng đang chạy hệ thống cơ sở dữ liệu Postgres trên macOS, hãy xem Câu hỏi này trên trang web chị em, DBA Stack Exchange .

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.