CC-A80 板子的怪問題: 只有root可以登入, 其他使用者無法登入
發生現象
最近把剛剛裝好Debian 系統的CC-A80 板子拿來使用, 一開始, 用root 登入, 使用一切都沒問題, 但是在新增一個一般user account後, 用ssh 竟然發現無法登入, 現象如下:
$ ssh testuser@192.168.1.1
testuser@192.168.1.1's password:
Linux bsms 3.4.39 #1 SMP PREEMPT Thu Dec 25 17:06:42 CST 2014 armv7l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Dec 26 07:34:05 2014 from 192.168.1.2
Connection to 192.168.1.1 closed.
$
從上面現象看來, 已經連上CC-A80 板子了, 但是卻突然間斷線了.
用root 連上CC-A80 板子上, 查看/var/log/auth.log, 如下
root@cb4-work:~# cat /var/log/auth.log
..前略
Dec 26 08:04:49 cb4-work sshd[3184]: Accepted password for haoadmin from 192.168.1.2 port 64770 ssh2
Dec 26 08:04:49 cb4-work sshd[3184]: pam_unix(sshd:session): session opened for user testuserby (uid=0)
Dec 26 08:04:49 cb4-work sshd[3186]: Received disconnect from 192.168.1.2: 11: disconnected by user
Dec 26 08:04:49 cb4-work sshd[3184]: pam_unix(sshd:session): session closed for user testuser
root@cb4-work:~#
看來, 的確已經通過pam_unix 那關, 在進入shell 之前, 但是卻突然間被斷線了.
查過許多地方, 像是user account 的建立, shell 是否ok, 以及root filesystem. 一模一樣的東西 放在我的CubieTruck 板子都ok, 但是偏偏在CC-A80 上卻有問題, 因此我把方向朝向linux kernel 上來查.
問題所在
查了許久, 在網路上看到這篇文章“Only root can login. Possible reasons? “ , 想說, 他的問題跟我好像. 於是在CC-A80 中執行如下指令查看vm.mmap_min_addr 的值:
root@cb4-work:~# sysctl -a | grep vm.mmap_min_addr
vm.mmap_min_addr = 65536
將其改為4096
root@cb4-work:~# sysctl -w vm.mmap_min_addr="4096"
vm.mmap_min_addr = 4096
然後再測試
$ ssh testuser@192.168.1.1
testuser@192.168.1.1's password:
Linux bsms 3.4.39 #1 SMP PREEMPT Thu Dec 25 17:06:42 CST 2014 armv7l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Dec 26 07:34:05 2014 from 192.168.1.2
testuser@cb4-work:~$
果然可以登入了.
解決方法
既然知道問題所在, 解法就容易了, 有兩種解法
方法一: 是在compile kernel 指定CONFIG_DEFAULT_MMAP_MIN_ADDR的值.
我看了一下我的CC-A80 linux kernel config file, 發現MMAP_MIN_ADDR 的原設定如下:
CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
將這行刪除讓其使用內定值, 一般內定值是4096, 或者是自己強制設成4096 都可以
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
然後重新編譯kenel 就好了.
方法二:
若你無法重新編譯kernel, 也可以在系統啟動時, 動態修改vm.mmap_min_addr 的值, 方法如下:
# echo "vm.mmap_min_addr = 4096" > /etc/sysctl.d/mmap_min_addr.conf
然後重開機即可.
不然也可以重啟procps service
# /etc/init.d/procps restart
結論
雖說已經解決問題, 但是為何設成65536 會造成如此的現象, 我也搞不懂..網路上也沒查到資料, 只能先把這事件記下來, 等以後有機會再深入了解囉.