Linux: cả chsh và ypchsh đều không hoạt động, tôi có thể thay đổi trình bao của mình không?


8

Tôi là một anh chàng Unix trường học cũ, vì vậy các kỹ năng Linux của tôi có lẽ hơi lỗi thời. Nhưng điều này có vẻ như nó đủ đơn giản.

Trên hệ thống Red Hat Linux nơi tôi không có root (được quản lý bởi bộ phận CNTT của công ty), tôi muốn có thể thay đổi vỏ đăng nhập của mình. Chạy chsh cho tôi:

$ chsh -s /bin/bash
chsh: can only change local entries; use ypchsh instead.

Vì vậy, tôi đã chạy ypchsh thay thế:

$ ypchsh userid
ypchsh: can't find the master ypserver: Internal NIS error

Đưa cái gì? Bất cứ ai có ý tưởng nào khác?


3
Bạn có thực sự sử dụng NIS? Hay nó là một cái gì đó giống như LDAP?
Ignacio Vazquez-Abrams

Tôi khá chắc chắn rằng mạng của chúng tôi đang sử dụng LDAP, vì NIS khá cổ xưa vào thời điểm này.
Ogre Psalm33

Câu trả lời:


8
  • NIS: ypchsh

  • LDAP:

    $ ldapmodify <<EOF
    dn: YOUR_DN
    changetype: modify
    replace: loginShell
    loginShell: /bin/bash
    -
    EOF
    

    ( YOU_DN có thể ở dạng uid=$USER,ou=people,dc=example,dc=org; thử ldapwhoamixem)

  • Hesiod: Hỏi quản trị hệ thống.

  • Active Directory : Hỏi quản trị hệ thống.


Một đồng nghiệp nói với tôi rằng họ nghĩ đó là LDAP, nhưng ldapwhoami đưa ra "ldap_sasl_interactive_bind_s: Phương thức xác thực không xác định (-6) thông tin bổ sung: SASL (-4): không có cơ chế nào khả dụng:", vì vậy tôi đoán là Active Directory vào thời điểm này. Tôi sẽ phải hỏi IT.
Ogre Psalm33

@Ogre: Kiểm tra /etc/nsswitch.conf (dòng 'passwd') để đảm bảo.
dùng1686

5

Tôi đã sử dụng một cách giải quyết để thay đổi trình bao của mình khi đăng nhập. Tôi vừa đặt bashcái được sử dụng để thay đổi shell trong .profiletập tin của tôi .

Bạn có thể tìm thấy .profiletrong thư mục nhà của người dùng - sử dụng ls -lađể xem nó.

.profileTập tin của bạn có thể có một cái gì đó như thế này:

PATH=/usr/bin
export PATH
#Add this to go bash at login
bash
#end

7
Đây là một cách giải quyết công bằng. Mặc dù, sẽ dễ dàng hơn khi chỉ có / usr / bin / bash trên một dòng. Ngoài ra, nó có thể đẹp hơn để 'thực thi' lớp vỏ mới do đó thay thế quy trình hiện tại.
Peter Jenkins

Tôi làm tương tự với .shellrc(đã đổi thành tên tệp chính xác), nhưng tôi cũng khai báo một biến môi trường trước đó và exec bashchỉ khi nó không được đặt, để cho phép thực hiện thủ công trình bao và để tránh các vòng lặp không may. Lưu ý rằng bạn không phải sử dụng một phương ngữ shell cụ thể, vì bạn chỉ có thể thực thi một tập lệnh với shebang phù hợp để thực hiện các thao tác này.
MayeulC

4

Vì vậy, câu trả lời thực sự trong trường hợp của tôi là quản trị viên hệ thống (IT) muốn khóa cấu hình tiêu chuẩn, vì vậy bạn phải hỏi họ. Nhưng trong quá trình tôi đã phát hiện ra một số lệnh hữu ích hơn để tìm ra cấu hình LDAP của bạn (nếu đó là cách bạn được cấu hình), chỉ trong trường hợp hệ thống của bạn báo cáo cùng một lỗi SASL "ldap_sasl_interactive_bind_s: Phương thức xác thực không xác định (-6) : SASL (-4): không có cơ chế khả dụng: "

Liệt kê các phương thức xác thực SASL mà hệ thống của bạn hỗ trợ:

 ldapsearch -x -LLL -s "base" -b "" supportedSASLMechanisms

Kết quả có thể là một cái gì đó như:

dn:
supportedSASLMechanisms: EXTERNAL
supportedSASLMechanisms: DIGEST-MD5

Sau đó, bạn có thể chuyển phương thức xác thực cho các lệnh LDAP bằng tùy chọn -Y như vậy:

ldappasswd -Y DIGEST-MD5
ldapmodify -Y DIGEST-MD5

4

Một giải pháp khác là chỉ cần ghi đè lên trình bao YP của bạn:

Thêm dòng này vào /etc/passwd:

+<USERNAME>::::::/bin/bash

Thí dụ:

+psalm33::::::/bin/bash

Và thêm các mục sau vào /etc/nsswitch.conf:

passwd: compat

passwd_compat: nis

Như tôi đã nói, tôi không có quyền root trên hệ thống của mình (vì vậy các tệp trong / etc không có giới hạn để chỉnh sửa). Nhưng, câu trả lời này có thể giúp người khác có vấn đề tương tự.
Ogre Psalm33

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.