今天在CentOS中配置Hadoop的時候突然遇到使用普通用戶無法切換到root用戶的問題,即輸入
$ su -
- 1
提示輸入密碼后無法切換到root用戶,而是提示如下錯誤:
su: Authentication failure
- 1
好好地怎么出現這個問題了呢,百度了一下午基本上都是這個答案:
這個問題產生的原因是由於ubuntu系統默認是沒有激活root用戶的,需要我們手工進行操作,在命令行界面下,或者在終端中輸入如下命令:
$ sudo passwd root 系統提示輸入當前用戶密碼: 然后輸入新的root密碼: 確認新密碼: 系統提示更新成功,OK!
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
雖然說的都是ubuntu系統,但死馬當活馬醫,姑且照着做吧。
我先登錄普通用戶,輸入
$ sudo passwd root
- 1
系統提示當前用戶不在sudoers中,即沒有權限。
那么換成root用戶登錄。這里要說明一下,我的系統普通用戶和root用戶分別登錄都沒有問題,問題是不能通過su命令切換。
在root用戶下編輯sudoers文件:
# vim /etc/sudoers
- 1
- 2
在文件中添加如下語句,這里的njupt是我的普通用戶:
# Allow njupt njupt ALL=(ALL) ALL
- 1
- 2
保存,系統會提示文件是只讀的,需要輸入!強制保存,照做。
再試試這個命令
$ sudo passwd root
- 1
發現還是不行,會提示如下錯誤:
sudo: effective uid is not 0, is sudo installed setuid root?
- 1
這是因為sudo命令沒有S(setuid)權限,因此其他用戶執行sudo命令時,報上面錯誤。可以這樣理解setuid權限:當一個具有可執行權限的文件設置SetUID權限后,其他用戶執行這個文件時將以這個文件的所有者的身份進行執行。
為sudo命令設置setuid權限
$ chmod u+s /usr/bin/sudo
- 1
然后看一下
[njupt@master bin]$ ll | grep sudo -rwsrwxrwx. 1 root root 130720 Mar 6 2015 sudo
- 1
- 2
有了S權限以后再試試這個命令
$ sudo passwd root
- 1
發現提示信息改變了:
[njupt@master bin]$ sudo passwd root sudo: /etc/sudoers is world writable sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin
- 1
- 2
- 3
- 4
這兩條是新的錯誤信息
sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin
- 1
- 2
這是因為sudoers 文件的權限不對,正常的權限應該是440(r–r—–),我是因為之前瞎折騰的時候修改過這個文件的權限。現在改回來
# chmod 440 /etc/sudoers # ll | grep sudo -rw-r-----. 1 root root 1786 Mar 6 2015 sudo.conf -r--r-----. 1 root root 4035 Sep 10 04:31 sudoers drwxr-x---. 2 root root 6 Mar 6 2015 sudoers.d -rw-r-----. 1 root root 3181 Mar 6 2015 sudo-ldap.conf
- 1
- 2
- 3
- 4
- 5
- 6
- 7
再一次執行這個命令
[njupt@master bin]$ sudo passwd root [sudo] password for njupt: Changing password for user root. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
successfully!難道這樣就可以了?試試
[njupt@master bin]$ su -
Password:
su: Authentication failure
- 1
- 2
- 3
絕望了好吧。。。
網上還有一種說法,說用這個命令:
$ sudo su
- 1
代替su命令。我試了一下,確實可以,而且不需要輸入root密碼,而是要輸入普通用戶的密碼
[njupt@master bin]$ sudo su [sudo] password for njupt: [root@master bin]#
- 1
- 2
- 3
到此為止切換用戶的問題算是解決了,但出現Authentication failure的根本原因還是不知道,而且su命令仍然無法使用。
以前明明是可以的(淚奔~)。