Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 检查用户是否具有有效的登录shell_Linux_Bash_Shell_Ubuntu - Fatal编程技术网

Linux 检查用户是否具有有效的登录shell

Linux 检查用户是否具有有效的登录shell,linux,bash,shell,ubuntu,Linux,Bash,Shell,Ubuntu,我试图找到一种方法来检查/etc/passwd中的用户是否具有有效的登录shell 我看到有一个/etc/shells文件包含shell,但我不知道如何检查用户的shell是否指向那里。使用getent访问用户的密码数据库 使用id检查用户是否存在 使用cut-d:-f7恢复用户的默认shell或登录shell !/副秘书长/垃圾箱/环境卫生 u=1美元 如果id$u>/dev/null 2>&1;然后 s=$GEENT passwd$u |切割-d:-f7 如果[-n$s]&&grep-qwF

我试图找到一种方法来检查/etc/passwd中的用户是否具有有效的登录shell

我看到有一个/etc/shells文件包含shell,但我不知道如何检查用户的shell是否指向那里。

使用getent访问用户的密码数据库

使用id检查用户是否存在

使用cut-d:-f7恢复用户的默认shell或登录shell

!/副秘书长/垃圾箱/环境卫生 u=1美元 如果id$u>/dev/null 2>&1;然后 s=$GEENT passwd$u |切割-d:-f7 如果[-n$s]&&grep-qwF$s/etc/shells;然后 printf'用户%s有一个有效的shell%s\n'$u$s fi 其他的 printf'未知用户%s\n'$u>&2 fi 或更正的语法

!/副秘书长/垃圾箱/环境卫生 而IFS=:read-ru\uuu\us;做 grep-qwF$s/etc/shells&v=''| | v='n'in' printf“%s”有一个%s有效shell \n'$u$v 完成使用getent访问用户的密码数据库

使用id检查用户是否存在

使用cut-d:-f7恢复用户的默认shell或登录shell

!/副秘书长/垃圾箱/环境卫生 u=1美元 如果id$u>/dev/null 2>&1;然后 s=$GEENT passwd$u |切割-d:-f7 如果[-n$s]&&grep-qwF$s/etc/shells;然后 printf'用户%s有一个有效的shell%s\n'$u$s fi 其他的 printf'未知用户%s\n'$u>&2 fi 或更正的语法

!/副秘书长/垃圾箱/环境卫生 而IFS=:read-ru\uuu\us;做 grep-qwF$s/etc/shells&v=''| | v='n'in' printf“%s”有一个%s有效shell \n'$u$v
完成这是我通常在脚本中执行的方式

danesh@hades:/tmp$ env | grep LOGNAME
LOGNAME=danesh

danesh@hades:/tmp$ getent passwd $LOGNAME | cut -d: -f7
/bin/bash

danesh@hades:/tmp$ getent passwd danesh | cut -d: -f7
/bin/bash

danesh@hades:/tmp$ getent passwd nobody | cut -d: -f7
/usr/sbin/nologin

希望有帮助。

这是我通常在脚本中执行的方式

danesh@hades:/tmp$ env | grep LOGNAME
LOGNAME=danesh

danesh@hades:/tmp$ getent passwd $LOGNAME | cut -d: -f7
/bin/bash

danesh@hades:/tmp$ getent passwd danesh | cut -d: -f7
/bin/bash

danesh@hades:/tmp$ getent passwd nobody | cut -d: -f7
/usr/sbin/nologin

希望有帮助。

这个问题的哪一部分给你带来了困难?passwd文件是一个以冒号分隔的文件,其中包含有关用户shell的信息。Unix有各种工具cut、awk等,可以从文件中提取信息。到目前为止你试过什么?你在哪里被卡住了?我被困在使用循环迭代每个用户的shell,然后检查它是否属于登录shell显示一个普通用户会得到一个无效的shell吗?chsh不允许您选择不在/etc/shell中的shell。@chepner系统用户通常是在不经过chsh的情况下添加的,并使用/bin/false和/sbin/nologin等shell来禁用登录。OP没有只指定普通用户…?这个问题的哪一部分给您带来了困难?passwd文件是一个以冒号分隔的文件,其中包含有关用户shell的信息。Unix有各种工具cut、awk等,可以从文件中提取信息。到目前为止你试过什么?你在哪里被卡住了?我被困在使用循环迭代每个用户的shell,然后检查它是否属于登录shell显示一个普通用户会得到一个无效的shell吗?chsh不允许您选择不在/etc/shell中的shell。@chepner系统用户通常是在不经过chsh的情况下添加的,并使用/bin/false和/sbin/nologin等shell来禁用登录。OP没有仅指定普通用户。。。?