giữ bí danh khi tôi sử dụng sudo bash


9

Tôi có máy chủ Centos 5.5 có các lệnh bí danh riêng cho tài khoản của mình. Khi tôi sudo bashvẫn có thể sử dụng các bí danh đó, tôi đã không phải thêm các bí danh vào thư mục gốc .bashrc.

Tôi có một máy chủ khác là Centos 6.5. Nhưng khi tôi thực thi sudo bash, nó sẽ không sử dụng bí danh của người dùng mà tôi đã đăng nhập. Có ai biết tôi cấu hình nó ở đâu để bao gồm các bí danh của người dùng mà tôi đã đăng nhập khi tôi sử dụng sudo bashkhông?


Tôi nghĩ các bí danh được kế thừa qua môi trường, vì vậy có thể câu trả lời ở đây sẽ hoạt động: unix.stackexchange.com/questions/92998/ Lỗi
Barmar

Số 5,5 có thể bảo toàn $ HOME từ người gọi, trong khi 6.5 thì không. Xem sudo sudo -Vđầu ra và env_keeptrong trang man sudoers.
Stéphane Chazelas

1
Cảm ơn Barmar và Stephane. Cả hai câu trả lời của bạn đều chỉ cho tôi đi đúng hướng. Tôi đã phải thiết lập những điều sau đây trong sudoers: Defaults !always_set_homeDefaults !env_reset`
Tyler Knotek

Câu trả lời:


6

Thêm dòng sau vào ~ / .bashrc:

alias sudo='sudo '

Từ hướng dẫn sử dụng bash

Bí danh cho phép một chuỗi được thay thế cho một từ khi nó được sử dụng làm từ đầu tiên của một lệnh đơn giản. Shell duy trì một danh sách các bí danh có thể được thiết lập và bỏ đặt với các lệnh dựng sẵn bí danh và unalias.

Từ đầu tiên của mỗi lệnh đơn giản, nếu không được trích dẫn, được kiểm tra xem nó có bí danh không. Nếu vậy, từ đó được thay thế bằng văn bản của bí danh. Các ký tự '/', '$', '`', '=' và bất kỳ ký tự đại diện hoặc ký tự trích dẫn nào được liệt kê ở trên có thể không xuất hiện trong tên bí danh. Văn bản thay thế có thể chứa bất kỳ đầu vào shell hợp lệ, bao gồm cả siêu ký tự shell. Từ đầu tiên của văn bản thay thế được kiểm tra các bí danh, nhưng một từ giống hệt với bí danh đang được mở rộng không được mở rộng lần thứ hai. Điều này có nghĩa là người ta có thể bí danh ls thành "ls -F", và Bash không cố gắng mở rộng đệ quy văn bản thay thế. Nếu ký tự cuối cùng của giá trị bí danh là ký tự khoảng trắng hoặc tab, thì từ lệnh tiếp theo sau bí danh cũng được kiểm tra để mở rộng bí danh.

Vì vậy, Bash chỉ kiểm tra từ đầu tiên của một lệnh cho bí danh, bất kỳ từ nào sau đó không được kiểm tra. Điều đó có nghĩa là trong một lệnh như sudo ll, chỉ từ đầu tiên (sudo) được kiểm tra bằng bash cho một bí danh, sẽ bị bỏ qua. Chúng ta có thể yêu cầu bash kiểm tra từ tiếp theo sau bí danh (nghĩa là sudo) bằng cách thêm khoảng trắng vào cuối giá trị bí danh.


Làm việc cho zsh cũng tốt. Cảm ơn bạn!
dzhi

Điều này chỉ cho phép sử dụng các bí danh trong sudolệnh, ví dụ sudo some_alias ..., nhưng điều OP đang hỏi là làm thế nào để xác định bí danh cho người dùng của chính mình làm việc sau khi anh ta chuyển sang người dùng khác sử dụng sudo. Hãy nói rằng tôi đã some_aliasxác định. Khi tôi sudođể rootsử dụng sudo su, một môi trường mới được tạo ra và bí danh mà không được định nghĩa đó. Có -Etham số của sudolệnh sẽ xuất môi trường nhưng có vẻ như bí danh không phải là một phần của nó.
David Ferenczy Rogožan

0

Sử dụng sudo -E, sẽ xuất khẩu môi trường của bạn.


3
không bao gồm các bí danh (được thử nghiệm trên Ubuntu 16.04.1)
Antonios Hadjigeorgalis

Nó hoạt động nhưng chỉ như sudo -E bash. Khi được sử dụng với suas sudo -E su, các công cụ được xác định trong người dùng .bashrc(bí danh, dấu nhắc, v.v.) không được bảo tồn, mặc dù có vẻ như các biến môi trường được bảo tồn trong cả hai trường hợp. Tôi không chắc chính xác nó hoạt động như thế nào.
David Ferenczy Rogožan
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.