1

Я работаю над сценарием оболочки, чтобы легко управлять учетными записями. Я хочу иметь возможность включать и отключать доступ к оболочке (что легко), но сложно найти, если учетная запись уже имеет доступ к оболочке, поэтому мой сценарий может показать правильные параметры.

Вот что у меня сейчас есть:

Примечание: $account - это заданная учетная запись.

function checkIfShellAccess
{
    ret=false
    getent passwd $account >'/bin/bash' 2>&1 && ret=true

    if $ret; then
        HAS_SHELL=1
    else
        HAS_SHELL=0
    fi
}

Моя проблема: Когда я запускаю свой скрипт и проверяю, есть ли у пользователя доступ к оболочке, я получаю следующее уведомление:

line 241: /bin/bash: Text file busy

строка 241:

getent passwd $account >'/bin/bash' 2>&1 && ret=true

Я использую: CentOS release 6.5 (Final)

Спасибо за любую помощь в этом.

1 ответ1

2
getent passwd $account >'/bin/bash' 2>&1 && ret=true

Приведенная выше строка пытается перезаписать /bin/bash . Вы не хотите этого делать. Чтобы проверить наличие /bin/bash в строке, возвращаемой getent , используйте вместо этого:

getent passwd "$account" | grep -q '/bin/bash' && ret=true

Это будет работать, потому что grep устанавливает код выхода в зависимости от того, нашел ли он текст.

Однако существует множество различных оболочек, которые могут использовать пользователи. Они могут включать в себя csh , ksh и zsh . Когда доступ к оболочке отключен, для оболочки обычно устанавливается значение /bin/false . Если это верно для вашей системы, рассмотрите тест:

getent passwd "$account" | grep -q '/bin/false' || ret=true

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .