我正在寻找一种方法来从命令行替换 /etc/passwd 中的 mysql 用户 shell 配置,因为有多个服务器我想禁用 mysql 用户的 shell。
实际的
mysql:x:498:498:MySQL server:/var/lib/mysql:/bin/bash
期望的
mysql:x:498:498:MySQL server:/var/lib/mysql:/sbin/nologin
答案1
不要/etc/passwd
用修改sed
。请改用提供的用于与该文件交互的工具。
在这种情况下,chpass
/ chsh
,或者可能是更一般的usermod
。
在大多数系统上:
$ sudo chpass -s /sbin/nologin mysql
或者
$ sudo chsh -s /sbin/nologin mysql
会工作。
您不想/etc/passwd
使用sed
(或使用vim
/ emacs
)进行编辑,并且确实不与sed -i
.
用户@JdeBPvipw
在下面的评论中提醒我有关该实用程序的信息。这是一个特殊的命令,很像visudo
,它允许您/etc/passwd
在处理文件锁定等的同时进行编辑。它还在安装新密码文件代替旧密码文件之前对保存的文件进行一致性/语法检查。vipw
有关详细信息,请参阅系统手册。这是手动编辑密码文件的唯一安全方法。
另请注意,在一些Unix 系统中,默认登录 shell 是通过密码文件以外的其他方式设置的。例如,在 OS X 上,普通用户甚至没有/etc/passwd
.