Ubuntu 16.04 – root login

Loading

測試環境為 Ubuntu 16.04 Desktop 64bits

Ubuntu 預設是不能使用 root 來登入,只能用一般使用來登入,然後透過 #sudo su – 切換身份 或是 gksudo(Graphically sudo) https://benjr.tw/1273 等方式來執行一些特權指令.

下面步驟可以讓使用者在登入時選擇 root 來登入.

首先先設定 root 的密碼.

ben@ubuntu:~$ sudo -i passwd root
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

Text

Ubuntu Desktop 預設為 GUI 模式,可以透過 systemctl 來改成文字模式.

ben@ubuntu:~$ sudo systemctl get-default
graphical.target
ben@ubuntu:~$ sudo systemctl set-default multi-user.target
Created symlink from /etc/systemd/system/default.target to /lib/systemd/system/multi-user.target.
ben@ubuntu:~$ sudo systemctl isolate multi-user.target
ben@ubuntu:~$ sudo systemctl get-default
multi-user.target

剛剛我們已經有設定過 root 的密碼了,其實這樣就可以在文字模式用 root 的身份來登入.

Text-Autologin

如果想設定自動登入需修改設定檔 /lib/systemd/system/getty@.service

ben@ubuntu:~$ sudo vim /lib/systemd/system/getty@.service
ExecStart=-/sbin/agetty --autologin root --noclear %I $TERM
#ExecStart=-/sbin/agetty --noclear %I $TERM

把原先的 ExecStart=-/sbin/agetty –noclear %I $TERM 修改成為 ExecStart=-/sbin/agetty –autologin root –noclear %I $TERM 即可.

GUI – lightdm

剛剛改成文字模式了,要透過 systemctl 來設定.

ben@ubuntu:~$ sudo systemctl get-default
multi-user.target
ben@ubuntu:~$ sudo systemctl set-default graphical.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /lib/systemd/system/graphical.target.
ben@ubuntu:~$ sudo systemctl isolate graphical.target
ben@ubuntu:~$ sudo systemctl get-default
graphical.target

Ubuntu 預設的登入管理 login managers 系統是 lightdm,所以直接針對 lightdm.conf 修改 (沒這個檔案就直接編輯新的即可)

ben@ubuntu:~$ sudo vi /etc/lightdm/lightdm.conf 
[sudo] password for ben: 
[SeatDefaults]
greeter-session=unity-greeter
user-session=ubuntu
greeter-show-manual-login=true

Ubuntu 需要重新開機.

ben@ubuntu:~$ sudo reboot

重開機後多了一個 Login 的選項,這邊就可以輸入 root 帳號以及密碼即可登入.

如果是其他的登入管理 login managers 系統,請參考

  • In GDM
    Edit /etc/gdm/custom.conf file and include AllowRoot=true.
  • In KDM
    Edit /etc/kde4/kdm/kdmrc file and change AllowRootLogin=false for AllowRootLogin=true.

使用 root 登入後會顯示錯誤訊息

mesg: ttyname failed inappropriate ioctl for device


需要修改 /root/.profile (在 mesg n || true 前面加入 tty -s &&)

# mesg n || true
tty -s && mesg n || true

指令說明:

  • tty -s
    tty – print the file name of the terminal connected to standard input ,
    -s –silent, –quiet , print nothing, only return an exit status
  • mesg n
    mesg – display (or do not display) messages from other users, y 允許使用者將訊息顯示在螢幕上, N 則不允許.
  • true
    do nothing, successfully

&& , || 的用法
cmd1 && cmd2 若 cmd1 執行正確且無錯誤 ($?=0),則執行 cmd2 ,反之若 cmd1 執行完畢且為錯誤 ($?≠0),則 cmd2 不執行.
cmd1 || cmd2 若 cmd1 執行正確且無錯誤 ($?=0),則 cmd2 不執行 ,反之若 cmd1 執行完畢且為錯誤 ($?≠0),則開始執行 cmd2.

tty -s && mesg n || true 的語法是常用的架構 (這 && 與 || 的順序就是固定),用以判斷 command1 的執行是成功還是失敗,成功則執行 command2 失敗則執行 command 3

簡化一下剛剛的指令
tty -s && mesg n || true
tty -s 成功後 ($?=0) 執行 mesg n ,因為 $?=0 所以後半段 || true 就不會去執行了.
tty -s 失敗後 ($?≠0) ,不執行 mesg n ,因為 $?≠0 所以後半段 || 就會去執行 true 了.

當有 tty 時會去執行 mesg n ,沒有就不執行(不懂為什麼要這樣設定).

SSH

雖然前面已經幫 root 設定密碼了,但是 SSH 預設不讓 root 登入.

Ben-MacBook-Air:~ Ben$ ssh root@192.168.95.221
root@192.168.95.221's password: 
Permission denied, please try again.

如果要讓 Root 可以登入,需要修改 SSH 設定檔 sshd_config

ben@ubuntu:~$ sudo vim /etc/ssh/sshd_config
#PermitRootLogin prohibit-password
PermitRootLogin yes
ben@ubuntu:~$ sudo systemctl restart sshd

這樣就 SSH 可以就可以透過 root 登入了.

Ben-MacBook-Air:~ Ben$ ssh root@192.168.95.221
root@192.168.95.221's password: 
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.15.0-46-generic x86_64)
沒有解決問題,試試搜尋本站其他內容

One thought on “Ubuntu 16.04 – root login

  1. 自動引用通知: sudo – Benjr.tw

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料