近日遇到一怪事,執(zhí)行usermod更改用戶家目錄時,被提示usermod: user xxx is currently logged in,可是用戶根本沒有登陸到系統(tǒng)里啊。查了下,網(wǎng)上普遍的解決方法是備份以后清空/var/run/utmp文件,再重啟以后就好了。可說的容易,服務(wù)器哪是想重啟就重啟的?
$ usermod -d /some/opther/path userfoo
usermod: user userfoo is currently logged in
$ who
myuser pts/0 2018-08-17 11:29 (1.2.3.4)
$ ps aux | grep userfoo
root 16724 0.0 0.0 103236 884 pts/0 S+ 11:36 0:00 grep userfoo
根本原因:chmod是根據(jù)lsof判斷用戶是否已經(jīng)logged in的。通過lsof找出“正在登陸”的用戶,kill掉相關(guān)進(jìn)程就可以了。
$ lsof | grep userfoo
dbus-daem 29904 userfoo cwd unknown /proc/29904/cwd (readlink: Permission denied)
dbus-daem 29904 userfoo rtd unknown /proc/29904/root (readlink: Permission denied)
dbus-daem 29904 userfoo txt unknown /proc/29904/exe (readlink: Permission denied)
dbus-daem 29904 userfoo NOFD /proc/29904/fd (opendir: Permission denied)
dbus-daem 31889 userfoo cwd unknown /proc/31889/cwd (readlink: Permission denied)
dbus-daem 31889 userfoo rtd unknown /proc/31889/root (readlink: Permission denied)
dbus-daem 31889 userfoo txt unknown /proc/31889/exe (readlink: Permission denied)
dbus-daem 31889 userfoo NOFD /proc/31