測試環境為 Ubuntu 18.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 Mode
Ubuntu Desktop 預設為 GUI 模式,可以透過 systemctl 來改成文字模式(Text Mode).
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 Mode – 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 -o '-p -- \\u' --noclear %I $TERM
把原先的 ExecStart=-/sbin/agetty -o ‘-p — \\u’ –noclear %I $TERM 修改成為 ExecStart=-/sbin/agetty –autologin root –noclear %I $TERM 即可.
GUI Mode
剛剛改成文字模式了,要透過 systemctl 來設定回圖形模式 (Graphic Mode).
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 ,所以直接針對 50-unity-greeter.conf 設定檔修改 (沒這個檔案就直接編輯新的即可)
ben@ubuntu:~$ sudo vim /usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf greeter-show-manual-login=true all-guest=false
還有 PAM – Pluggable Authentication Modules 的設定 (桌面系統使用的是 GDM – GNOME Display Manager),需移除 (#) 在 /etc/pam.d/gdm-autologin 與 /etc/pam.d/gdm-password , auth required pam_succeed_if.so user != root quiet_success 這一項設定.
ben@ubuntu:~$ sudo vim /etc/pam.d/gdm-autologin # auth required pam_succeed_if.so user != root quiet_success
ben@ubuntu:~$ sudo vim /etc/pam.d/gdm-password # auth required pam_succeed_if.so user != root quiet_success
Ubuntu 需要重新開機.
ben@ubuntu:~$ sudo reboot
重開機後在 Not listed 選項輸入 root 帳號以及密碼即可登入.
使用 root 登入後會顯示錯誤訊息
mesg: ttyname failed inappropriate ioctl for device
需要修改 /root/.profile (在 mesg n || true 前面加入 tty -s &&)
ben@ubuntu:~$ sudo vim /root/.profile # 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)
1. The accounts (root or default user) are not available (cannot login even if password is correct) after screen locked (Windows Key + L).
2. My solution for your reference:
[Original]
auth required pam_succeed_if.so user != root quiet_success
[Your Method – comment the statement]
#auth required pam_succeed_if.so user != root quiet_success
[My Method – remove the statement “user != root quiet_success”]
auth required pam_succeed_if.so
我的Ubuntu 18.04 Sever安裝Desktop套件之後,改這兩個地方就可以了
#sudo vim /etc/gdm3/custom.conf, Under [security] type AllowRoot=true
#sudo vim /etc/pam.d/gdm-password
Search this line and mark it to no work.
so that it looks like this
#aut h required pam_succeed_if.so user != root quiet_success
感謝你的分享.