Когда пользователь входит в систему, мне нужно выполнить команду, которая требует повышенных привилегий. Я не хочу предоставлять пользователю sudo доступ к этой команде. Я просто хочу запустить этот скрипт для этого пользователя, а не для всех пользователей.
Я бы использовал chmod 6755 filename
(или 6711, если вы не хотите, чтобы его читали другие пользователи), а затем поместил бы его в cron ... Это должно работать, так как это разрешение на запуск этого файла как владельца. Итак, если вы создадите его как root, вы сможете использовать его следующим образом ...
Судя по вашему комментарию, вы хотите, чтобы пользователь 'fred' не имел обычной оболочки, а запускал скрипт 'foo' при входе в систему. Это можно легко сделать, если вы не ожидаете, что Фред изо всех сил попытается сбежать из своей «песочницы».
$ cat ~fred/.bash_login
#!/bin/bash
exec /usr/local/bin/foo
## in ubuntu each user has a group of his "own"
$ sudo chown foo:fred ~fred ~fred/.bash_login /usr/local/bin/foo
## prevent fred from altering the files and directories we care about
$ sudo chmod g-w ~fred ~fred/.bash_login /usr/local/bin/foo
## make script foo run with user foo's privileges
$ sudo chmod u+s /usr/local/bin/foo
Так что fred теперь даже не получит приглашение оболочки, потому что первое, что делает его оболочка входа в систему, - это заменяет себя на foo; когда скрипт foo завершает работу, fred выйдет из системы. Причина, по которой Фреду не хватает мотивации, чтобы вылезти из этой песочницы, заключается в том, что многие программы позволяют открывать подчиненные оболочки, что позволит Фреду отменить блокировку бедняка, показанную здесь.
Использование этого метода с «root» вместо некоторого не суперпользователя foo может быть использовано для захвата root, так что не делайте этого.