Linux - sử dụng, su su - nhưng vẫn giữ thư mục hiện tại


13

Khi tôi thực hiện su -để root, thư mục hiện tại của tôi được đặt thành nhà của root. Có cách nào để giữ thư mục hiện tại mà tôi đã ở, rất giống sudo -s. Hoặc là câu trả lời để sử dụng sudo?


5
Xin lưu ý rằng tôi không muốn tỏ ra thô lỗ, nhưng tại sao vấn đề này không được giải quyết thông qua "man su"?
Myrrdyn

1
@Rory xin vui lòng đọc bình luận của
Myrrdyn

Tôi thích sử dụng sudo su -c "zsh", trong trường hợp của tôi, giữ cho tôi trong thư mục hiện tại và tải zsh dưới dạng shell với người dùng root. ctrl+dsau và bạn quay lại với người dùng hiện tại Đối với điều thư mục, hoạt động trực tiếp trên centos đối với tôi, nhưng có lẽ việc thêm `&& cd $ (pwd)` bên trong lệnh đã truyền có thể thực hiện thủ thuật.
GabLeRoux

Tài liệu @Myrrdyn thật tuyệt vời khi bạn biết những gì bạn đang tìm kiếm. Khi bạn không, hỏi các chuyên gia một số lời khuyên là nhanh hơn và mô phạm hơn.
Romain Vincent

Câu trả lời:


18

Sử dụng sudo luôn luôn tốt hơn, nếu có thể, bởi vì sau đó bạn không cần biết (hoặc cung cấp cho ai đó) mật khẩu gốc. Đặt mật khẩu gốc thành một cái gì đó dài và khủng khiếp và sau đó khóa nó an toàn.

Nếu bạn muốn từ chối ai đó truy cập sau này, bạn chỉ cần xóa quyền truy cập của họ vào sudo, thay vì phải dạy cho mọi người một mật khẩu root mới.

Tuy nhiên - bạn không cần sử dụng tham số '-' nếu bạn không muốn. Bạn sẽ nhận được một shell là root, nó sẽ không phải là shell đăng nhập (vì vậy nó sẽ không chạy .profile của root.)


1
Trong trường hợp của tôi, tôi cần bí danh để làm một cái gì đó như asuser git reset --hard. Nhưng su - <user> -m -c "git reset --hard"sudo -u <user> git reset --hardsẽ cứu môi trường của tôi và git sẽ cố đọc cấu hình git của người dùng hiện tại . Vì vậy, tôi chỉ muốn nói rằng đôi khi giải pháp của người dùng bằng cách sử dụng su - <user> -c "cd pwd; bash" là tốt hơn.
ReFruity

16

Tôi đồng ý rằng sudo hầu như luôn luôn là một câu trả lời tốt hơn nhưng để trả lời phần khác của câu hỏi ...

'-' trong 'su -' chỉ ra rằng bạn muốn mô phỏng thông tin đăng nhập siêu người dùng, thay vì chỉ chạy với các đặc quyền siêu người dùng.

Nếu bạn sử dụng 'su' đơn giản thay vì 'su -', bạn sẽ ở trong cùng một thư mục; tuy nhiên, bạn cũng sẽ chạy trong cùng một môi trường, vì vậy có thể cần phải sửa đổi đường dẫn của bạn để truy cập một số lệnh quản trị viên.


9

Nếu bạn sử dụng sumà không có -, nó sẽ giữ bạn trong thư mục hiện tại của bạn. -, -lHay --login nói su để:

Cung cấp một môi trường tương tự như những gì người dùng mong đợi nếu người dùng đăng nhập trực tiếp.

Hoặc chỉ cần sử dụng sudo, nó có rất nhiều lợi thế khác. Hoặc phím ssh.


6

Bạn chắc chắn nên sử dụng sudo.

su -m
-m (-p): không đặt lại các biến môi trường (thường không được khuyến nghị)

Điều đó sẽ giữ bạn trong thư mục khi bạn thay đổi để root.

Lợi ích của việc sử dụng sudo


1
Tôi không thể thấy điều này khác biệt như thế nào so với chỉ "su" trên chính nó, ngoài việc có thể không đặt lại môi trường PATH, đây là một vấn đề bảo mật có thể xảy ra.
David Pashley

Ví dụ @DavidPashley, nó thực thi .bashrctừ người dùng bên ngoài, không phải người dùng gốc.
phil294

3

Sử dụng sudo :). Nghiêm túc mà nói, bạn không cần su. 'sudo' tốt hơn khi bạn chỉ sử dụng nó cho các lệnh đặc quyền và có thể giúp tránh các lỗi. Bạn cũng có được trách nhiệm.


3

Nếu bạn thực sự muốn sử dụng su, có một cách để ở trong cùng một thư mục.

su - <user> -c "cd `pwd`; bash"

Những gì đang xảy ra ở đây:

  • su - <user> = đăng nhập như
  • -c có nghĩa là "chạy một lệnh trong trình bao mới
  • -c "cd `pwd`" lệnh chúng tôi đưa ra là để chuyển sang direcotory ( pwd) hiện tại - nhưng vì chúng tôi sử dụng backticks, nên pwdlệnh được ước tính trước khi chúng tôi chạy sulệnh để chúng tôi thực sự chuyển sang thư mục chúng tôi đang ở NGAY với tư cách là người dùng cũ. Vấn đề duy nhất ở đây là shell mới thoát ngay sau khi chạy lệnh, vì vậy sau đó chúng tôi thêm:
  • -c "cd `pwd`; bash" có nghĩa là "chạy bash(shell mới) sau khi chạy cdlệnh và shell bash không thoát cho đến khi chúng ta đăng xuất khỏi nó.

Đây thực sự là câu trả lời duy nhất cho câu hỏi. Làm tốt lắm!
Cacahuete Frito

Trên thực tế, su - [user] -c "cd $(pwd); bash"có thể tốt hơn một chút (thay đổi backticks thành $()).
Cacahuete Frito

2

Nếu bạn sử dụng "su" thì đó là một vỏ tương tác. Điều này giống như "sudo -s". "su -" tạo ra một vỏ đăng nhập, sẽ ghi đè lên môi trường. "sudo -i" là tương đương với sudo. Nếu bạn đang cố gắng để có được một vỏ tương tác, bạn nên luôn luôn sử dụng biểu mẫu sudo -i (hoặc su -), hoặc có thể kết thúc bằng các quyền tệp lạ trong thư mục chính của người dùng.


0

bạn phải sửa đổi nguồn su để thực hiện công việc này. có một cuộc gọi chdir trong một thủ tục khởi tạo các biến thể envoironment. bình luận ra những trạng thái bao gồm cuộc gọi đó. và bây giờ, bạn có thể thực hiện "su -" nhưng vẫn giữ thư mục hiện tại.

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.